Excel VBA - 如果Else仍在执行Else

时间:2017-09-07 01:22:59

标签: vba for-loop if-statement

我的代码相当简单,但有点令人费解。我可能会犯一个小错误 - 请原谅我的新手。尽管有布尔值= 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

1 个答案:

答案 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

这里的逻辑是,如果在调用子例程之前名称已经存在,我们会在迭代时发现这一点,在警告框中显示警告消息,然后退出。否则,名称/日期将被添加到工作表中。