Vba Can';t固定无限循环

Vba Can';t固定无限循环,vba,excel,infinite-loop,Vba,Excel,Infinite Loop,正如标题所述,我的userform中的msgbox卡在一个无限循环中 我决定在这个表单中包含所有的命令按钮代码,以防它有助于解决这个问题。另外还有一个文本框。我尝试过除For循环之外的各种类型的循环,因为我看到的每个For循环示例都有一个计数器或某种形式的增量公式 我希望在循环中发生的是,如果用户单击标记为open和txtbxSelectFile.value=”“的命令按钮,然后显示消息框,并在每次cmdbtnOpen_单击为true和txtbxSelectFile.value=”“时继续执行此

正如标题所述,我的userform中的msgbox卡在一个无限循环中

我决定在这个表单中包含所有的命令按钮代码,以防它有助于解决这个问题。另外还有一个文本框。我尝试过除For循环之外的各种类型的循环,因为我看到的每个For循环示例都有一个计数器或某种形式的增量公式

我希望在循环中发生的是,如果用户单击标记为open和
txtbxSelectFile.value=”“
的命令按钮,然后显示消息框,并在每次
cmdbtnOpen_单击
true
txtbxSelectFile.value=”“
时继续执行此操作

唯一接近工作的是
如果。。。然后
条件语句,但它不会循环。它将只运行一次,然后继续运行到Else状态。或者更好的解释是,如果用户一直单击“打开”按钮,文本框中没有任何内容,然后继续显示消息框

文本框中的值应该来自文件浏览按钮。当用户单击“浏览”按钮时,将打开一个文件对话框,以便用户可以找到要打开的文件

Private Sub cmdBrowse_Click()
    'myFile = Application.GetOpenFilename(, , "Select a File.")

    Dim fname As String
    Dim fpath As String

    fpath = ThisWorkbook.Path

    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = fpath
        .ButtonName = "Get File Name"
        .Title = "File Selection"
        .Filters.Clear
        .Filters.Add "Excel Files", "*.xl; *.xlsx; *.xlsm; *.xlb; *.xlam; *.xltx; *.xltm; *.xls; *.xla; *.xlt; *.xlm; *.xlw"
        .AllowMultiSelect = False

        If .Show = True Then
            fname = .SelectedItems(1)
            Me.txtbxSelectFile.Text = fname
        Else
            MsgBox "Operation Canceled"
            Unload Me
        End If
    End With
End Sub

Private Sub cmdbtnOpen_Click()
    Do While txtbxSelectFile = ""
        MsgBox "Please Select a file", vbOKOnly, "No File Selected"
    Loop

    Workbooks.Open Me.txtbxSelectFile
    Unload Me
    selectRangefrm.Show
End Sub

我真的希望我的解释有道理。谢谢。

换一种稍微不同的方法怎么样?为什么不使打开按钮的
.Enabled
属性取决于
txtbxSelectFile
的值

这样,只有在
txtbxSelectFile
中有值时才能按下打开按钮

在设计模式下,更改打开按钮的属性:将
.Enabled
设置为
False
,然后使用:

Private Sub cmdBrowse_Click()
    'myFile = Application.GetOpenFilename(, , "Select a File.")

    Dim fname As String
    Dim fpath As String

    fpath = ThisWorkbook.Path

    With Application.FileDialog(msoFileDialogOpen)
        .InitialFileName = fpath
        .ButtonName = "Get File Name"
        .Title = "File Selection"
        .Filters.Clear
        .Filters.Add "Excel Files", "*.xl; *.xlsx; *.xlsm; *.xlb; *.xlam; *.xltx; *.xltm; *.xls; *.xla; *.xlt; *.xlm; *.xlw"
        .AllowMultiSelect = False

        If .Show = True Then
            fname = .SelectedItems(1)
            Me.txtbxSelectFile.Text = fname
        Else
            MsgBox "Operation Canceled"
        End If
        cmdbtnOpen.Enabled = Me.txtbxSelectFile.Text <> ""
    End With
End Sub

Private Sub cmdbtnOpen_Click()
    Workbooks.Open Me.txtbxSelectFile
    Unload Me
    selectRangefrm.Show
End Sub
Private Sub cmdBrowse\u Click()
'myFile=Application.GetOpenFilename(,“选择一个文件”)
作为字符串的Dim fname
作为字符串的Dim fpath
fpath=ThisWorkbook.Path
使用Application.FileDialog(msoFileDialogOpen)
.InitialFileName=fpath
.ButtonName=“获取文件名”
.Title=“文件选择”
.过滤器
过滤器.Sudio.Excel文件,*.xl;*.xLSM;*.xLb;*.xLAM.*.xLTX;*.xLTM;*.xLs;*.XLA;*.xLt;*.xLm;*.xLw”。
.AllowMultiSelect=False
如果.Show=True,则
fname=.SelectedItems(1)
Me.txtbxSelectFile.Text=fname
其他的
MsgBox“操作已取消”
如果结束
cmdbtnOpen.Enabled=Me.txtbxSelectFile.Text“”
以
端接头
专用子cmdbtnOpen_Click()
工作簿。打开Me.txtbxselect文件
卸下我
选择Rangefrm.Show
端接头

尝试在
MsgBox
循环
行之间添加
cmdBrowse\u单击
。•现在,您的循环只会重复显示一个消息框,但不会给用户选择文件的机会。您可能还希望删除该循环,并在未选择任何文件时通过消息退出子循环,以允许用户在需要时取消该操作。您的权利。那么,我如何向循环中添加cmdu单击呢。我是否只需在消息框下添加“cmdBrowse\u Click”?感谢您的快速响应。是的,只需在
cmdbtnOpen\u单击子菜单中的
MsgBox
行后添加
cmdBrowse\u单击