我的代码相当简单,但有点令人费解。我可能会犯一个小错误 - 请原谅我的新手。尽管有布尔值= True,Sheets.Add.Name行仍然会被执行,因此使用Sheet#命名约定创建一个新的工作表。
分享我的代码:
Private Sub create_analyst_btn_Click()
Dim strUser As String
Dim DateToday As String
Dim ws As Worksheet
Dim boolFound As Boolean
strUser = newanalyst_form.user_User.Value
For Each ws In Worksheets
If ws.Name Like strUser Then boolFound = True: Exit For
Next
If boolFound = True Then
MsgBox ("User already exists.")
Else
DateToday = Format(Date, "-yyyy-mm-dd")
Sheets.Add.Name = strUser & DateToday
Unload Me
End If
End Sub
答案 0 :(得分:2)
我没有看到第一个If
声明的重点,我会将您的代码重构为以下内容:
For Each ws In Worksheets
If ws.Name Like "*" & strUser & "*" Then
MsgBox ("User already exists.")
Exit For
Else
DateToday = Format(Date, "-yyyy-mm-dd")
Sheets.Add.Name = strUser & DateToday
Unload Me
End If
Next ws
这里的逻辑是,如果在调用子例程之前名称已经存在,我们会在迭代时发现这一点,在警告框中显示警告消息,然后退出。否则,名称/日期将被添加到工作表中。