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:
719
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. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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 

 

1
.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:
 

1
2
3
4
5
6
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: 

 

1
2
3
4
5
6
7
8
9
10
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