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

我有两个工作簿,“testing”和“Screen_Reference_Data_Sheet”。 我试图通过使用命名范围与“Screen_Reference_Data_Sheet”工作簿中的数据在“Test”中创build下拉列表。

下面是我正在使用的代码,并在“.Addtypes:…”行上引发错误运行时错误1004。

我只能使用一个工作簿中的数据就可以实现这个function,但是当我从另一个工作簿中提取数据时,出现此错误。

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 

任何想法,我在做什么错在这里?

您不得将对其他工作簿的引用用于数据validation条件。

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

在这里输入图像说明

我认为下一个最好的解决scheme是将范围的值转换为variables数组,并使用该数组来分配列表公式:

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