2014-12-24 176 views
1

我想通过adodb连接和记录集来填充我的组合框,并使用访问数据库中的数据。代码以前运行良好,但在一个正常的用户窗体中,我的问题是我无法正确引用combobox.additem属性。无法填充我的OLEObject组合框

当ActiveX对象直接在工作表“主窗口”上时,我如何引用它? 形状的代号是:CombBox_Instruments 控制代码的名称应该是:Forms.ComboBox.1

我有市场,我得到的错误,目前错误是:运行时错误1004:应用程序定义或定义的对象错误

这里是我的代码

Private Sub Workbook_Open() 

    Dim DataConnection As ADODB.Connection: Set DataConnection = New ADODB.Connection 
    Dim RecordSet As ADODB.RecordSet: Set RecordSet = New ADODB.RecordSet 

    Dim SQLString As String 
    Const ConnectionPath As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\name\Desktop\Database.accdb;Persist Security Info=False;" 

    DataConnection.ConnectionString = ConnectionPath 
    DataConnection.Open 

    SQLString = "SELECT Name FROM MSysObjects WHERE Type =1 AND Flags=0" 

    With RecordSet 
    .ActiveConnection = DataConnection 
    .Source = SQLString 
    .LockType = adLockReadOnly 
    .CursorType = adOpenForwardOnly 
    .Open 
    End With 

Do Until RecordSet.EOF = True 
    If RecordSet.Fields(0) <> "Instruments" Then 
     Debug.Print RecordSet.Fields(0) 
     Sheets("Mainwindow").OLEObjects("Forms.ComboBox.1").AddItem RecordSet.Fields(0) - ISSUE IS HERE! 
     RecordSet.MoveNext 
    Else 
     RecordSet.MoveNext 
    End If 
    Loop 

End Sub 

回答

1

假设组合框命名CombBox_Instruments是在纸张上“主窗口”你的代码应该是:

Sheets("Mainwindow").CombBox_Instruments.AddItem RecordSet.Fields(0) 
+0

哇谢谢你!奇怪的是,我试过,但与.value,它无法找到属性。尽管如此,当我在另一个事件处理程序的if语句中使用它时,.value属性显然适用于combbox_instruments。你知道这是为什么吗? – uncool

+0

您可以举一个例子说明你在哪里试图使用'.Value'?如果此语法适合您,请将答案标记为已接受。 – Chrismas007

+0

例如这里:如果CombBox_Instruments.Value <> “” 而DTPicker_FROM.Value uncool