Thema Datum  Von Nutzer Rating
Antwort
05.05.2017 14:30:20 CodeBert
Solved
06.05.2017 13:27:03 BigBen
Solved
24.05.2017 16:25:27 Codebert
Solved
Blau VBA Excel Eingabemaske Speicherbutton
02.06.2017 13:33:39 CodeBert
Solved

Ansicht des Beitrags:
Von:
CodeBert
Datum:
02.06.2017 13:33:39
Views:
585
Rating: Antwort:
 Nein
Thema:
VBA Excel Eingabemaske Speicherbutton

Moin an alle, habe das Problem jetzt gelöst und poste das hier mal rein, falls jemand mal ein ähnliches Problem hat und herumgoogelt oder jemand einfach nur Interesse hat.  Um das Problem zu verstehen, braucht man noch den vollständigen Code der Prozedur die durch das Klicken in die Listbox aufgerufen wird. Hier der  Code für beide Prozeduren. 

 

Private Sub cmd_VSave_Click()


  Dim iRow As Long
  
    
    If Lst_Vrmtr.ListIndex = -1 Then Exit Sub
    
    
    If Trim(CStr(txt_VName.Text)) = "" Then
        
        MsgBox "Bitte trage einen Namen ein!", vbCritical + vbOKOnly, "Fehler!"
        Exit Sub
    End If
    'Ausbauoption: Überprüfen ob ID schon irgendwo in Tabelle vorhanden ist!
    
    
    iRow = 2
    
    
    Dim Newname As String
    Do While Trim(CStr(WksVrmtr.Cells(iRow, 1).Value)) <> ""
    
     
        If Lst_Vrmtr.List(Lst_Vrmtr.ListIndex, 0) = Trim(CStr(WksVrmtr.Cells(iRow, 1).Value)) Then
            
            
            With WksVrmtr
             
             
             .Cells(iRow, 3).Value = cmb_VAnrede.Value
             .Cells(iRow, 4).Value = txt_VHandyA.Value
             .Cells(iRow, 5).Value = txt_VHandyB.Value
             .Cells(iRow, 6).Value = txt_VFestnetz.Value
             .Cells(iRow, 7).Value = txt_VFax.Value
             .Cells(iRow, 8).Value = txt_VMail.Value
             .Cells(iRow, 9).Value = txt_VHomepage.Value
             .Cells(iRow, 10).Value = txt_VAnmerkung.Value
             .Cells(iRow, 2).Value = txt_VName.Value 'HIER die Abfrage wo es krumm wurde
                
            End With
            'Application.EnableEvents = True
            
            'If Lst_Vrmtr.List(Lst_Vrmtr.ListIndex, 1) <> Trim(CStr(txt_VName.Text)) Then
                'Call UserForm_Initialize
                'If Lst_Vrmtr.ListCount > 0 Then Lst_Vrmtr1.ListIndex = 0
            'End If
            
            Exit Do
            
        End If
    
        iRow = iRow + 1
    Loop
    

End Sub


---------------------------------------------------------------------------------


Private Sub Lst_Vrmtr_Click()

  Dim VTxtRow As Long
  Dim i As Long
  Dim strVrmtr As String
  
    If Lst_Vrmtr.ListIndex >= 0 Then
    
        VTxtRow = 2
        
        i = 0
        
        Dim singleselect As Boolean
        
        singleselect = False
        
            
        
        Do While Trim(CStr(WksVrmtr.Cells(VTxtRow, 1).Value)) <> ""
        
            
            If Lst_Vrmtr.List(Lst_Vrmtr.ListIndex, 0) = Trim(CStr(WksVrmtr.Cells(VTxtRow, 1).Value)) Then
            
                
                txt_VID = WksVrmtr.Cells(VTxtRow, 1).Value
                txt_VName = WksVrmtr.Cells(VTxtRow, 2).Value
                txt_VHandyA = WksVrmtr.Cells(VTxtRow, 4).Value
                txt_VHandyB = WksVrmtr.Cells(VTxtRow, 5).Value
                txt_VFestnetz = WksVrmtr.Cells(VTxtRow, 6).Value
                txt_VFax = WksVrmtr.Cells(VTxtRow, 7).Value
                txt_VMail = WksVrmtr.Cells(VTxtRow, 8).Value
                txt_VHomepage = WksVrmtr.Cells(VTxtRow, 9).Value
                txt_VAnmerkung = WksVrmtr.Cells(VTxtRow, 10).Value
                cmb_VAnrede = WksVrmtr.Cells(VTxtRow, 3).Value
            
                Exit Do
            
            End If
        
            VTxtRow = VTxtRow + 1
        
        Loop
        
    End If
    

End Sub



Aus einem sehr spezifischen Grund ruft er aus auch bei ausgeschalteten Events die untere Click Prozedur unten auf wenn er in der oberen Save Prozedur den Value der Textbox txt_VName in die Tabelle schreiben soll und in dieser Clickboxprozedur werden die Textboxen überschrieben mit den Werten aus den Tabellen, also genau das Gegenteil von dem was ich haben wollte. Mein erster Workaround war also diese Abfrage unter alle anderen Textboxen in der with - end with zu setzen so wie es jetzt oben steht. Jetzt hat zwar alles funktioniert wie ich wollte, aber abstrus war es trotzdem: Wenn er bei der gekennzeichneten Zeile 

 

.Cells(iRow, 2).Value = txt_VName.Value


angekommen war, sprang er in die Click Prozedur, hat sie erfolglosdurchlaufen, danach den geänderten Namen in die Listbox eingetragen, ist nocheinmal die Click Prozedur durchlaufen und hat danach dann endlich wie gewünscht den geänderten Namen in die Tabelle eingetragen. Hat zwar funktioniert, aber ich wollt natürlich wissen wie und warum. 

Quelle allen Übels war folgender Codeabschnitt wenn die Userform initalisiert wurde, der verantwortlich dafür war die zweispaltige Listbox mit Werten zu füllen:
 

With WksVrmtr
       With Intersect(.UsedRange, Range("A2:B" & VLRow))
            Lst_Vrmtr.RowSource = .Address
            Lst_Vrmtr.ColumnWidths = "0;"
        End With
    End With



Die Änderungen in Lst_Vrmtr.RowSource war das Event was alles durcheinander gebracht hat! Habe das alles wieder umgeändert in klassischen Schleifen, die zwar insgesamt mehr Code fressen, aber dafür läuft jetzt alles so wie es laufen soll ohne irgendwelche komischen Workarounds. Falls es andere gibt die eine Listbox mit zwei Spalten haben, die ähnlich aufgebaut ist wie meine: Nutzt lieber Schleifen. Hab es jetzt so gemacht: 

 

lRow = 2
    
        Do While Trim(CStr(WksVrmtr.Cells(lRow, 1).Value)) <> ""
                .List(.ListCount - 1, 1) = WksVrmtr.Cells(lRow, 2).Value
            End With
            
            lRow = lRow + 1
        
        Loop
    Lst_Vrmtr.ColumnWidths = "0;"

Danke trotzdem allen!


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
05.05.2017 14:30:20 CodeBert
Solved
06.05.2017 13:27:03 BigBen
Solved
24.05.2017 16:25:27 Codebert
Solved
Blau VBA Excel Eingabemaske Speicherbutton
02.06.2017 13:33:39 CodeBert
Solved