Excel VBAdynamic数据validation提供了“应用程序定义的对象”错误

我正试图在工作表打开时将数据有效性下拉到工作表“数据”中的单元格“B22”中。 我得到这个错误

Run-time error '1004' Application-defined object error 

而这个应用程序在这个代码上是不利的:

 .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=value_list 

这里是WorkbookOpen()子:

 Private Sub Workbook_Open() Dim oCon As ADODB.Connection Dim oRS As ADODB.Recordset Dim rng As Range Set oCon = New ADODB.Connection oCon.ConnectionString = "Provider=SQLOLEDB;Data Source=MARS;Initial Catalog=automation;Trusted_connection=yes;" oCon.Open Set oRS = New ADODB.Recordset oRS.ActiveConnection = oCon oRS.Source = "select insurer.name from person as insurer where insurer.person_class_id = 2 order by insurer.name asc" oRS.CursorType = adOpenStatic oRS.Open value_list = "" Do While Not oRS.EOF value_list = value_list & oRS(0) & "," r = r + 1 oRS.MoveNext Loop value_list = Mid(value_list, 1, Len(value_list) - 1) With Sheets("Data").Range("B22").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=value_list .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With oRS.Close oCon.Close End Sub 

我做了一些testing,发现(至less在Excel 2003中)如果value_list长度大于255个字符,你会得到这个错误。

一个可能的解决方法可能是将列表值加载到一个命名的范围并分配Formula1:="=YourRangeName" ,但我没有testing过这个。