Vba 文件名在多个会话中显示在Dir()函数中
我在Excel VBA宏中有一些代码,它看起来像是会话之间的持久值。问题在于BtnUpdate_Click事件,即使NewDataFilePath中的文件路径无效,消息框也不会触发Vba 文件名在多个会话中显示在Dir()函数中,vba,excel,Vba,Excel,我在Excel VBA宏中有一些代码,它看起来像是会话之间的持久值。问题在于BtnUpdate_Click事件,即使NewDataFilePath中的文件路径无效,消息框也不会触发 Public NewDataFilePath As String Private Sub BtnFileBrowse_Click() Dim fdlg As FileDialog Set fdlg = Application.FileDialog(msoFileDialogOpen) fdl
Public NewDataFilePath As String
Private Sub BtnFileBrowse_Click()
Dim fdlg As FileDialog
Set fdlg = Application.FileDialog(msoFileDialogOpen)
fdlg.Title = "Select New Dataset"
fdlg.Filters.Clear
fdlg.Filters.Add "Excel Files Only", "*.xls; *.xlsx"
fdlg.Show
If fdlg.SelectedItems.Count <> 0 Then
TxtFilePath = fdlg.SelectedItems(1)
End If
NewDataFilePath = TxtFilePath.Text
End Sub
Private Sub BtnUpdate_Click()
Dim a As String
a = Dir(NewDataFilePath)
If Not Dir(NewDataFilePath) <> "" Then
MsgBox """ & NewDataFilePath & "" is not a valid file path"
End If
End Sub
Public NewDataFilePath作为字符串
专用子BtnFileBrowse_Click()
将fdlg设置为文件对话框
设置fdlg=Application.FileDialog(msoFileDialogOpen)
fdlg.Title=“选择新数据集”
fdlg.Filters.Clear
fdlg.Filters.Add“仅Excel文件”,“*.xls;*.xlsx”
秀
如果fdlg.SelectedItems.Count为0,则
TxtFilePath=fdlg.SelectedItems(1)
如果结束
NewDataFilePath=TxtFilePath.Text
端接头
私有子BtnUpdate_Click()
像线一样变暗
a=Dir(NewDataFilePath)
如果不是Dir(NewDataFilePath)”,则
MsgBox“&NewDataFilePath&”不是有效的文件路径
如果结束
端接头
我在事件处理程序中添加了字符串a以尝试调试代码,并向我显示了一些有趣的结果:
我在BtnUpdate\u Click中的if语句上有一个断点
然后我停止调试宏并重新运行它。如果调用BtnUpdate\单击而不选择其他文件,则Dir()函数似乎会保留最后一个文件名:
知道为什么会发生这种情况吗?试试这段代码
Public NewDataFilePath As String
Private Sub BtnFileBrowse_Click()
Dim fdlg As FileDialog
Set fdlg = Application.FileDialog(msoFileDialogOpen)
fdlg.Title = "Select New Dataset"
fdlg.Filters.Clear
fdlg.Filters.Add "Excel Files Only", "*.xls; *.xlsx"
fdlg.Show
If fdlg.SelectedItems.Count <> 0 Then
NewDataFilePath = fdlg.SelectedItems(1)
End If
End Sub
Private Sub BtnUpdate_Click()
Dim a As String
a = Dir(NewDataFilePath)
If DoesFileExist(NewDataFilePath) And NewDataFilePath <> "" Then
MsgBox NewDataFilePath & " is a valid file path"
Else
MsgBox NewDataFilePath & " NOT a valid file path"
End If
End Sub
Function DoesFileExist(filePath) As Boolean
DoesFileExist = Dir(filePath) <> ""
End Function
Public NewDataFilePath作为字符串
专用子BtnFileBrowse_Click()
将fdlg设置为文件对话框
设置fdlg=Application.FileDialog(msoFileDialogOpen)
fdlg.Title=“选择新数据集”
fdlg.Filters.Clear
fdlg.Filters.Add“仅Excel文件”,“*.xls;*.xlsx”
秀
如果fdlg.SelectedItems.Count为0,则
NewDataFilePath=fdlg.SelectedItems(1)
如果结束
端接头
私有子BtnUpdate_Click()
像线一样变暗
a=Dir(NewDataFilePath)
如果DoesFile存在(NewDataFilePath)和NewDataFilePath“”,则
MsgBox NewDataFilePath&“是有效的文件路径”
其他的
MsgBox NewDataFilePath&“不是有效的文件路径”
如果结束
端接头
函数DoesFileExist(filePath)为布尔值
DoesFileExist=Dir(文件路径)“”
端函数
当然,一旦停止宏,任何变量值都不会持久存在
而观察到的行为是由于以下原因造成的:
1) FileDialog
对象保留在其IntialFileName
属性中选择的最后一条路径
2) Dir(path)
函数使用一个空字符串作为“path”,将返回上次FileDialog
run存储的IntialFileName
路径中的第一个文件
因此,当您重新运行宏时:
是一个空字符串NewDataFilePath
,将返回a=Dir(NewDataFilePath)
路径中与筛选器匹配的第一个文件(如果有)IntialFileName
Private Sub BtnUpdate_Click()
If NewDataFilePath <> "" Then 'if 'NewDataFilePath' has been set
Dim a As String
a = Dir(NewDataFilePath)
If Not Dir(NewDataFilePath) <> "" Then MsgBox """ & NewDataFilePath & "" is not a valid file path"
Else 'otherwise
MsgBox "No file path specified!", vbCritical ' inform the user to do so
End If
End Sub
Private Sub BtnUpdate_Click()
如果设置了“NewDataFilePath”,则为“NewDataFilePath”
像线一样变暗
a=Dir(NewDataFilePath)
如果不是Dir(NewDataFilePath)”,则MsgBox“&NewDataFilePath&”不是有效的文件路径
否则
MsgBox“未指定文件路径!”,vbCritical“通知用户执行此操作”
如果结束
端接头
是否使用全局变量?是否使用常量?@K.Dᴀᴠɪ我在宏中只有上面的代码,我使用的是“Public NewDataFilePath As String”,但根据屏幕截图,当我重新运行宏时,其中的值不会持久。我认为您缺少路径(来自您发布的调试屏幕截图)。一个文件名是不够的,你不能在没有路径的文件名上调用Dir函数。。。如果您的意思是单击VBA工具栏上的“停止”按钮,则将清除公共变量。