Excel 如何将工作簿名称传递给子例程?

Excel 如何将工作簿名称传递给子例程?,excel,vba,function,parameters,Excel,Vba,Function,Parameters,我在VBA工作的第一周,所以请温柔一点。 我也继承了这段代码,这是双重打击。 main子函数调用公共函数Readfile,将工作簿和对象变量作为参数传递。 我需要添加一个工作簿用作查找。我使用Application.GetOpenFilename通过浏览窗口提示用户选择此新工作簿,但是将工作簿变量作为参数添加到函数调用中似乎无法传递工作簿名称。MsgBox确认函数中的变量为nothing。 我这样做对吗?如果您发布代码,那就太好了。但无论如何,试试这个 Option Explicit

我在VBA工作的第一周,所以请温柔一点。 我也继承了这段代码,这是双重打击。 main子函数调用公共函数Readfile,将工作簿和对象变量作为参数传递。 我需要添加一个工作簿用作查找。我使用Application.GetOpenFilename通过浏览窗口提示用户选择此新工作簿,但是将工作簿变量作为参数添加到函数调用中似乎无法传递工作簿名称。MsgBox确认函数中的变量为nothing。
我这样做对吗?

如果您发布代码,那就太好了。但无论如何,试试这个

    Option Explicit
    Dim wbk As String
    Dim WB1 As Workbook

    Sub main()
    wbk = Application.GetOpenFilename("All Files (*.*), *.*")
    getname (wbk)
    End Sub

    Function getname(WkBk As String)
    Set WB1 = Workbooks.Open(WkBk)
    MsgBox WB1.Name
    End Function
此代码将打开所选工作簿和工作簿名称的消息框


希望这对你有帮助

您需要显示您的代码以获得有用的答案。对不起,我如何在此处嵌入代码?这在隔离环境中非常有效。我曾尝试在我的代码中使用相同的代码,虽然差别不大,但我得到了一个运行时错误“13”:类型不匹配,在指定日期后的行上高亮显示。这似乎不相关。注释掉这一行设置WB1=Workbooks.OpenfdfWB,代码的工作方式与以前一样。我很困惑,不知道这是怎么发生的。你能把你的代码中出现错误的部分贴出来吗?所以很容易理解。很抱歉,您的代码没有问题。这是我的末日。我发现vlookup工作簿一直存在,所以我不得不关闭它。这意味着每次执行vlookup时,我都必须打开和关闭它。我做错了吗?因为我有一行要打开工作簿,所以有必要关闭工作簿。Else还可以检查工作簿是否打开。如果没有打开工作簿,则继续代码。干杯