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