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过这个。