Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Упростить макрос / 9 сообщений из 9, страница 1 из 1
10.02.2019, 22:27
    #39771932
IvanAf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упростить макрос
Всем привет,
Сделал простой макрос, копирует столбцы из одного файла в два других.
Можно ли както упростить? Много строк получилось
Просто интересно какие еще решения есть
Вложил файл
...
Рейтинг: 0 / 0
10.02.2019, 22:44
    #39771939
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упростить макрос
IvanAfМного строк получилосьМного строк из-за того, что там повторяется один и тот же набор из пяти строк. То есть для начала пойти простым и классическим путем - инкапсуляция. То есть создать функцию из этих пяти строк, а все переменные величины вынести в параметры функции.

Когда это сделаете - взглянем на результат и пойдем дальше - там есть чего еще упростить.
...
Рейтинг: 0 / 0
11.02.2019, 11:03
    #39772074
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упростить макрос
IvanAf,

Можна начать с простого правила - одна процедура решает одну задачу.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Public Function HeaderValidator() As Boolean
Dim targetWS As Worksheet
Dim arHeaders() As String
Dim i As Long

arHeaders = Split("Артикул;Description;Кол-во;Цена, руб.;Сумма ;Производитель", ";")
Set targetWS = ThisWorkbook.Sheets("Спека")
For i = 0 To UBound(arHeaders)
If targetWS.Rows(2).Find(arHeaders(i), , xlValues, xlWhole) Is Nothing Then
MsgBox "Не найдено поле " & arHeaders(i), vbCritical
HeaderValidator = False
Exit Function
End If
Next i
HeaderValidator = True
End Function
...
Рейтинг: 0 / 0
14.02.2019, 18:02
    #39773998
IvanAf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упростить макрос
Shocker.Pro,

Выделил отдельную процедуру в которую вношу перменные
Визуально строк стало не сильно меньше
Но символов значительно меньше
Для понимания может не очень объективно

В том ли направлении?

Пока втыкаю как дальше применить функцию с циклом
...
Рейтинг: 0 / 0
14.02.2019, 18:08
    #39774004
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упростить макрос
Вот для чего, скажи на милость, объявлять безобразные переменные
Код: vbnet
1.
ByVal A As String, ByVal B As String, ByVal C As String, ByVal D As String

,а потом дополнительно комментарий для них писать
Код: vbnet
1.
2.
3.
4.
'A название колонки которую ищем
'B ячейка куда вставляем
'C название для этой ячейки
'D название книги (проект или заказ)

Ну почему не назвать их сразу нормально?
...
Рейтинг: 0 / 0
14.02.2019, 18:12
    #39774008
IvanAf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упростить макрос
Не думал что это так критично
Длинные получатся названия переменных
Комментарии чтобы через полгода воспомнить если понадобится чтото поправить
Смысл то хоть тот?
...
Рейтинг: 0 / 0
14.02.2019, 18:13
    #39774011
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упростить макрос
IvanAfПока втыкаю как дальше применить функцию с циклом
Нужно определить источник данных для этого цикла. Тут может быть два варианта - расположить их в ячейках на служебном листе (что даст гибкость в настройке программы), либо создать массив с помощью функции Array, а затем пройтись циклом по этому массиву.
Точнее, тут будут два массива и два цикла. При этом четвертый параметр - имя книги - хранить в массиве не нужно, так как он единый для каждого цикла.

Но оперировать именем книги не стоит. Нужно присвоить саму книгу переменной и передавать эту переменную функции (вместо имени)
...
Рейтинг: 0 / 0
14.02.2019, 18:16
    #39774012
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упростить макрос
IvanAfНе думал что это так критично
Длинные получатся названия переменных
Комментарии чтобы через полгода воспомнить если понадобится чтото поправить
Смысл то хоть тот?Ты свою жену зовешь Жена№1 или всё-таки по имени? ))
Привыкай к нормальному именованию переменных. Когда программа станет чуть больше, это перестанет быть читабельным в принципе. Необязательно делать длинными названия, но они должны быть говорящими. Да и комментарии, в общем-то, это не отменяет.

ЗЫ: Имя функции ты же дал адекватное...
...
Рейтинг: 0 / 0
14.02.2019, 18:21
    #39774015
IvanAf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Упростить макрос
Shocker.Pro,

Буду смотреть )
Через неделю вернусь
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Упростить макрос / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]