将工作表作为参数传递,然后将该参数用作变量

时间:2015-07-29 16:57:09

标签: excel excel-vba vba

为什么我收到aSheet_Recon (MAIN)所需的对象错误标题为MAIN。我没有在其他任何地方声明somesheet

Sub aSheet_Recon(somesheet As Worksheet)

...
End Sub


Sub tester()

aSheet_Recon (MAIN)


End Sub

从答案和新挑战中更新

如何通过剩余的过程将工作表参数用作变量。当变量cA尝试引用传递的工作表参数值MAIN时,我收到类型不匹配错误。

Sub aSheet_Recon(sheetname As Worksheet)

        cName = "Fund ID"
        cA = Sheets(sheetname).Rows.Find(What:=UCase(cName), LookAt:=xlWhole, SearchDirection:=xlNext).Column

End Sub

3 个答案:

答案 0 :(得分:3)

表格不是全局对象(如何处理表格" Dim"或" 500 x Beef Supreme"?);您需要从Sheets集合中获取Sheet:

aSheet_Recon Sheets("MAIN")

答案 1 :(得分:3)

你必须这样做:

Sub tester()
    dim ws as worksheet 'Creating a worksheet variable to pass
    set ws = Sheets("MAIN") 'Assigning the sheet you want to pass to this variable
    aSheet_Recon(ws) 'Sending the newly created WorkSheet variable containing your worksheet
End sub

aSheet_Recon需要一个WorkSheet参数,除非你正在发送它(不是工作表的名称,代号,索引等,而是工作表本身),否则将无法工作。

编辑:

在回答您自己的编辑时,以下是如何使用您收到的工作表作为参数:

Sub aSheet_Recon(sheetname As Worksheet)

        cName = "Fund ID"
        cA = sheetname.Rows.Find(What:=UCase(cName), LookAt:=xlWhole, SearchDirection:=xlNext).Column

End Sub

你也可以这样写:

sheetname.Range("A1") = "Hello!"

事实上,'sheetname'本身就被视为工作表,而不是工作表的名称。对于工作表的名称,您可以编写sheetname.Name:

msgbox sheetname.Name

将返回“MAIN”

因此,我建议将“sheetname”更改为“MySheet”或更少混淆。

答案 2 :(得分:2)

对我有用的是使用 ActiveSheet 方法。这样的事情...

Sub tester()
      Worksheets("MAIN").Activate
      aSheet_Recon
End Sub

Sub aSheet_Recon()
      'MsgBox(ActiveSheet.Name)
      cName = "Fund ID"
      cA = ActiveSheet.Rows.Find(What:=UCase(cName)).Column
End Sub