none
Combobox mit definierter Tabelle füllen RRS feed

  • Frage

  • Sehr geehrte Damen und Herren,
    ich möchte eine Combobox mit einer Tabelle füllen.
    dazu habe ich mir die Befehle des Makrorecorders (Makro1)
    zu angepasst, siehe Makro "FormBsp".
    Wer kann helfen?

    ' Ergebnis mit Makrorecorder
    Sub Makro1()
      Sheets("Stammdaten").Range("Test[[#All],[Test]]").Select
      Selection.Copy
      Sheets("Tabelle4").Select
      Range("D1").Select
      ActiveSheet.Paste
    End Sub
    
    ' Abgeleitetes Ergebnis für VBA
    Private Sub FormBsp_Initialize()
    
    Set ShtStammdaten = Sheets("Stammdaten")
    
    Load FormBsp   'Dateneingabe mit Eingabemaske
    FormBsp.Combobox_Bsp = Sheets("Stammdaten").Range("Test[[#All],[Test]]") '.Select,; .Activate
    End Sub
    
    
    Jedoch wird wird beim Aufruf des Makros ein Fehler erzeugt:
    A) wenn .Select-, oder .Aktivate-Eigenschaft angehängt wird:
       Laufzeitfehler '1004'
       Die Select-Eigenschaft des Range-Objektes kann nicht zugeordnet werden
    B) wenn keine Eigenschaft steht:
       Laufzeitfehler '13'
       Typen nicht verträglich

    Danke im Vorraus

    ASD.GP

    Donnerstag, 7. Juli 2011 18:18

Alle Antworten

  • Hallo

    Man benötigt eigentlich gar kein Makro.

    Im VBA-Editor kann die Eigenschaft "RowSource" der ComboBox folgendermassen gesetzt werden: =Stammdaten!A1:E4

    Die Eigenschaft "ColumnCount" wird dann beispielsweise auf 5 gesetzt.

    Das wäre dann der Bereich "A1:E4"der Tabelle "Stammdaten"

    Wenn ich der Quelle einen Bereichsnamen (bsp: "Testname") gegeben habe, dann wäre die Eigenschaft RowSource =Stammdaten!TestName

    Ich hoffe, dass ich helfen konnte.

    Gruss

     

    Dienstag, 23. August 2011 16:08
  • Guten Tag mawisoft,

    danke für Deine Mühe.

    ich habe es nach Deiner info bearbeitet und es ging. mal sehen ob ich das auch mit der VBA-Version hinbekomme.

    Trotzdem würde ich gern verstehen warum die Makroaufzeichnung so nicht funktioniert.

    Gruß

    ASD.GP 

    Mittwoch, 24. August 2011 14:06
  • Sehr geehrte Herren Moderatoren,
    meine obige Frage möchte ich noch einmal erneuern.
    Da ich bis jetzt noch keine direkte Antwort zur Frage erhalten habe, denke ich dass hier ein grundlegendes Problem, bezüglich der Aufzeichnung mit dem Makrorekorder und dessen Nutzung unter VBA, besteht.
    Leider kann man mit den Entwicklern der Software Excel 2010 und damit verbundene VBA-Anwendungen keinen Kontakt aufnehmen. Deshalb schlage ich vor, dass Sie als Kontaktpersonen dem zuständigen Team dieses Problem übermitteln und um eine Lösung bitten. Falls es noch Fragen zum Beispiel gibt, stehe ich gern zur Verfügung.
    Mit freundlichen Gruß
    ASD.GP
    Anlage: Problem-Code
     
    ' Ergebnis mit Makrorecorder
    Sub Makro1()
     Sheets("Stammdaten").Range("Test[[#All],[Test]]").Select
     Selection.Copy
     Sheets("Tabelle4").Select
     Range("D1").Select
     ActiveSheet.Paste
    End Sub
    ' Abgeleitetes Ergebnis für VBA
    Private Sub FormBsp_Initialize()
    
    Set ShtStammdaten = Sheets("Stammdaten")
    
    Load FormBsp  'Dateneingabe mit Eingabemaske
    FormBsp.Combobox_Bsp = Sheets("Stammdaten").Range("Test[[#All],[Test]]")  '.Select; .Activate
    End Sub
    
    
    Jedoch wird wird beim Aufruf des Makros ein Fehler erzeugt:
    A) wenn .Select-, oder .Aktivate-Eigenschaft angehängt wird:
    Laufzeitfehler '1004'
    Die Select-Eigenschaft des Range-Objektes kann nicht zugeordnet werden
    B) wenn keine Eigenschaft steht:
    Laufzeitfehler '13'
    Typen nicht verträglich

    Freitag, 26. August 2011 09:06
  • Hallo ASD.GP...

    der Makrorekorder ist meines Erachtens eher als rudimentäres Hilfsmittel zu sehen, der Hinweise liefert, wo welche Eigenschaften einsetzbar und verfügbar sind. Beispiel: man weiss nicht, wie man den Farbhintergrund einer Zelle ändert; aufzeichnen und im Code findet man dann die passende Eigenschaft.

    Der Makrorekorder erzeugt in vielen Fällen keinen optimierten Code; heißt also, es ist in der Regel der Code nachzuarbeiten. Auch hier ein Beispiel: nach einer Aufzeichnung finden sich sehr oft "Select" Anweisungen im Code, nicht optimal und auch rechen- und zeitintensiv. Ausserdem stößt der Makrorekorder schnell an seine Grenzen.

    Ein paar Tipps zum geposteten Code. Ausgehend davon, dass kein weiterer Code vorhanden ist, Variablen sollten immer deklariert werden. Die Option 'Option Explicit' sollte immer am Anfang eines Moduls gesetzt werden, erleichtert die Fehlersuche. Besser ist es zudem, Eingeschaften von Objekten explizit anzusprechen. Und wenn die Objekthierarchie ebenfalls vollständig angesprochen wird, minimierst Du wiederum weitere Fehlerquellen.

    Du hast die Möglichkeit, eine Combobox über mehrere Arten zu befüllen. Einmal über das Eingeschaftsfenster, indem Du z.B. die Eingeschaft RowSource direkt dort eingibst. Eine andere Möglichkeit ist das per Code zu tun. Hier kannst Du wiederum die Eingeschaft RowSource setzen oder dies per Schleife erledigen. Beispiel, dieser Code gehört in das Codemodul der Userform:

     

     Option Explicit
     
     Private Sub UserForm_Initialize()
      
      Dim lngIndex As Long
      
      With ThisWorkbook.Worksheets("Stammdaten")
       
    '   Möglichkeit 1
       
       Combobox_Bsp.RowSource = "Stammdaten!A1:A10"
       
    '   Möglichkeit 2
          
       For lngIndex = 1 To 10
        
        Combobox_Bsp_Zwei.AddItem .Cells(lngIndex, 1).Value
        
       Next lngIndex
       
      End With
      
     End Sub
    


    Das Ereignis UserForm_Initialize wird immer beim Aufruf der UserForm aufgerufen, und zwar bevor diese sichtbar wird. Aufrufen kannst Du diese Userform über den Code in einem Modul...

    Option Explicit
    
    Public Sub LoadMyUserform()
    
     FormBsp.Show
     
    End Sub
    


    Schließlich, wenn Du eine Eigenschaft per Punktsyntax ansprichst, z.B. .Select, dann bezieht sich der . auf das übergeordnete Objekt. Wenn aber kein solches Objekt vorhanden ist, entsteht ein Laufzeitfehler. Ausserdem empfiehlt sich, Anweisungen pro Zeile zu schreiben.

    Hoffe mal, das hier oben hilft Dir weiter.

    Gruß

     


    MVP Office System - www.excel-ticker.de
    Samstag, 27. August 2011 07:57