我有两个工作簿,“Test”和“Screen_Reference_Data_Sheet”。我正在尝试使用“Screen_Reference_Data_Sheet”工作簿中的数据使用命名范围在“测试”中创建下拉列表。
下面是我正在使用的代码,它在“.Add Type:...”行上抛出错误运行时错误1004。
当只使用来自一个工作簿的数据时,我能够完成此操作,但是当我从另一个工作簿中提取数据时,我收到此错误。
Sub GetScreenNames()
Path = Application.ActiveWorkbook.Path
RefFilePath = Path & "\Screen_Reference_Data_Sheet.xls"
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(RefFilePath)
Dim rng1 As Range
Set rng1 = objWorkbook.Sheets("Keywords_Action_Screen").Range("B2:B4")
ThisWorkbook.Names.Add Name:="screenslistdata", RefersTo:=rng1
With ThisWorkbook.Sheets("Sheet1").Range("A1:A3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=screenslistdata"
End With
objExcel.ActiveWorkbook.Close
objExcel.Application.Quit
End Sub
关于我在这里做错了什么想法?
答案 0 :(得分:0)
您不能将对其他工作簿的引用用于数据验证标准。
如果您尝试手动执行此操作,则会显示错误/警告:
我认为下一个最佳解决方案是将范围的值转换为变量数组,并使用该数组分配列表公式:
With ThisWorkbook.Sheets("Sheet1").Range("A1:A3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween,
Formula1:=Join(Application.Transpose(rng1.Value), ",")
End With