Это мой первый проект VBA, поэтому, пожалуйста, будьте терпеливы.Я создал пользовательскую форму Excel для добавления информации в базу данных.Когда я нажимаю «добавить», у меня появляется скрипт vba, который должен найти первый открытый рабочий лист за этот год (например, Name_2018_1, Name_2018_2, Name_2018_3) или создать новый рабочий лист с последовательным именем.
Я продолжаю получать ошибки компиляции на основегде я размещаю свои операторы «then» и «exit for».
Я хочу, чтобы счетчик либо находил первый лист с доступной строкой, либо проходил весь цикл через i, а затем создавал новый лист на основея ценю.
Как правильно настроить цикл for после моего else?Если кто-то может указать на то, что я делаю неправильно, это будет оценено.
'Dim myFirstBlankRow As Long
'Dim i As Long
'Dim WsName As String
'Dim WsNamei As String
'Dim ws As Worksheet
'Dim counter As Integer
'Declare worksheet names
WsName = "Name_" & Year(Me.DTPicker1.value) & "*"
WsNamei = "Name_" & Year(Me.DTPicker1.value) & "_" & i
For Each ws In Sheets
If ws.Name = WsName Or ws.Name Like WsName & "*" Then i = i + 1
Next
'If no worksheet exists, then make a new one, else loop through until an empty row is found
If i = 0 Then 'No worksheet with the year selected by DTPicker
With Sheets("Template")
.Copy After:=Sheets(Sheets.Count) 'Add new worksheet
ActiveSheet.Name = WsName & "_1"
End With
* Если я помещу «Тогда выход для» в одну строку, я получу ошибку компиляции «Иначе без If»
Else:
For counter = 1 To i Step 1
Worksheets(WsName & "_" & counter).Activate
If IsEmpty(Range("A1048576").value) = True Then Exit For
Next counter
Else 'No recognizing the original If statement
With Sheets("Template")
.Copy After:=Sheets(Sheets.Count) 'Add worksheet
ActiveSheet.Name = WsName & "_" & i
End With
End If
* Однако, когда я помещаю «Тогда» и «Выход для» в отдельных строках, я получаю ошибку компиляции «Далее без For»
Else:
For counter = 1 To i Step 1
Worksheets(WsName & "_" & counter).Activate
If IsEmpty(Range("A1048576").value) = True Then
Exit For
Next counter
Else
With Sheets("Template")
.Copy After:=Sheets(Sheets.Count) 'Add worksheet
ActiveSheet.Name = WsName & "_" & i
End With
End If
'Добавлено для моих модификаций, которые я хочукод для (1-го) проверки исходного листа и создания его, если его нет.(2) Если этот исходный лист существует, но он заполнен, я хочу убедиться, что нового листа еще нет.Если он есть, он становится активным листом.(3-е) если нет другого доступного рабочего листа, мне нужен сценарий для его создания.
У меня изначально были проблемы с созданием нового рабочего листа и только одна запись применялась к этому рабочему листу до создания другого рабочего листа.отсюда 3 шага.
Должен ли я отделить первое If, а затем иметь последние 2 в качестве своей собственной сущности, если первый лист заполнен?
If i = 0 Then 'No worksheet with the year selected by DTPicker
With Sheets("Template")
.Copy After:=Sheets(Sheets.Count) 'Add worksheet
i = 1
ActiveSheet.Name = WsName & "_" & i
End With
ElseIf
For counter = 1 To i Step 1
Worksheets(WsName & "_" & counter).Activate
If IsEmpty(Range("A1048576").value) = True Then
Exit For
End If
Next counter
Else
With Sheets("Template")
.Copy After:=Sheets(Sheets.Count) 'Add worksheet
ActiveSheet.Name = WsName & "_" & i
End With
End If