У меня есть электронная таблица с некоторыми VBA. Он предлагает пользователю выбрать электронную таблицу с помощью файлового браузера. Электронная таблица, которую выбирает пользователь, содержит длинный список элементов в строках, некоторые из которых повторяются. Каждый элемент имеет несколько атрибутов в соседних столбцах.
Код принимает каждый элемент, объединяет атрибуты и создает новый лист без дубликатов элементов и атрибутов.
Мой код должен выполнять итерацию по каждому элементу в выбранной электронной таблице и проверять созданный лист, чтобы убедиться, что он уже обработал этот элемент. Если это так, он должен двигаться дальше. Если нет, он захватывает атрибуты, проверяет остаток листа на наличие дубликатов, суммирует атрибуты и добавляет его на новый лист.
В основной процедуре я нахожу столбцы, с которыми я работаю, и перебираю выбранную пользователем электронную таблицу с циклом for. С каждой итерацией я вызываю функцию doesNotExist()
. Эта функция принимает имя элемента в качестве параметра и будет перебирать все элементы на новом листе, чтобы увидеть, существует ли этот элемент на новом листе. Если элемент не существует на новом листе, он возвращает True
. В противном случае возвращается False
.
Возвращаемые данные передаются в оператор If, который будет оцениваться только в том случае, если моя функция вернет True
. Или, по крайней мере, так и должно быть.
Я использовал много окон сообщений, чтобы увидеть, что именно делает мой код. Функция всегда правильно оценивает данные. Однако код внутри оператора If всегда будет выполняться независимо от возвращаемого значения.
Я даже добавил Else
к моему оператору if с окном сообщения. Это окно сообщения никогда не открывается, даже когда моя функция возвращает значение false.
Function doesNotExist(itemName As String, itemP As String, arSheet As Worksheet) As Boolean
'iterates through all items on the PO. Checks to see if item defined in param exists in PO
For i = 17 To (arSheet.Range("itemCount") + 17)
If ((StrComp(arSheet.Cells(i, 4), itemName)) = 0) Then
If ((StrComp(arSheet.Cells(i, 7), itemP)) = 0) Then
doesNotExist = False
End If
End If
Next i
doesNotExist = True
End Function
If (doesNotExist(wb2.Worksheets(1).Cells(i, itemName.Column), wb2.Worksheets(1).Cells(i, itemP.Column), ar)) Then
~code~
Else
MsgBox ("I did not print " & wb2.Worksheets(1).Cells(i, skuName.Column))
End If