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

Когда это сделаете - взглянем на результат и пойдем дальше - там есть чего еще упростить.
...
Рейтинг: 0 / 0
Упростить макрос
    #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
Упростить макрос
    #39773998
IvanAf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

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

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

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

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

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

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


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