Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  dynamische Combobox: letzten Eintrag auslesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  dynamische Combobox: letzten Eintrag auslesen (4856 mal gelesen)
Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 20. Okt. 2014 09:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ich bin ein VBA-Änfänger und habe versucht mir über "Code-Schnipsel" aus diesem Forum ein Makro zu erstellen. Dies hat auch unerwartet gut funktioniert. Leider hänge ich jetzt an einem Problem fest, wo ich auf eure Hilfe hoffe.
Basis:
Ich habe eine Userform1 mit 2 Buttons (Typauswahl über Anwender) über die dann eine zweite Userform aufgerufen wird.
Userform2:Beim Drücken auf den Button von Userform1 wird eine Exceltabelle im Hintergrund geöffnet und dynamische Multipages in die Userform2 eingefügt in Äbhängigkeit der Anzahl/ Namen der Tabellenblätter der Exceldatei (ist in der Exceldatei variabel, daher dynamische Multipages). Weiterhin wird über die Funktion in jede Multipage eine Combobox (NewBox) erstellt welche zugeordnet zu dem jeweiligen Tabellenblatt einen bestimmten Tabellenbereich ausliest und die Combobox damit füllt. Funktioniert bis hierhin auch wunderbar.
Nun möchte ich beim Schliessen der Userform2 den letzten Eintrag der Combobox in eine txt-Datei schreiben um diesen "Listindex" beim erneuten öffnen des Makros wieder angezeigt zubekommen (abhängig von der jeweilig ausgewählten Page). Das funktioniert irgendwie nicht er zeigt immer den 1.Eintrag (Listindex =0). Hat jemand eine Idee wie ich das hinkriege? Hier mal mein Code. Bin für jede Hilfe dankbar. Vielelicht ist ja auch mein Ansatz völlig falsch.

Function config_Multi_Page()

    Dim i, j, y As Integer
    Dim Rows As Long
    Dim NewPage As Page
    Dim NewBox As ListBox
   
   
   
    'Registerkarten (Pages) in MultiPage1 anlegen für jedes Excel-Sheet
    Userform2.MultiPage1.Pages.Clear
     
    For i = 1 To objXL.Sheets.Count
       
        objXL.Sheets(i).Select
        SheetName = objXL.ActiveSheet.Name
        Set NewPage = Userform2.MultiPage1.Add("Page" & i, SheetName, i - 1)
       
                'ListBox in die gerade erstellte Page einfügen
        Set NewBox = NewPage.Controls.Add("Forms.ComboBox.1", "CB_Bereich" & i, True)
        NewBox.Left = 10
        NewBox.Top = 10
        NewBox.Width = 115
        NewBox.Height = 18
        NewBox.SpecialEffect = fmSpecialEffectFlat
     
        '----------------------------------
       
        'Zeilen mit Inhalt im dafür vorgesehenen Bereich (also verfügbare Varianten) zählen
        'Array anlegen mit der Zeilenanzahl als Dimension, zuweisen der Variantennamen, übertragen in gerade erstellte ListBox
        Rows = 0
        For j = 5 To 10
            If objXL.ActiveSheet.range("A" & j).Value Like "" = False Then
            Rows = Rows + 1
            End If
        Next
               
        If Rows >= 1 Then
            Dim ListArray()
            ReDim ListArray(Rows - 1)
            For j = 5 To 10
                Dim Zelle As String
                Zelle = objXL.ActiveSheet.range("A" & j).Value
                If Zelle Like "" = False Then
                ListArray(j - 5) = Zelle
                End If
            Next
            'Hier wird die neue Listbox gefüllt
            NewBox.List() = ListArray
           
        End If

        On Error Resume Next
       
        ' erster Eintrag im Kombinationsfeld "CB_Bereich"
       
        ' Speicherpfad der txt-Datei definieren
        txtpath = CATIA.SystemService.Environ("CATUSERSETTINGPATH")
        ' Listeneintrag aus dem Textfile auslesen
   
        ' Name/-Speicherpfad der txt-Datei
        mtxt = Mname & ".txt"
        txtName = txtpath & "\" & mtxt
   
        ' pruefen ob Datei existiert
        wCheck = CATIA.FileSystem.FileExists(txtName)
        If wCheck = "True" Or wCheck = "Wahr" Then
   
            ' wenn ja, Zeile der Datei auslesen
            sLine = ReadLine(txtName, 1)
            ' Falls die Zeile leer ist 1.Eintrag verwenden
            If (Len(sLine) < 2) Then
            NewBox.ListIndex = 0
           
            Else
            ' Zeile zerlegen und Eintrag-Index auslesen
            wzeile = Split(sLine, ";")
            BoxName = wzeile(1)

       
            NewBox.ListIndex = 0 = BoxName
           
           
           
            End If
        ' 1.Eintrag falls die txt-Datei noch nicht existiert
        Else
       
        NewBox.ListIndex = 0
               
        End If
   
                                       
    Next

End Function
---------------------------------------------------------------
Private Sub C_Abbrechen_Click()


    BoxName = NewBox.ListIndex
   
   
    ' Name/-Speicherpfad der txt-Datei
    mtxt = Mname & ".txt"
    txtName = txtpath & "\" & mtxt

' pruefen ob Datei bereits im angegebenen Verzeichnis existiert
uCheck = CATIA.FileSystem.FileExists(txtName)
If uCheck = "False" Or uCheck = "Falsch" Then

    ' Falls txt-Datei nicht existiert diese erzeugen und zuletzt ausgewaehlten Listeneintraeg von der Combobox "CB_Bereich" in die Zeile schreiben

txt_WriteLine "pos_" & Mname & ".txt", 1, Mname & ";" & BoxName & vbLf
   
Else
   
' zuletzt ausgewaehlten Listeneintraeg von der Combobox "CB_Bereich in die Zeile schreiben
        txt_WriteLine "pos_" & Mname & ".txt", 4, Mname & ";" & BoxName & ";" & vbLf
       
   
End If
   
    Unload Me
End Sub

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 20. Okt. 2014 09:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Willkommen im Forum. Bitte Systeminfo ergänzen.
Was funktioniert nicht? Klappt das abspeichern und auslesen des Wertes?
Ändere mal testweise folgende Zeile:
Code:
NewBox.ListIndex = CInt(BoxName)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 20. Okt. 2014 10:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Bernd,
danke für den Hinweis (sorry bin halt neu hier).
Wo genau meinst Du soll ich deinen Code-Vorschlag einfügen?
Habe den Code nochmal komplett durchlaufen lassen der Fehler scheint darin beim Schreiben des aktuellen Listeintrages zu liegen. Wenn ich den Button Abrechen drücke kommt an der Stelle:

Private Sub C_Abbrechen_Click()

BoxName = NewBox.ListIndex

Eine Fehlermeldung:
Run-time-error '424':
objekt required

Muß ich den aktuellen Eintrag anders auslesen. Liegt es evtl. daran das die Combobox dynamisch erstellt wird und er daher den Index nicht auslesen kann?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 20. Okt. 2014 10:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Die ListBox "NewBox" ist in dieser Sub nicht "bekannt". Diese wurde in der Funktion definiert/erstellt. Dies kann man schön im Watch- bzw Local-Fenster beobachten.
Ggf das Objekt NewBox als global definieren
Oder die Listbox nicht neu anlegen, sondern eine bestehende erweitern. Dann kannst du zB über den Name darauf zugreifen.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 20. Okt. 2014 11:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,
hmm... wie gesagt bin noch ein "VBA-Einsteiger" und kenne mich daher nicht so detailliert mit VBA aus. Habe unter (General)/ (Declarations) die NewBox als Public NewBox eingetragen meinst Du das?
Bzw. wie meinst Du das mit dem nicht neu erstellen sondern erweitern? Die Anzahl der Multipages ist variabel (je nach Anzahl der Tabellenblätter in der Exceldatei) und je nach Auswahl der Multipage soll in der Listbox der Bereich aus dem entsprechendem Tabellenblatt angezeigt werden. Wenn ich z. B. beim Beenden des Makros die Multipage 2(Fzg.) mit dem Listeneintrag3 (Marke)  ausgewählt hatte möchte ich beim erneuten starten des Makros auch diese Einstellung erhalten. Weiß nicht wie ich das durch erweietrn einer bestehenden Listbox realsieren soll?
Sorry, das ich dich bitten muß etwas weiter auszuholen und es Anfängerverständlich zu formulieren. Danke Dir vorab schon mal für deine mühen.

Gruß Matze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 20. Okt. 2014 13:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Du musst zunächst die aktive Page der Multipage abfragen und darin die Listbox abfragen. zB (ungetestet)
Code:
dim aktivePage as Integer
aktivePage = UserForm2.MultiPage1.Value

dim Page
Set Page= serForm2.MultiPage1.pages.item(aktivePage)
dim ListBox
Set Listbox = Page.control.item(1) 'oder über den Namen

dim aktIndex
aktIndex = Listbox.ListIndex


Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 20. Okt. 2014 13:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

wo genau muß die Abfrage den plaziert sein (in der Funktion nach dem Auslesen der txt-Datei oder im Sub vom Beenden-Button)?
Habe es mal probiert in dem SUB vom Beenden-Button die aktive Multi-Page wird auch einwandfrei wiedergegeben. Aber in der Zeile:
Set ListBox = Page.control.Item (1) läuft er auf folgenden Fehler "Object doesn't support this property or method"
Ist denn die Abfrage mit ListBox korrekt? habe ja ComboBox der Code "Set ComboBox = Page.Control.Item(1)" liefert allerdings den selben Fehler.
Muß der Code evtl. woanders plaziert werden oder ist der Name hier relevant (NewBox)?
Wenn er die MultiPage findet müßte er doch auch die darauf erstellte Combobox finden oder was genau fragt er mit der Zeile ab?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 20. Okt. 2014 16:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Zu deinen Fragen: werde dir mal klar wie dein Makro arbeitet.
(ich hätte jetzt gedacht dass mein geposteter Code in die  "C_Abbrechen_Click" gehört)
In meinem Code muss es ggf nur Controls statt Cotorol heißen.
Einfach mal den Code schrittweise abarbeiten und im Wischfester die Objekte beim Arbeiten betrachten.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 21. Okt. 2014 06:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Bernd,
hatte den Code ja wie oben beschrieben in "C_Abrechen_Click" eingefügt. Denn Schreibfehler hatte ich selber schon gefunden/korrigiert. Nichts desto trotz läuft er in der besagten Zeile ("Set ListBox = Page.Controls.Item(1)")immer auf einen Fehler ("invalid argument"). Danke Dir trotzdem für die Hilfe.

Gruß Matze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 21. Okt. 2014 12:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Dann probiere mal statt der Nummer den Namen der Listbox (Page.Controls.Item("ListBox1"))

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 21. Okt. 2014 13:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,
hilft leider auch nicht....Jetzt kommt die Fehlermeldung "Could not find the specified objekt". Bin schon etwas am verzweifeln.    Vielleicht muß ich das mit den dynamischen MultiPage lassen und einfach eine zusätzl. Combobox als "Ersatz" für die Multipage in die Userform einfügen und dann die anderen Comboboxen in Abhängigkeit zu einander setzen. Ist aber nicht das was ich möchte. Finde die MultiPage komfortabler (Anwenderfreundlicher) und da die Tabellenblätter flexibel erweiterbar sind diese halt dynamisch sein müssen. Ist evt. mein Ansatz falsch? Eigentlich möchte ich nur den zuletzt ausgewählten Eintrag, welcher beim erneuten öffnen vom Makro in der Combobox angezeigt wird.....

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 30. Okt. 2014 06:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
da das Auslesen vom Index bei der dynamisch erstellten ComboBox nicht funktionieren wollte habe ich jetzt eine "fesstehende" ComboBox in die Userform2 eingefügt. Diese läßt sich auch wunderbar aus der Exceldatei befüllen bzw. wechselt den Inhalt beim ändern der Multipageauswahl. So jetzt habe ich eine Zweite ComboBox, welche sich mit einem bestimmten Bereich der Exceldatei (Zelle, Spalte)je nach dem aktuell ausgewählten Index der 1sten Box befüllen soll. Das bedeutet ich muß die aktuelle Multipage und den Index der 1sten Box verwenden um dann den Bereich zu definieren , welcher in der 2ten Box aufgelistet werden soll. da die ausgewählte Multipage das Tabellenblatt bestimmt und in Abhängigkeit vom Index der 1sten Box der Zellenbereich auf diesem Blatt bestimmt werden soll welcher in der 2ten Box aufgelistet wird. Irgendwie bekomme ich es nicht hin den Index mit einzubinden. Im Moment liest er mir abhängig von der aktiven Multipage die Zeilen/ Spaltenbereich auf dem Tabellenblatt aus wie bestimme ich jetzt noch den Bereich anhand des definierten Index aus Box1
z.B.
Box1= Index 5 dann in Box2 die Werte(B5:B20)
Box1= Index 6  "  " Box2  "    " (B25:B35)

Hoffe es ist verständlich was ich meine und mir kann jemand helfen. Danke schon mal

Gruß Matze

Hier mal mein Code-Auszug:

' Auflistung der 2ten Box abhaengig vom akt. Index der 1sten Box bestimmen

    ' Index der 1.sten ComboBox ermitteln
    ObjSheet = ComboBox1.ListIndex + 2
       
    ' aktuell ausgewaehlte Multiseite auslesen
    aktivePage = Userform2.MultiPage1.Value

    ' Ein weiter zaehlen, da es keine Tabellenblatt "Null" gibt
    WorkSheet = aktivePage + 1
   
    ' Auflistung auslesen
    ComboBox2.Clear
    ' in der 5ten Zeile und Spalte B beginnen bis Leere Zelle kommt
    x = 5
    While (objXL.Sheets(WorkSheet).Cells(x, 2).Value <> "") Or x > 150
        ComboBox2.AddItem objXL.Sheets(WorkSheet).Cells(x, 2).Value
        x = x + 1
    Wend

End Sub

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 30. Okt. 2014 07:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Auf den ersten Blick sieht das gut aus.
Kommt eine Fehlermeldung?
Wird die Schliefe ausgeführt? Gibt es die ComboBox?
(Schrittweises ausführen und ggf mit MsgBox die werte aus der Exceltabelle anzeigen lassen)

Gruß
Bernd

PS: Solche allgemeinen VBA-Fragen passen ggf auch ins Programmier-Forum oder Excel-Forum.

EDIT: Programmierst von Catia aus oder von Excel aus? ggf reicht es "objXL.ActiveWorkbook.Sheets(WorkSheet)" zu ergänzen.

------------------
Warum einfach, wenn es auch kompliziert geht.

[Diese Nachricht wurde von bgrittmann am 30. Okt. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 30. Okt. 2014 09:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,
von Catia aus auf die Exceldatei zugreifen. Wie gesagt das Befüllen klappt alles wunderbar. Auch das beim wechseln der Multipage in der Userform2 das korrekte Tabellenblatt ausgelesen wird  Jetzt möchte ich aber das von diesem Tabellenblatt nur ein bestimmter Bereich aufgelistet wird und dies in Abhängigkeit von dem Listindex aus der ersten Kombobox. Daher mein Beispiel:
Combobox1.ListIndex = 0 Dann in Combobox2 = (B5:B20)
Combobox1.ListIndex = 1 Dann in Combobox2 = (B25:B35)
Wie gesagt bis jetzt liest er die kompl. Spalte B aus unabhängig welcher Index in der Combobox1 steht. Hier möchte ich den Bereich in Spalte B aber abhängig vom Index der Combobox1 definieren. Der gezeigte Code müßte also um das Einbinden des ListIndex und damit definieren des Zeilenbereichs in Spalte B erweitert werden. Wie mache ich das bzw. wie muß hier die Code-Ergänzung aussehen?
Hoffe dies war etwas verständlicher formuliert. Danke!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 30. Okt. 2014 10:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Dann musst du nur den Startwert für die Schleife ändern. zB (geht mit Sicherheit schöner):
Code:
if Combobox1.ListIndex = 0 then
    Startwert = 5
else
    Startwert  = 25
end if

for x = Startwert to (Startwert + 20)
    if (objXL.Sheets(WorkSheet).Cells(x, 2).Value <> "")  then
        ComboBox2.AddItem objXL.Sheets(WorkSheet).Cells(x, 2).Value
    end if
next


Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 30. Okt. 2014 11:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ja das sieht schon gar nicht so schlecht aus auf die Idee mit einer Schleife bin ich nicht gekommen. Es kommt aber noch hinzu das die Anzahl der Zeilen variiert je nachdem welches Tabellenblatt (Multipageseite) und welcher Index (Combobox1) ausgewählt wird.
Zur Erklärung: in Spalte A (ab Zeile 5) stehen die Einträge, mit denen die Combobox1 befüllt wird. In Spalte B stehen die Werte welche je nach Indexauswahl (Zelle Spalte A) einen Bereich in Spalte B definieren welcher in Combobox2 aufgelistet werden soll. Die Anzahl in Spalte A und B kann je nach Tabellenblatt variieren. Daher dachte ich immer einen bestimmte "Startzelle" zu definieren und ab da bis zu einer Leerzelle diese Spalte ausliest (unabhängig ob ich in Spalte B je nach Index 10 oder 15 Einträge habe).
Z.B.
Multipage1
Combobox1 (A5:A10)
ComboboxListIndex = 0 = (B5:B15) = Inhalt Combobox2
ComboboxListIndex = 1 = (B17:B25)= Inhalt Combobox2
usw. bis Zelle A10
Multipage2
Combobox1 (A5:A8)
ComboboxListIndex = 0 = (B5:B10) = Inhalt Combobox2
ComboboxListIndex = 1 = (B17:B30)= Inhalt Combobox2
usw. bis Zelle A8
Wie ändere ich die Schleife das er die Zellen dann immer bis zur Leerzeile ausliest bzw. geht das auf diesem Weg überhaupt?
Hoffe konnte so die Problematik etwas deutlicher darstellen.
Sorry wenn das alles "Excel-Lastig" klingt. Habe eine Exceltabelle in der diverse Einträge/ Werte stehen welche ausgelesen werden um dem User (über Multipage/ Combobox) eine gewisse Auswahl zu ermöglichen. Die Weiterverabreitung anhand dieser Auswahl wird in Catia (Part/-Produktumgebung) gemacht. Zur besseren Übersicht habe ich diesen Code-Teil hier weggelassen, da dieser auch weitesgehend funktioniert 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 30. Okt. 2014 11:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Kombiniere einfach die Bestimmung des Startwerts (If-) mit der While-Wend-Schleife.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 30. Okt. 2014 13:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,
ja genau und da hakt es. Ich bekomme es einfach nicht hin diese beiden Schleifen miteinander zu "verschachteln". Scheinbar sind meine VBA-Anfängerkenntnisse noch geringer als vermutet.
Hast Du hier mal eine Idee wie man die beiden Abfragen miteinander kombinieren kann?
Wäre dir super dankbar, da dies die letzte Hürde zu seien scheint um das Makro zum laufen zu bringen (so wie es soll).

Gruß Matze

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 30. Okt. 2014 13:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Code:

if Combobox1.ListIndex = 0 then
    Startwert = 5
else
    Startwert  = 25
end if

x = Startwert

While (objXL.Sheets(WorkSheet).Cells(x, 2).Value <> "") Or x > 150
        ComboBox2.AddItem objXL.Sheets(WorkSheet).Cells(x, 2).Value
        x = x + 1
Wend


Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 30. Okt. 2014 14:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

super  ,
genau so..... jetzt nur noch die Ergänzung das ich ja in Spalte A eine unterschiedl. Anzahl an Einträgen habe (bis max.10)je nach Tabellenblatt auf welches ich gerade zugreife. Die Schleife fragt ja nur zwei Bedingungen ab (Zelle 5 oder Zelle 25)muß ich die jetzt mit "ElseIf" endlos erweitern um allen Indexwerten (0-9) einen jeweiligen Zellenbereich zuzuordnen??
Nicht nur den Index 0(Zeile5) und Index 1(Zeile 25) oder geht dies einfacher/ komfortabler über eine Auflistung (irgendwo habe ich hier mal was von "Case" gelesen)o.ä.? Oder völlig flasche Richtung?
Wie gesagt ist ja auch eine unterschiedl Anzahl je nach Tabellenblatt.
Sind dem Ziel erstaunlich nah und bin begeistert wie das Makro bis hier hin funktioniert vielleicht kannst Du mir ja auf der "Zielgeraden noch ein wenig Hilfe zukommen lassen wäre super. Danke!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


Sehen Sie sich das Profil von joehz an!   Senden Sie eine Private Message an joehz  Schreiben Sie einen Gästebucheintrag für joehz

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 30. Okt. 2014 15:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

PMFJI

Hallo Matze,

wenn Du in einer freien Zeile 'Select' eingibst, den Cursor draufstellst und F1 drückst, sagt Dir die Online-Hilfe alles zu 'Select Case'.
Wenn Du dann noch ein kleines Programm strickst um die Arbeitsweise und die Syntax auszustesten, lernst Du wie's eingesetzt wird.
(So haben's alle anderen auch gelernt.)

Danach sollte es Dir selbst gelingen, das Makro zu vollenden.

Tschau,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 06. Nov. 2014 08:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi,
habe versucht mittels der Online-Hilfe eine Select Case-Anweisung als Ersatz für die "If Else-Variante" zu basteln (leider ist mein Englisch nicht so gut um den angezeigten Text einwandfrei übersetzt/ interpretiert zu haben). Dahe rwill ich nicht ausschliessen etwas falsch verstanden zu haben. Anbei mal der Code-Auszug, welchen ich erzeugt habe. Leider funktioniert dieser nicht. Wenn ich das Makro durchlaufen lasse kommt die Meldung "Nichts ausgewählt" (aus der Case Else MsgBox) bzw. er geht anschließend in den "Debugger-Modus".
Kann mir jemand sagen was ich falsch gemacht habe?

    Select Case Combobox1.ListIndex
    Case 0
    Startwert = 5
    Case 1
    Startwert = 25
    Case 2
    Startwert = 45
    Case 3
    Startwert = 95
    Case 4
    Startwert = 105
    Case Else:            MsgBox "Nichts gewählt"
    End Select

x = Startwert

    While (objXL.Sheets(WS).Cells(x, 2).Value <> "") Or x > 150
            ComboBox2.AddItem objXL.Sheets(WS).Cells(x, 2).Value
            x = x + 1
    Wend

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 06. Nov. 2014 08:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Servus
Der Code sieht auf den ersten Blick gut aus.
Wann wird der Code ausgeführt? Ist zu diesem Zeitpunkt was in der Combobox selektiert? ggf beim Hinzufügen der Elemente in die Combobox gleich ein Element aktivieren.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Matze10
Mitglied



Sehen Sie sich das Profil von Matze10 an!   Senden Sie eine Private Message an Matze10  Schreiben Sie einen Gästebucheintrag für Matze10

Beiträge: 13
Registriert: 20.10.2014

Win-7
Catia V5 R19SP9

erstellt am: 06. Nov. 2014 09:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Bernd,
habe den Code etwas gekürzt gepostet, da ich die Select Case-Anweisung an die Stelle der If-Else-Anweisung gesetzt habe. Hier der ausführliche Code bzw. in welchem Ereignis (Object-Prozedur) ich ihn eingefügt habe. Eigentlich kann nichts in der Box sein, da ich ja vorher den "clear-Befehl" ausführe. Meinst Du der Code steht evtl. an der falschen Stelle?

P.S.: scheinbar bit Du der einzige der mir hier echt weiterhelfen kann. Danke Dir für deine Geduld und Mühen mir zu helfen.....(Doppel-Danke ).


Private Sub ComboBox1_Change()

Dim ObjSheet As Integer
Dim WS As Integer


' Exceldatei auslesen
Set objXL = CreateObject(ExcelWb)

' Auflistung der 2ten Box abhaengig vom akt. Index der 1sten Box bestimmen

    ' Index der 1.sten ComboBox ermitteln
    ObjSheet = ComboBox1.ListIndex + 2
       
    ' aktuell ausgewaehlte Multiseite auslesen
    aktivePage = Userform2.MultiPage1.Value

    ' Ein weiter zaehlen, da es keine Tabellenblatt "Null" gibt
    WS = aktivePage + 1
   
    ' bisherige Eintraege loeschen
    ComboBox2.Clear

    ' Auflistung auslesen
    ' in der 5ten Zeile und Spalte B beginnen bis Leere Zelle kommt
    Select Case Combobox1.ListIndex
    Case 0
    Startwert = 5
    Case 1
    Startwert = 25
    Case 2
    Startwert = 45
    Case 3
    Startwert = 95
    Case 4
    Startwert = 105
    Case Else:            MsgBox "Nichts gewählt"
    End Select

    x = Startwert

    While (objXL.Sheets(WorkSheet).Cells(x, 2).Value <> "") Or x > 150
        ComboBox2.AddItem objXL.Sheets(WorkSheet).Cells(x, 2).Value
        x = x + 1
    Wend

UserForm2.ComboBox2.ListIndex = 0 + 1

End Sub

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joehz
Moderator
Freiberuflicher Konstrukteur


Sehen Sie sich das Profil von joehz an!   Senden Sie eine Private Message an joehz  Schreiben Sie einen Gästebucheintrag für joehz

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 06. Nov. 2014 14:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Matze10 10 Unities + Antwort hilfreich

Hallo Matze,

bei Deinem Code irritieren mich zwei Stellen:

Zitat:

' Auflistung der 2ten Box abhaengig vom akt. Index der 1sten Box bestimmen

    ' Index der 1.sten ComboBox ermitteln
    ObjSheet = ComboBox1.ListIndex + 2



Damit ermittelst Du nix, Du erhöhst nur den Index - effektiv ändest Du die Auswahl in der ComboBox.

und

Zitat:

UserForm2.ComboBox2.ListIndex = 0 + 1



Hier gilt dasselbe. Du wählst _immer_ den zweiten Wert der Combo aus.

Um den aktuell ausgewählten Wert auszulesen, verwende

Combo1.List(Combo1.ListIndex)


Zu Deinem Rant:

Es reicht gewöhnlich, wenn jemandem 1x richtig geantwortet wird.
Ein zweites Mal die gleiche Antwort zu geben ist eher unsinnig.

Prinzipiell geht's um Hilfe zur Selbsthilfe.

Tschau,
Joe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz