【问题标题】:Excel VBA dynamic data validaiton gives "Application-defined object" errorExcel VBA 动态数据验证给出“应用程序定义的对象”错误
【发布时间】:2014-07-29 21:49:09
【问题描述】:

我试图在打开工作簿时将数据验证下拉到工作表“数据”中的单元格“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

【问题讨论】:

  • value_list 传递给.Add 方法时的值是多少?
  • 它是一个逗号分隔的字符串列表,包含 540 个项目:“Allstate,State Farm,GEICO,....”
  • 您可能应该 DIM 您的 value_list 变量,但这不会导致错误,我不认为。这段代码似乎在 Excel 2010 中为我工作。

标签: excel vba


【解决方案1】:

我做了一些测试,发现(至少在 Excel 2003 中)如果value_list 的长度大于 255 个字符,您将收到此错误。

可能的解决方法是将列表值加载到命名范围并分配Formula1:="=YourRangeName",但我尚未对此进行测试。

【讨论】:

  • 使用数组代替字符串也可能是一种选择,但我没有测试过。
  • 首先将值加载到一个范围内,完成了这项工作。谢谢 blackworx。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
相关资源
最近更新 更多