Excel VBA – 将正确的parameter passing给程序

从昨天起我一直在这里,但似乎无法find我的路。

在下面的过程中,我创build了obj。 dropdownRange作为parameter passing给底层的过程。 但是,当我debug.print它们时,这两个参数在“立即窗口”中都输出为空。

我没有得到一个错误在线 – >与curCell.Validation,但是,我得到下一行的错误 – > .Addtypes…

错误:1004:应用程序定义或对象定义的错误

Dim mainTab As Object 'Tab 'main' Dim tranTypeSize As Integer 'Length of entries for transaction type Dim dropdownRange As Range 'Dynamic range for dropdown Set mainTab = Sheets("Main") tranTypeSize = Sheets("Misc").Cells(Rows.Count, 1).End(xlUp).Row Set dropdownRange = Sheets("Misc").Range("A1:A" & tranTypeSize) ' <- problem Call createDropdownList(mainTab.Range("G8"), dropdownRange) '<- arguments passed are wrong obj? ---------------------------------------------------------------- Sub createDropdownList(ByRef curCell As Range, _ ByVal targetList As Range) With curCell.Validation ' <- I think error, though it passes this line .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=targetList ' <- error 

*****更新:*****进一步@ ExcelDeveloper的评论,我想下面,我认为是接近,但仍然不工作(错误:应用程序或对象定义的错误)Sub createDropdownList(ByRef curCell As Range, ByVal targetList As Range)

 Dim targetAddress As String targetAddress = "Misc!" & targetList.Address Debug.Print targetAddress With curCell.Validation .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=targetAddress 

Formula1属性应该是您所指范围的地址,前面加上一个等号:

  Formula1 := "=" & targetList.Address 

我假设,公式1需要单个引用,这可能会导致一个范围或逗号分隔列表(根据MSDN)。 但它不能像你这样处理一个直接给定的范围。

在validation.add中给出命名范围到formula1