|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Ускорить работу макроса |
|
VBA - Ускорить работу макроса
|
Старожил Сообщения: 329 |
Как ускорить работу скрипта?
Sub test() Dim arr1() Application.ScreenUpdating = False 'range и массив рабочей книги ncolumn = Rows(1).Find(What:="Обозначение", LookIn:=xlValues, LookAt:=xlWhole).Column Columns(ncolumn + 1).Insert 'вставляем столбец справа Cells(1, ncolumn + 1).Value = "Карточки" 'вставляем заголовок столбца m = ActiveSheet.Cells(Rows.Count, ncolumn).End(xlUp).Row Set rn = ActiveSheet.Cells(2, ncolumn).Resize(m, 2) arr2 = rn.Value Set conn = New ADODB.Connection 'Создание соединения conn.ConnectionString = "Provider=SQLOLEDB.1;Password=132132;Persist Security Info=True;User ID=User;Initial Catalog=dbScanKD;Data Source=SQL05" 'Строка подключения conn.Open 'Открытие соединения Set rst = New ADODB.Recordset ' Создание объекта Recordset. rst.ActiveConnection = conn ' Подключение этого объекта к ранее открытому каналу связи. Ask = "SELECT DISTINCT [Oboznach] FROM [dbScanKD].[dbo].[vwScanKD] Where Not ([Oboznach] Like '%СБ'or [Oboznach] Like '%ТУ' or [Oboznach] Like '%ИМ' or [Oboznach] Like '%ДИ' or [Oboznach] Like '%РР' or [Oboznach] Like '%РИ' or [Oboznach] Like '%УД' or [Oboznach] Like '%ЛУ' or [Oboznach] Like '%ТБ' or [Oboznach] Like '%Э3' or [Oboznach] Like '%ПЭ3' or [Oboznach] Like '%Д7' or [Oboznach] Like '%К3' or [Oboznach] Like '%Д4' or [Oboznach] Like '%ДП' or [Oboznach] Like '%РИ' or [Oboznach] Like '%ПГ3' or [Oboznach] Like '%ПГ4' or [Oboznach] Like '%Г4' or [Oboznach] Like '%Э4' or [Oboznach] Like '%ТЭ4' or [Oboznach] Like '%ПИ' or [Oboznach] Like '%И2')" rst.Open Ask, conn, adOpenStatic, adLockBatchOptimistic ' выполняем запрос. arr1 = rst.GetRows 'закидываем в массив conn.Close 'закрываем соединение arr1 = TransposeDim(arr1) 'переворачиваем массив из строк в столбец через функцию TransposeDim с сайта майкрософт For i = LBound(arr1) To UBound(arr1) For j = LBound(arr2) To UBound(arr2) If Len(arr2(j, 1)) > 0 Then If InStr(1, arr1(i, 0), "СБ") > 0 Then If InStr(arr2(j, 1), "-") > 0 Then m = Left(arr2(j, 1), InStr(1, arr2(j, 1), "-") - 1) + "СБ" If InStr(1, arr2(j, 1) + "СБ", arr1(i, 0), vbTextCompare) > 0 Then If CInt(arr1(i, 2)) = CInt(arr1(i, 3)) Then 'cравниваем числовые значения arr2(j, 2) = arr1(i, 0) Else arr2(j, 2) = "нет страниц" End If Else If InStr(1, m, arr1(i, 0), vbTextCompare) > 0 Then If CInt(arr1(i, 2)) = CInt(arr1(i, 3)) Then 'cравниваем числовые значения arr2(j, 2) = arr1(i, 0) Else arr2(j, 2) = "нет страниц" End If End If End If Else If InStr(1, arr2(j, 1) + "СБ", arr1(i, 0), vbTextCompare) > 0 Then If CInt(arr1(i, 2)) = CInt(arr1(i, 3)) Then 'cравниваем числовые значения arr2(j, 2) = arr1(i, 0) Else arr2(j, 2) = "нет страниц" End If End If End If Else If arr2(j, 2) = Empty Then If InStr(1, arr2(j, 1), arr1(i, 0), vbTextCompare) > 0 Then For k = 1 To UBound(massoboz) If InStr(arr2(j, 1), massoboz(k, 1)) > 0 Then arr2(j, 2) = "нет сборочного" Exit For Else If CInt(arr1(i, 2)) = CInt(arr1(i, 3)) Then 'cравниваем числовые значения arr2(j, 2) = arr1(i, 0) Else arr2(j, 2) = "нет страниц" End If End If Next k End If End If End If End If Next j Next i ActiveSheet.Cells(2, ncolumn).Resize(UBound(arr2), UBound(arr2, 2)) = arr2'вываливаем на лист Application.ScreenUpdating = True End Sub |
|
------- Отправлено: 16:25, 30-11-2017 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Надо узнать, входит ли частично или полностью из таблицы base в таблице list. То есть, как и с перебором массива, надо брать элемент таблицы base и проверить входит ли он в какой либо элемент таблицы list. Если хоть раз совпало пишем в соседний столбец и переходим к следующей записи. Как то так. |
||
------- Отправлено: 14:30, 07-12-2017 | #51 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать blackeangel, увы, мой Microsoft Access 2003 не понимает формат Вашего файла mdb.
|
Отправлено: 14:52, 07-12-2017 | #52 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, у меня 2010 Access. А какой формат прочитается? accdb? Если да, то вот https://drive.google.com/file/d/190e...w?usp=drivesdk
|
------- Отправлено: 14:55, 07-12-2017 | #53 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Update: blackeangel, то, что у Вас именовано как mdb — судя по всему как раз-таки accdb: |
|
Отправлено: 15:10, 07-12-2017 | #54 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, mdb был создан макросом, а потом открыт access и дополнен. Видимо это его и сделало нечитаемым в 2003.
|
------- Отправлено: 15:17, 07-12-2017 | #55 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Я обновил предыдущее сообщение.
Цитата blackeangel:
|
|
Отправлено: 15:19, 07-12-2017 | #56 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, сохранил в 2000 формате, пробуйте https://drive.google.com/file/d/1k6A...w?usp=drivesdk
|
------- Отправлено: 15:26, 07-12-2017 | #57 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать blackeangel, у нас разные понятия об:
Цитата:
|
|
Отправлено: 15:34, 07-12-2017 | #58 |
Старожил Сообщения: 329
|
Профиль | Отправить PM | Цитировать Iska, а зачем вам их просматривать? Вам не надо смотреть таблицу basa. Вам понадобятся только list и итого. ТК это все реальный рабочий пример. База, она и есть база, и что в ней, на сервере - не знаю. То есть она как есть. Но с уверенностью в 100% скажу что те что на list есть в basa.
|
------- Отправлено: 15:39, 07-12-2017 | #59 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата blackeangel:
Цитата blackeangel:
Впрочем, я не настаиваю. Вам лень сделать «пару коротких таблиц» с примером, я же не вижу смысла копаться в сотнях тысяч записей. На том и сойдёмся. |
||
Отправлено: 16:54, 07-12-2017 | #60 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Возможно ли ускорить работу Findstr? | Darkar25 | Скриптовые языки администрирования Windows | 2 | 04-09-2017 23:42 | |
Блог - Как ускорить работу в системе с помощью избранного | Vadikan | Microsoft Windows 7 | 0 | 10-01-2011 10:30 | |
Как ускорить работу FreeBSD? | BSDmaster | Общий по FreeBSD | 9 | 15-09-2007 23:28 | |
Dial up. Как ускорить работу модема? | grob40 | Сетевые технологии | 6 | 12-12-2006 14:56 | |
Как ускорить загрузку и работу Windows? | TVI | Microsoft Windows 2000/XP | 32 | 03-06-2004 16:29 |
|