1

我有两个工作簿,“Test”和“Screen_Reference_Data_Sheet”。我正在尝试通过使用带有来自“Screen_Reference_Data_Sheet”工作簿的数据的命名范围在“测试”中创建一个下拉列表。

下面是我正在使用的代码,它在“.Add Type:...”行中抛出错误 Run Time Error 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

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

4

1 回答 1

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
于 2013-10-15T17:27:59.113 回答