2

我有一个简单的函数,可以在工作表中对给定范围的每一行进行着色:

Public Function ShadeEveryOtherRow()
Sheets("mySheet").Select
ShadedRows = Range("myRange").Rows.Count
' determines the number of rows to shade in the range

' Code that loops through and shades rows here

End Function

我希望能够使用给定的工作表名称和范围作为输入来调用此函数。如果我编写如下所示的函数并尝试使用 test() 子程序执行,则会收到“编译错误:类型不匹配”错误。任何援助将不胜感激。谢谢。

Public Function ShadeEveryOtherRow(targetSheet As Worksheet, targetRange As Range)

Dim targetSheet As Worksheet
Dim targetRange As Range

Sheets(targetSheet).Select
shadeRows = Range(targetRange).Rows.Count

'Code that shades rows here

End Function


Sub test()
ShadeEveryOtherRow "mySheet", "myRange"

End Sub
4

2 回答 2

1

targetRange并且targetSheet应该是字符串类型,而不是作为对象传递给函数。

Public Function ShadeEveryOtherRow(targetSheet As string, targetRange As string)

Dim targetSheet As Worksheet
Dim targetRange As Range

Sheets(targetSheet).Select
shadeRows = Range(targetRange).Rows.Count

'Code that shades rows here

End Function


Sub test()
ShadeEveryOtherRow "mySheet", "myRange"

End Sub
于 2013-05-02T16:50:43.620 回答
1

不要Dim你的变量两次。在函数签名中声明它们就足够了。另外,不要使用.Select. 明确地做你想做的事。

Public Function ShadeEveryOtherRow(targetSheet As string, targetRange As string)

shadeRows = Sheets(targetSheet).Range(targetRange).Rows.Count

'Code that shades rows here

End Function

编辑:就像下面的 Sigil 指出的那样,您应该为变量使用字符串。另一种选择是显式传入范围。

Public Function ShadeEveryOtherRow(targetRange As Range)

    shadeRows = targetRange.Rows.Count

    'Code that shades rows here
End Function


Sub test()
    ShadeEveryOtherRow Sheets("mySheet").Range("myRange")
End Sub

记住!始终Option Explicit在所有代码的顶部使用。

于 2013-05-02T16:54:32.033 回答