2016-04-18 9 views
0

Ich versuche, ein Listenfeld (ActiveX-Steuerelement) zu füllen. Dieses Listenfeld befindet sich auf einem Blatt mit der Bezeichnung "Dashboard" meiner Arbeitsmappe und kein Benutzerformular. Ich möchte es mit einem Bereich von einem Blatt mit der Bezeichnung "Data" bevölkern.VBA: Bestücken ListBox ActiveX-Steuerelement, auf Arbeitsblatt und nicht Benutzerformular

Mein Problem ist, dass, wenn ich es auf der Arbeitsmappe geöffnet Ereignisprozedur zu füllen, ich eine Fehlermeldung erhalten, wenn die Arbeitsmappe öffnet, dass es „nicht im Unterbrechungsmodus ausführen kann.“ Es sind jedoch keine Breakpoints aktiv.

Wenn ich es auf der „Armaturenbrett“ Arbeitsblatt aktiv Ereignisprozedur zu füllen, wird es nicht füllen, wenn die Arbeitsmappe geöffnet ist. Es wird nur ausgefüllt, wenn ich auf ein anderes Arbeitsblatt klicke und dann zurück zum Dashboard-Arbeitsblatt gehe, dann wird es ausgefüllt.

Gibt es einen besseren Weg, um das Listenfeld zu füllen, so dass es immer bevölkert ist und bereit zu gehen? Ich habe viele vLookup-Funktionen, die dem Listenfeld zugeordnet sind, und wenn das Listenfeld nicht ausgefüllt ist, wird der Rest meines Codes nicht funktionieren.

Ich werde meine Codes schreiben, die ich bisher haben. Die erste ist, wenn ich versuche, die Listbox durch die workbook_open even-Prozedur zu füllen. Die zweite Möglichkeit besteht in der Aktivierung des Arbeitsblattes "Dashboard".

Private Sub Workbook_Open() 
Dim strName As String 
Dim blDone As Boolean 
Dim cPlanets As MSForms.ListBox 
Dim vArray As Variant 
Dim shtData As Worksheet 
Dim wkbSolarSystem As Workbook 
Set wkbSolarSystem = Application.Workbooks("workbookname.xlsm") 
Set shtData = wkbSolarSystem.Worksheets("Data") 
Set cPlanets = wkbSolarSystem.Worksheets("Dashboard").lstPlanets 

vArray = shtData.Range("Planets").value 
cPlanets.List = vArray 
cPlanets.ListIndex = 3 


'input box message for user when workbook opens up 
strName = InputBox("Hello! Please enter your name", "Welcome!") 

'check if there is a name entered via loop and if statement 
Do 
    If Len(strName) = 0 Then 
     'if no name entered, ask user again 
     MsgBox ("Please enter a valid name to continue"), vbCritical, "Valid Name Required" 
     'ask user to type in name again 
     strName = InputBox("Hello! Please enter your name", "Welcome!") 
    Else 
     'display message with information for user 
     MsgBox ("Hello, " & strName) 
     blDone = True 
    End If 
'finish loop statement 
Loop Until blDone = True 

Dieser nächste Code ist diejenige, die ich auf Sheet3 Code-Arbeitsblatt Verfahren

Private Sub Worksheet_Activate() 
Dim shtData As Worksheet 
Dim wkbSolarSystem As Workbook 
Set wkbSolarSystem = Application.Workbooks("workbookname.xlsm") 
Set shtData = wkbSolarSystem.Worksheets("Data") 

lstPlanets.List = shtData.Range("Planets").value 
lstPlanets.ListIndex = 3 


End Sub 
+0

haben Sie eine öffentliche Funktion auf dem Armaturenbrett Blatt zu machen versucht, die die Liste füllt, und rufen Sie diese Funktion auf Workbook_Open()? –

+0

Ich habe das auch versucht, aber es wird immer noch nicht gefüllt, wenn die Arbeitsmappe geöffnet wird. Öffentliche Funktion addListsWorksheetActivate() – Rosario

Antwort

0

Ich habe diesen Code auf einem anderen Computer versucht, und es funktioniert. Es scheint, dass die Computerkonfiguration das Problem verursacht hat. Der Code funktioniert auf mehreren Computern einwandfrei.

0

erklären Sie cPlanets als MSForms.ListBox aktivieren, aber in Ihrer Frage sagen, Sie mit einer ActiveX-List-Box arbeiten auf einem Blatt. Also sollten Sie cPlanets als ein Objekt deklarieren, wie zum Beispiel:

+0

Vielen Dank, ich habe es jetzt zu Ihrem Vorschlag geändert. Es wird jedoch immer noch nicht gefüllt, wenn ich das in der workbook_open-Prozedur eintippe, weil es nicht denkt, dass es sich im Breakmode befindet, wenn es geöffnet wird, aber es gibt keine Codezeilen im Breakmode. – Rosario

Verwandte Themen