将工作表名称传递给过程时键入不匹配

时间:2016-05-18 15:03:58

标签: excel vba excel-vba stored-procedures

我很抱歉,我确信我忽略了一些简单的事情,但是时间太长了,我无法弄清楚为什么我无法将标题为MAIN的工作表作为参数传递给我的{{{ 1}}以下程序。 MAIN是工作簿中的工作表。

我的目标是建立一个名为Import的通用过程,我可以在同一个工作簿中传递任何工作表,并通过简单地将工作表名称作为参数参数传递,轻松地将下面的列单元格关系存储到数组中。 / p>

Import

3 个答案:

答案 0 :(得分:2)

@ Rory的问题的答案很重要。

在您的代码中,您有:

Sub Import(sheetname As Worksheet)

For Each oSheet in oWorkbook
    Import oSheet 
Next

另一方面,如果你想这样调用导入:

strSheet = InputBox("Type the name of the sheet to import")
Import strSheet

然后你的代码必须是这样的:

Sub Import(sheetname As String)
Dim oSheet as Worksheet
Set oSheet = Sheets(sheetname)

答案 1 :(得分:1)

您必须先检查调用例程

Sub ROUTINE()
    Dim ws As Worksheet
    Set ws = Sheets("MAIN")
    Call import(ws)
End Sub

是必需的。以下肯定会失败:

Sub NotVeryGood()
    Dim ws As String
    ws = "MAIN"
    Call import(ws)
End Sub

(您的导入需要对象而不是对象的名称

答案 2 :(得分:1)

以下是如何传递工作表的简单示例

Sub Main()
    GetName ThisWorkbook.Worksheets(1)
End Sub

Function GetName(wb As Worksheet)
    MsgBox wb.Name
End Function