传递工作表作为参数,然后使用该参数作为variables

为什么我收到aSheet_Recon (MAIN)的对象所需的错误aSheet_Recon (MAIN)有一张名为MAIN的表格。 我没有在其他地方声明somesheet

 Sub aSheet_Recon(somesheet As Worksheet) ... End Sub Sub tester() aSheet_Recon (MAIN) End Sub 

从答案更新和新的挑战

然后,如何通过剩下的过程将工作表参数用作variables。 当variablescA尝试引用作为传递的工作表参数的MAIN值时,会收到types不匹配错误。

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

你必须这样做:

 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”本身就被认为是一个Worksheet,而不是一个表的名字。 对于工作表的名称,您可以编写sheetname.Name:

 msgbox sheetname.Name 

将返回“主”

因此,我build议将“sheetname”更改为“MySheet”或更less的混淆。

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

 aSheet_Recon Sheets("MAIN")