Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 24.09.2013, 13:34   #11
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Сейчас дотыкался до ошибки "method pastespecial of object range failed"( был офис 2007, ошибку поймал на 2010) прога не упала,свалила в дебагер.
Где-то недавно читал в обсуждении, но вот не могу найти где. Если такая шутка используется
Код:
  Сцепка.Range(Cells(y + Zy, x + Zx).Address, Cells(y1 + Zy, x1 + Zx).Address).Copy
а значением для Range является только одна ячейка.
Т.е. y + Zy=y1 + Zy и x + Zx= x1 + Zx. Чем считает ее экесель? Диапазоном же? Прост на таких штуках сейчас падает.


P.S. Чтобы свалить в дебагер, нужно изменить номер маршрута у какого-нибудь магазина вверху на такой, которого нет. скажем на 30ый. и посчитать для него расчет очереди.
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 24.09.2013 в 13:54.
SaLoKiN вне форума
Старый 24.09.2013, 13:51   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Точно, извините, тот диапазон ниже.
Но что мешает и его взять в массив, чтоб было быстрее? Хотя всего 90 ячеек в данном случае - разницу не заметите...

Почему я раньше не наблюдал такого эффекта на скрытых строках?
Вероятно так много кучей редко скрывал...
Это риторический вопрос


Ещё вот этот массив зачем 92 раза выгружать (с дополнением)?
ThisWorkbook.ActiveSheet.Range(Cell s(3, 1), Cells(j + 2, 10)) = b
Соберите полный и выгрузите 1 раз.

Но всю логику пока не вижу. Что из чего там получаете... Ну да ладно, делать всю задачу всё равно некогда.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума
Старый 24.09.2013, 18:46   #13
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Ее делать и не нужно) Нужно поймать баг,который все рушит и исправить... что собственно я и не могу самостоятельно =(
По поводу выгрузки - сделаю.
Подскажите про Range.cells при условии что координаты дают одну ячейку. выше писал уже... прост на 10 екселе падает в дебагер когда диапазон это одна ячейка. И еще... нет у вас случайно адекватной сортировки двумерного массива( будет круто если по нескольким параметрам)
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума
Старый 24.09.2013, 21:43   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Есть сортировка.
Правда код не мой, я его только дополнил - изначально он был то ли только для одномерного массива, то ли только для двух столбцов двумерного, не помню. И не помню чей, не записал...
Не буду гадать, чтоб не обидеть автора...
Код:
Option Explicit

Sub tt()
    Dim a()
    a = Sheets(1).[a1].CurrentRegion.Value
    uSort a, 3
    Sheets(1).[e1].Resize(UBound(a, 1), UBound(a, 2)) = a
End Sub



Private Sub uSort(ByRef x(), n&)
    Dim v, u&, d&, f%, st&
    If IsArray(x) Then
        f = LBound(x): d = f
        For u = f + 1 To UBound(x)
            If x(u, n) < x(d, n) Then
                For st = LBound(x, 2) To UBound(x, 2)
                    v = x(d, st): x(d, st) = x(u, st): x(u, st) = v
                Next
                u = d - 1: d = u - 1: If u < f Then d = u: u = f
            End If
            d = d + 1
        Next
    End If
End Sub
Тут сортировка по третьему столбцу.

P.S. Погонял код на 2003 - не виснет. Что делает - не вникал.
Да, если одна ячейка - это не массив. Тогда можно создать массив принудительно:
Код:
ReDim a(1 To 1, 1 To 1)
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 24.09.2013 в 21:53.
Hugo121 вне форума
Старый 25.09.2013, 06:13   #15
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Спасибо, но вот чет я не могу понять... через tt() работает, пытаюсь кинуть массив с программы ругается на несоответствие типов.. и там и там массив двумерный...
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума
Старый 25.09.2013, 09:53   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Не знаю про типы - нужно видеть что как делаете. Пустые ячейки не мешают, проверил...
Ну а если нужно по нескольким столбцам сразу - можно просто создать книгу, выгрузить туда массив, отсортировать средствами Экселя (конечно программно), взять данные назад в массив, книгу убить.
Будет не дольше, чем если всё делать программно (а может и быстрее), и точно проще код
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума
Старый 25.09.2013, 10:15   #17
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Вообщем мучаю массив b, что с ним я делал
Код:
Dim b
'-----------
ReDim b(1 To UBound(a, 1), 1 To 12)
'-----------
b(j, 1) = compared2 'nomer avto
b(j, 2) = "sklad1" 'nazvanie sklada
b(j, 3) = compared1 'marshrut
b(j, 4) = a(i, 1) 'Nomer magazina
b(j, 5) = a(i, 2) 'adres magazina
b(j, 6) = a(i, 3) 'summa
b(j, 7) = a(i, 4) 'ves
b(j, 8) = a(i, 6) 'palet
b(j, 9) = a(i, 10) 'poryadok razgruzki
'---------------
' сюда кидал сортировку
uSort b, 1' на что он мне ругается на тайп мисмач

ThisWorkbook.ActiveSheet.Range(Cells(3, 1), Cells(j + 2, 10)) = b
По поводу сортировки по нескольким параметрам, а зачем новая книга? если я могу выгрузить сразу на лист и тут же отсортировать.

спустя минуты...

И кста, смысл программной сортировки сам по себе отпадает, т.к. я не могу сортировать по нескольким параметрам одновременно( изначально моя воспаленная фантазия посчитала, что я могу последовательно вызвать несколько раз сортировку по нужным мне столбцам, но догадливый моск подсказал что это лажа) т.к. сортировка перебирает весь массив и шевелит только по нужному столбцу. Вообщем вариант с выгрузкой на лист и сортировкой уже на листе самый выигрышный в этой ситуации =(
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 25.09.2013 в 10:21. Причина: спустя минуты...
SaLoKiN вне форума
Старый 25.09.2013, 10:25   #18
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Но проблема остается!

"method pastespecial of object range failed"

Код:
 Сцепка.Range(Cells(y + Zy, x + Zx).Address, Cells(y1 + Zy, x1 + Zx).Address).Copy
При y + Zy=y1 + Zy и x + Zx= x1 + Zx. Вылазит ошибка,если ячейка с данным адресом пуста, если уже что-то было. все вставляет.

Наверно это и есть тот самый злосчастный кусочек кода....
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума
Старый 25.09.2013, 11:01   #19
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну вопрос был о сортировке массива по нескольким параметрам - поэтому передложил создать, выгрузить, отсортировать, загрузить, убить
Если же это последний этап перед выгрузкой на существующий лист - тогда конечно "создать, загрузить, убить" лишнее.

Как сортировать кодом в памяти массив по нескольким столбцам одновременно - сразу и не понятно, думаю нужно потратить много часов работы чтоб придумать, я даже и не собираюсь время тратить.
Действительно если есть у кого готовое - утащил бы себе в коллекцию
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума
Старый 25.09.2013, 11:19   #20
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Вот-вот... я бы заморочился(но ток не на VBA), но время...

P.S. проблема "method pastespecial of object range failed" остается актуальной
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Qt] Вылет при изменении параметров QTableWidgetItem WarAngel-alk Qt и кроссплатформенное программирование С/С++ 4 31.01.2013 17:58
вылет программы при выводе простого числа (cout) Ciberal Общие вопросы C/C++ 7 27.09.2011 01:51
Вылет программы после завершение kloffelin Общие вопросы C/C++ 3 17.04.2010 20:18
Ошибка при использовании copyfile The Best Общие вопросы Delphi 20 22.07.2009 13:26
Проблемка при использовании регрессии 500_pinguins Microsoft Office Excel 0 16.06.2009 08:17