2013-05-02 33 views
2

我有一個簡單的函數,陰影表示給定範圍內的所有其他行的工作表:VBA:使用工作表名稱和/或範圍的名稱作爲輸入的功能

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 

回答

1

targetRangetargetSheet應該是字符串類型,而不是被傳遞給函數爲對象。

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 
+0

謝謝sigil。這解決了問題 – 2013-05-02 17:18:19

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 

編輯: 像印記指出下面你應該使用字符串的變量。另一種選擇是明確地通過範圍。

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

+0

感謝布拉德。你的建議解決了這個問題,作爲一名真正的VBA新秀,我也很感謝你的額外指導。 – 2013-05-02 17:20:27

+0

無情地撕掉「其他選項」完全脫離上下文,我好奇爲什麼不插入>表格表? – pnuts 2013-05-02 17:28:13

+0

@pnuts是的,桌子肯定會做得更快,更容易,你是對的。它也更加動態。但是誰知道OP的工作流程。 – Brad 2013-05-02 20:40:28