将工作表传递给过程

时间:2014-06-02 08:59:28

标签: excel vba excel-vba stored-procedures

我试图将三个工作表传递给过程调用

Call pivot_table(Sheets("Sheet2"), Sheets("Sheet3"), Sheets("Sheet4"))

但我收到错误SUBSCRIPT OUT OF RANGE

如果我尝试

Dim ws, ws1, ws2 As Worksheet
Set ws = Sheets("Sheet2")
Set ws1 = Sheets("Sheet3")
Set ws2 = Sheets("Sheet4")
Call pivot_table(ws, ws1, ws2)

我收到错误为ByRef arguement type mismatch

我的程序是

Sub pivot_table(ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet)

无法找到合适的解决方案。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

工作簿中是否有名为“Sheet2”,“Sheet3”和“Sheet4”的工作表?如果不是,这就是您的下标超出范围错误的原因。

ByRef参数类型不匹配的原因是你的ws,ws1和ws2声明没有将所有三个声明为工作表。

VBA不支持在一行上使用这种多变量赋值。如果要在一行上声明,仍然必须明确声明每个变量的类型,即

Dim ws As Worksheet, ws1 As Worksheet, ws2 As Worksheet

声明没有类型会创建一个Variant变量,即ws,ws1:Variant,ws2:Worksheet。