У меня есть рабочая книга с 20 листами с именами "WorksheetNumber1", "WorksheetNumber2", "WorksheetNumber3", "WorksheetNumber4", ..., "WorksheetNumber20".
Вот фрагмент моего кода:
Sub()
Dim Workbook1 As Workbok
Dim count As Long
count = 0
For i = 1 To 20
Select Case IsEmpty(Workbook1.Worksheets("WorksheetNumber" & i).Cells(1,1))
Case True
count = count + 1
End Select
Next i
MsgBox(count)
count = 0
For i = 1 To 20
Select Case Application.CountA(Workbook1.Worksheets("WorksheetNumber" & i).Range("$C$3:$E$5"))>0
Case True
count = count + 1
End Select
Next i
MsgBox(count)
End Sub
У меня повторяется еще много таких циклов, за исключением того, что критерии отличаются. Итак, как видите, структура кода для каждого из циклов одинакова, но критерии Select Case изменены. Как я могу сократить свой очень длинный код?
Я пытался создать функцию, которая делает переменные критериев Select Case переменными, но кажется, что она не работает, потому что критерии оцениваются до того, как они входят в функцию.
Вот что у меня есть:
Function f_1(Criteria As Variant, Workbook1) As Long
f_1 = 0
For i = 1 To 20
Select Case Criteria
Case True
f_1 = Application.Sum(f_1, 1)
End Select
Next i
End Function
А вот подпрограмма, которая пытается вызвать функцию:
Sub(Workbook1 As Workbook)
Dim count As Long
'example A
count = f_1(IsEmpty(Workbook1.Worksheets("WorksheetNumber" & i).Cells(1,1)), Workbook1)
MsgBox(count)
'example B
count = f_1(Application.CountA(Workbook1.Worksheets("WorksheetNumber" & i).Range("$C$3:$E$5"))>0, Workbook1)
MsgBox(count)
End Sub
Что происходит, так это утверждение
IsEmpty(Workbook1.Worksheets("WorksheetNumber" & i).Cells(1,1))
и утверждение
Application.CountA(Workbook1.Worksheets("WorksheetNumber" & i).Range("$C$3:$E$5"))>0
оценивается перед отправкой в функцию, поэтому, в зависимости от значения i , один рабочий лист оценивается 20 раз (если i окажется между 1 и 20 включительно), или индекс находится вне диапазона (если i не между 1 и 20 включительно).
Я попросил помощи, и кто-то предложил создать объекты; Я немного погуглил, но я не совсем уверен, как это мне поможет, поэтому, если кто-нибудь сможет помочь мне уточнить мои поисковые термины, это тоже будет здорово!
Спасибо большое!