Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA对话框_Excel_Vba - Fatal编程技术网

Excel VBA对话框

Excel VBA对话框,excel,vba,Excel,Vba,我有以下代码: Public Function get_workbook() As String Dim fd As Office.FileDialog Set fd = Application.FileDialog(msoFileDialogFilePicker) fd.AllowMultiSelect = False fd.Title = "Please select the file." fd.Show get_workbook = fd.S

我有以下代码:

Public Function get_workbook() As String
    Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    fd.AllowMultiSelect = False
    fd.Title = "Please select the file."
    fd.Show
    get_workbook = fd.SelectedItems(1)
End Function
这很有效。但是,如果用户在打开对话框后关闭该对话框,则会出现: 引发“无效过程调用或参数”错误

我将如何着手处理此错误? 例如,函数只是退出,而不是抛出错误

编辑:

我使用这段代码让用户打开一个同样有效的文件

Dim wb as Workbook
Set wb = Workbooks.Open(get_workbook(), ReadOnly:=True)

添加一个错误处理程序。我使用了一个select case,以便在出现其他错误时可以添加它们

Public Function get_workbook() As String
    On Error GoTo errcatch 
    Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    fd.AllowMultiSelect = False
    fd.Title = "Please select the file."
    fd.Show
    get_workbook = fd.SelectedItems(1)
    on error goto 0
    Exit Function 'Stop code from going into error handler without an error
errcatch:
    Select Case Err.Number 'Do something based on error number
        Case 5  
            on error goto 0
            Exit Function
    End Select
End Function

添加一个错误处理程序。我使用了一个select case,以便在出现其他错误时可以添加它们

Public Function get_workbook() As String
    On Error GoTo errcatch 
    Dim fd As Office.FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    fd.AllowMultiSelect = False
    fd.Title = "Please select the file."
    fd.Show
    get_workbook = fd.SelectedItems(1)
    on error goto 0
    Exit Function 'Stop code from going into error handler without an error
errcatch:
    Select Case Err.Number 'Do something based on error number
        Case 5  
            on error goto 0
            Exit Function
    End Select
End Function

非常感谢。当我取消对话框时,我得到一个错误:Set wb=Workbooks.Open(get_workbook(),ReadOnly:=True)错误是:“运行时错误'1004':抱歉,我们找不到。它是否可能被移动了..等等”,这是因为您没有返回任何内容,函数刚刚结束。您将需要在调用子函数/函数中使用另一个错误处理程序,或者使用
if
语句检查空字符串。是的,我想是这样,现在正在解决它!干杯!可能值得在退出前添加“错误时继续下一步”
function@zac这不会有任何作用他得到的错误是在一个不同的子,在错误恢复下一个应该只在少数边缘的情况下使用它只是隐藏错误,它不会处理它。谢谢!当我取消对话框时,我得到一个错误:Set wb=Workbooks.Open(get_workbook(),ReadOnly:=True)错误是:“运行时错误'1004':抱歉,我们找不到。它是否可能被移动了..等等”,这是因为您没有返回任何内容,函数刚刚结束。您将需要在调用子函数/函数中使用另一个错误处理程序,或者使用
if
语句检查空字符串。是的,我想是这样,现在正在解决它!干杯!可能值得在退出前添加“错误时继续下一步”
function@zac这不会做任何事情,他得到的错误是在一个不同的子,在错误恢复下一步应该只在少数边缘的情况下使用它只是隐藏错误,它不会处理它。