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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2017, 10:39   #1
Palomnik1096
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 83
По умолчанию Переполнгение счетчика

Добрый день!

Смысл программы, открывается куча ОСВ (обороток) в них ищется контрагент и подсвечивается. Но при выполнении пишет ошибку (переполнение счетчика qwer), если изменить на тип ЛОНГ, то он вообще зависает, но при этом если выполнять программу построчно через Ф8, то все гуд работает.

Код:
Public Sub poisk2()

Dim asd As Integer, qwer As Integer, Client As String
Dim v As Workbook, asdf As Integer
asdf = Workbooks.Count
Client = UCase(InputBox("Введите название компании", "Название компании"))
    
Range("A10:C10").Select
Selection.UnMerge
     
     
For i = 1 To asdf
Workbooks(i).Activate
    
    With Range("A10")
             qwer = Range(.Offset(1, 0), .End(xlDown)).Rows.Count
            For asd = 1 To qwer
                If Left(.Offset(asd, 0), 2) = 62 Then
                    Exit For
                ElseIf Client = "" Then
                    Exit For
                Else
                qwertyu = .Offset(asd, 2)
                    If UCase(.Offset(asd, 2)) Like "*" & Client & "*" Then
                        .Offset(asd, 2).Interior.ColorIndex = 22
                    End If
                End If
            Next
    End With
   Next
End Sub

Последний раз редактировалось Palomnik1096; 22.06.2017 в 10:43.
Palomnik1096 вне форума Ответить с цитированием
Старый 22.06.2017, 10:48   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Palomnik1096 Посмотреть сообщение
. Но при выполнении пишет ошибку (переполнение счетчика qwer), если изменить на тип ЛОНГ, то он вообще зависает
рискну предположить, что где-то есть лист, на котором ОЧЕНЬ много строк.

для проверки попробуйте просто:
Код:
Dim qwer as Long
For i = 1 To asdf
    Workbooks(i).Activate
    
    With Range("A10")
            qwer = Range(.Offset(1, 0), .End(xlDown)).Rows.Count
            MsgBox "в книге " & CStr(i) & " обрабатываемых строк = " & CStr(qwer)
    End With
Next i

p.s. а ещё, если в макросе используется .Select . Activate - то, в 99.9% случаев это означает, что макрос написан крайне неэффективно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.06.2017, 10:53   #3
Palomnik1096
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
рискну предположить, что где-то есть лист, на котором ОЧЕНЬ много строк.
Проверял листы, больше 5000 строк нигде не было, то есть тип Интегер соблюдается

Цитата:
p.s. а ещё, если в макросе используется .Select . Activate - то, в 99.9% случаев это означает, что макрос написан крайне неэффективно...
Здесь писалось для себя, поэтому через Селект
Palomnik1096 вне форума Ответить с цитированием
Старый 22.06.2017, 11:07   #4
Palomnik1096
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
рискну предположить, что где-то есть лист, на котором ОЧЕНЬ много строк.
Попробовал макрос на подсчет строк, получается первая книга считает 1048566 строк! А почему так? Хотя активных всего 803! Не совсем понимаю

По остальным все гуд, считает как есть... Если делать через Ф8, то считает, как положено...

Последний раз редактировалось Palomnik1096; 22.06.2017 в 11:13.
Palomnik1096 вне форума Ответить с цитированием
Старый 22.06.2017, 11:35   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Palomnik1096 Посмотреть сообщение
Попробовал макрос на подсчет строк, получается первая книга считает 1048566 строк!
подождите кого-то, кто разбирается в VBA.
я, например, не понимаю, что Вы в цикле делаете.

а вообще, думаю, что для решения вашей проблемы полезно было
1) объяснить, какую задачу Вы решаете, что именно Вы этим кодом пытаетесь найти
2) выложить на форум архив с проблемной книгой (если там информация не для посторонних, то заменить все значимые данные на случайные, чтобы скрыть их).

впрочем, возможно, что решение будет предложено и без файла.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.06.2017, 11:43   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

на листе что-то косячно было вставлено от и столько строк получилось

попробуйте такой qwer
Код:
qwer = Cells(Rows.Count, 1).End(xlUp).Row
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 23.06.2017, 10:15   #7
Palomnik1096
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 83
По умолчанию

[QUOTE=Serge_Bliznykov;1688216]подождите кого-то, кто разбирается в VBA.
я, например, не понимаю, что Вы в цикле делаете.

а вообще, думаю, что для решения вашей проблемы полезно было
[QUOTE]

Цитата:
1) объяснить, какую задачу Вы решаете, что именно Вы этим кодом пытаетесь найти
Этим кодом просматривается ОСВшка на предмет наличия компании которая нужна

Цитата:

2) выложить на форум архив с проблемной книгой (если там информация не для посторонних, то заменить все значимые данные на случайные, чтобы скрыть их).
К сожалению не могу, коммерческая тайна

Цитата:
впрочем, возможно, что решение будет предложено и без файла.
Все равно спасибо за участие
Palomnik1096 вне форума Ответить с цитированием
Старый 23.06.2017, 10:17   #8
Palomnik1096
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
на листе что-то косячно было вставлено от и столько строк получилось

попробуйте такой qwer
Код:
qwer = Cells(Rows.Count, 1).End(xlUp).Row
Спасибо, все получилось!!!

Единственное можно не большой коммет!

Cells(Rows.Count, 1).End(xlUp).Row - это я так понимаю идет подсчет всех ячеек со смещением 1, только не как у меня сверху вниз, а снизу вверх?
Palomnik1096 вне форума Ответить с цитированием
Старый 23.06.2017, 10:27   #9
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Cells(Rows.Count, 1).End(xlUp).Row
Про себя, ету запись я читаю так:
- перейти в самую последнюю, из возможных, ячеек столбца 1
- сместить вверх, пока не найдешь непустую ячейку
- дай мне номер строки етой непустой ячейки ===>> количество использованных строк в столбце 1
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 23.06.2017, 10:30   #10
Palomnik1096
Пользователь
 
Регистрация: 12.11.2010
Сообщений: 83
По умолчанию

Спасибо!
Palomnik1096 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа счетчика Частухина Анна Помощь студентам 3 28.11.2012 16:24
накрутка счетчика megostudent Свободное общение 13 15.04.2012 18:38
Алгоритм счетчика Niksan Visual C++ 1 10.06.2011 21:24
значение счетчика dark_sergey Паскаль, Turbo Pascal, PascalABC.NET 6 16.12.2010 22:47
Установка счетчика doober Microsoft Office Access 3 21.02.2010 23:15