I am trying to get Data Validation drop down into cell “B22” in worksheet “Data” when the workbook is opened. I get this error
Run-time error '1004' Application-defined object error
And the application breasks at this code:
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:=value_list
Here is the WorkbookOpen() Sub:
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
I did some testing and found that (in Excel 2003 at least) if
value_list is greater than 255 characters in length you will get this error.
A possible workaround might be to load the list values into a named range and assign
Formula1:="=YourRangeName", but I have not tested this.