为什么我收到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
答案 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