我正在嘗試將數據驗證添加到基於一組單元格的另一個工作表的一組單元格中。問題在於其他工作表中單元格的範圍不是靜態的,並且可能會更改。數據驗證和字符串構造出錯
總的來說,我正在尋找在A10一組下拉框:A29細胞與它們的成分
當我使用= INDIRECT:只需使用Excel驗證嚮導它的作品(「成分A2 A320!)但我需要最終單元是動態的。
我有這個當前VBA代碼
Dim endrow As Integer
endrow = Sheets("Ingredients").Range("A" & Rows.Count).End(xlUp).Row
Range("A10:A29").Select
With Selection.Validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=INDIRECT(" & Chr(34) & "Ingredients!A2:A" & endrow & Chr(34) & ")"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
我得到這個代碼1004錯誤。
要使它便於任何人看着這個最終的結果,我的公式部分瞄準的是:
=INDIRECT("Ingredients!A2:A*endrow*)
你不需要VBA來做到這一點。改用指定的範圍。你也可以找到很多關於動態驗證的文章。如果我能找到時間,我會爲你發佈一個答案。 – L42
@ L42是正確的 - 只需搜索動態範圍(例如:http://support.microsoft.com/kb/830287)。作爲一個方面說明,小心使用'Integer':它在第32,767行之後失敗。並且在大多數情況下使用'Selection'對象可能不是一個好主意(包括這個)。請參閱http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select – Ioannis
我確實看過動態範圍命名,但源工作表有時會被完全刪除,並且從另一個工作簿中複製一個新工作表,以便全部範圍命名丟失。這就是爲什麼當工作表和數據發生變化時,我正在嘗試執行VBA數據驗證。 –