从引用另一个工作簿的命名范围下拉验证

时间:2013-10-15 16:57:44

标签: excel vba excel-vba

我有两个工作簿,“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

关于我在这里做错了什么想法?

1 个答案:

答案 0 :(得分:0)

您不能将对其他工作簿的引用用于数据验证标准。

如果您尝试手动执行此操作,则会显示错误/警告:

enter image description here

我认为下一个最佳解决方案是将范围的值转换为变量数组,并使用该数组分配列表公式:

With ThisWorkbook.Sheets("Sheet1").Range("A1:A3").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
        Operator:=xlBetween,
        Formula1:=Join(Application.Transpose(rng1.Value), ",")
End With