Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema OptionButton
BildScreenshot zu OptionButton OptionButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Auf eine Neues

Betrifft: Auf eine Neues von: Stefan Glander
Geschrieben am: 08.11.2014 12:42:02

Hallo Forum,

ich bin wieder bei meinem Problem von gestern. Wie ich in dem Beitrag schon schrieb, ist die mir dort angebotene Hilfe viel zu groß.
Ich will Autofahren lernen und man setzt mich auf einen Formel 1 Wagen.
Deswegen nun neuer Versuch in kleinen Happen.

Ich möchte gerne Daten ändern.
Dazu habe ich eine UF vorbereitet. Auf der UF eine Listbox und Textfelder.
Ich schaffe es auch die Listbox zu befüllen, sagen wir mal mit dem Haupt-Index.
Ich bekomme es aber nicht hin die einzelnen dazugehörigen Daten in die TextBoxen zu übertragen, geschweigen den die geänderten Daten zu überschreiben.

Mag sich nicht jemand meines Problems annehmen?

Gruß

Stefan

https://www.herber.de/bbs/user/93626.xlsm

  

Betrifft: AW: Auf eine Neues von: Crazy Tom
Geschrieben am: 08.11.2014 13:38:41

Hallo Stefan

dann fangen wir mal mit nem FIAT500 an ;-)

Option Explicit

Dim Suchergebnis As Range

Private Sub CommandButton1_Click()
 Unload Me
End Sub

Private Sub leeren()
    Dim objControl As Control
    For Each objControl In Controls
       Select Case TypeName(objControl)
          Case "TextBox"
             objControl.Text = ""
          Case "ComboBox"
             objControl.ListIndex = -1
          Case "CheckBox"
             objControl.Value = False
          Case "OptionButton"
             objControl.Value = False
       End Select
    Next
End Sub

Private Sub CommandButton7_Click()
    Dim i As Integer
    With Sheets("Mitglieder")
        For i = 1 To 6
            .Cells(Suchergebnis.Row, i + 2) = Controls("Textbox" & i).Value
        Next
    End With
End Sub

Private Sub ListBox1_Click()
    Dim i As Integer
    With Sheets("Mitglieder").Columns(3)
        Set Suchergebnis = .Find(ListBox1.Text, LookIn:=xlValues, lookat:=xlWhole)
            If Not Suchergebnis Is Nothing Then
                For i = 1 To 6
                Controls("Textbox" & i).Value = Suchergebnis.Offset(0, i - 1).Value
                Next
            End If
    End With
End Sub

Private Sub UserForm_Initialize()
    Dim objDic As Object, rngC As Range
    Set objDic = CreateObject("Scripting.dictionary")
    With Sheets(2)
        For Each rngC In .Range(.Cells(2, 3), .Cells(Rows.Count, 3).End(xlUp))
            objDic(rngC.Value) = 0
        Next
    End With
    ListBox1.List = objDic.keys
End Sub

deine anderen Codes die du in der Userform hast, habe ich jetzt mal weg gelassen,
weil hierfür wird es nicht gebraucht

MfG Tom


  

Betrifft: AW: Freu von: Stefan Glander
Geschrieben am: 08.11.2014 14:36:28

Hallo Tom, nachdem ich wirklich den überflüssigen Code rausgeworfen habe haut es super hin.
Nun werde ich mal versuchen das zu verstehen und dann in meine Reale Datei einbauen.

Danke Dir.

Gruß
Stefan


  

Betrifft: AW: Freu von: Stefan Glander
Geschrieben am: 08.11.2014 14:43:42

Noch mal ich,
Tom es wäre nett wenn Du diesen Beitrag auch wenn er erledigt ist, im Auge behalten kannst.
Ich versuche nun eine 2. Listbox in dieses Beispiel einzubauen.
Da mein Vertrauen in mich eher klein ist, denke ich, das ich noch Fragen haben werde.

Gruß
Stefan


  

Betrifft: AW: Freu von: Stefan Glander
Geschrieben am: 08.11.2014 18:11:51

Hallo Tom,
wie wird bitte die Textbox1 nach klick der Listbox1 befüllt?

Gruß
Stefan

PS: Versuche gerade die Daten von Listbox2 aus zu laden weil versuchen möchte das Listbox 2 in Abhäigkeit von Listbox1 befüllt wird.
Zum Verständnis: Ich möchte die Daten wenn ich die Datei mal irgendwann so habe wie es sein soll,
beim schreiben je nach Kategorie auf 7 verschiedene Tabellenblätter geschrieben werden.
Das habe ich heute Nachmittag auch schon hinbekommen. Nun möchte ich beim änderen eben in Listbox1 die 7 Tabellenblatter zur Auswahl haben und dann in Listbox2 das was im Moment in Listbox1 passiert.


  

Betrifft: AW: Freu von: Crazy Tom
Geschrieben am: 08.11.2014 18:21:06

Hallo Stefan

das kann man so machen

Private Sub ListBox1_Click()
    TextBox1 = ListBox1.Text
End Sub

MfG Tom


  

Betrifft: AW: Freu von: Stefan Glander
Geschrieben am: 08.11.2014 18:35:39

Hallo Tom, ich versuche gerade den Code Fiat 500 zu verstehen.
Da machst du das ja nicht mit

Private Sub ListBox1_Click()
    TextBox1 = ListBox1.Text
End Sub
Das hat sicher was mit den Variablen zu tun, und das habe ich noch nicht ansatzweise verstanden.
Gerade jetzt komme ich mir vor wie... ich habe eine 2 Listbox eingebaut.
Ich wollte, damit man mir nicht alles vorkaut die Listbox 1 inhaltlich tauschen.
So das was im Fiat 500 Code im Moment in der Listbox 1 stattfindet in Listbox2 abläuft.
aus irgendeinem Grund bekomme ich es nur soweit hin, das wenn ich in die UF aufrufe zwar beide Listboxen befüllt werden, aber nur in Listbox1 bei Klick die TextBoxen befüllt werden.
Ich dachte das ist "leicht" LB1 gegen LB2 tauschen
Nun versuche ich zu verstehn warum es nicht leicht ist, deswegen meine frage wie du im Beispiel die TextBoxen befüllt hast.

Gruß

Stefan

https://www.herber.de/bbs/user/93631.xlsm


  

Betrifft: AW: Freu von: Crazy Tom
Geschrieben am: 08.11.2014 18:41:34

Hallo Stefan

mit Listbox1 werden ja die TextBoxen 1 bis 7 gefüllt
und ich gehe jetzt mal davon aus, dass die Textbox8 (Name) aus Listbox2 gefüllt werden soll

Private Sub ListBox2_Click()
    TextBox8 = ListBox2.Text
End Sub

MfG Tom


  

Betrifft: AW: Freu von: Stefan Glander
Geschrieben am: 08.11.2014 18:52:33

Hallo Tom,
ja, weil da möchte ich ja reinschreiben aus welchem Tabellenblatt sich die Listbox1 die Daten holen soll.
Der besseren Übersicht zuliebe wollte ich nur die Numerische Ordnung beibehalten, so unter dem Motto
Listbox 2 wird nach Info aus Listbox1 befüllt.

Gruß
Stefan

PS: Wenn ich manchmal etwas verwirrt oder verstrahlt wirke, liegt das sicher daran das ich Alleinerziehende Papa von zwei Vierjährigen bin, Ich bitte das zu entschuldigen.


  

Betrifft: AW: Freu von: Crazy Tom
Geschrieben am: 08.11.2014 19:02:52

Hallo Stefan

das würde ich nicht mit einer Listbox sondern mit einer Combobox machen
in die Combobox dann die Blattnamen einlesen
dann kannst du das füllen der Listbox für die Daten so machen

Private Sub ListBox1_Click()
    Dim i As Integer
    With Sheets("Combobox1.Text").Columns(3)
        Set Suchergebnis = .Find(ListBox1.Text, LookIn:=xlValues, lookat:=xlWhole)
            If Not Suchergebnis Is Nothing Then
                For i = 1 To 7
                Controls("Textbox" & i).Value = Suchergebnis.Offset(0, i - 1).Value
                Next
            End If
    End With
End Sub

MfG Tom


  

Betrifft: AW: Freu von: Stefan Glander
Geschrieben am: 08.11.2014 19:11:15

Hey Tom,
Combo-Box... noch nie wa smit gemacht, ich schau mir das mal an und melde mich ggf.

Gruß
Stefan


  

Betrifft: AW: Freu von: Crazy Tom
Geschrieben am: 08.11.2014 19:20:58

Hallo Stefan

schau es dir hier mal an

https://www.herber.de/bbs/user/93632.xlsm

MfG Tom


  

Betrifft: AW: Kleines Problem von: Stefan Glander
Geschrieben am: 08.11.2014 19:33:58

Hallo Tom,

so sieht es super aus, das wäre auch mein Ziel gewesen... aber...
ICh bekomme einen Debug-Fehler beim Schreiben, sprich wenn ich einen Datensat ausrufe , in einer TextBox was änder und dann speichern will.

Gruß
Stefan


  

Betrifft: AW: Kleines Problem von: Crazy Tom
Geschrieben am: 08.11.2014 19:43:05

Hallo Stefan

hatte ich übersehen

Private Sub leeren()
    Dim objControl As Control
    For Each objControl In Controls
       Select Case TypeName(objControl)
          Case "TextBox"
             objControl.Text = ""
          Case "ComboBox"
             objControl.ListIndex = 0
          Case "CheckBox"
             objControl.Value = False
          Case "OptionButton"
             objControl.Value = False
       End Select
    Next
End Sub

hier muss geändert werden

nu muss ich erstma mit den Hündchen Gassi gehen ;-)

MfG Tom


  

Betrifft: AW: Klein Problem von: Stefan Glander
Geschrieben am: 08.11.2014 19:51:29

Hallo Tom,
ich werde nun auch gleich Schluss machen und danke Dir noch einmal für deine Geduld und Mühe.
Morgen werde ich das erst einmal alles versuchen zu dokumentieren und dann in meine eigentlich Datei versuchen einzubauen.
Dir und Deinem Hund noch einen schönen Abend.

Gruß
Stefan


  

Betrifft: AW: Kleines Problem von: Stefan Glander
Geschrieben am: 12.11.2014 13:45:40

Hallo Tom,
auch wenn dieser Weg nun recht ungewöhnlich ist versuche ich es so.
Bitte glaube mir das ich hier keine Auftragsprogrammierung möchte auch wenn Robert das wohl so sieht.
Upps, vielleicht sollte ich Dir erst einmal sagen um was es hier geht.
ICh habe nach mit Deinem Fiat 500 Model weitergearbeitet. Läuft soweit auch alles recht gut.
Habe weiter Listbox dazu gebaut, dich ich wie folgt angelegt habe:

ListBox2.ColumnCount = 3
ListBox2.RowSource = "Daten!B2:C12"
ListBox2.ColumnWidths = "30;0"

Um mir dort auch die Nachbarspalten anzeigen zu lassen benutze ich:

With ListBox2
.Clear
.ColumnCount = 3
.ColumnWidths = "120;80;25"
End With

Aber bei Listbox1 Fiat 500 Model weiß ich auch nach dem Tipp von Franz nicht wie ich das angehen soll.
Möchte einfach nur das die Nachbarzelle mit angezeigt wird.

Magst du noch einmal helfen und bitte auch kommentieren?

Gruß
Stefan


  

Betrifft: AW: Kleines Problem von: Stefan Glander
Geschrieben am: 12.11.2014 13:48:12

Hallo Tom,
auch wenn dieser Weg nun recht ungewöhnlich ist versuche ich es so.
Bitte glaube mir das ich hier keine Auftragsprogrammierung möchte auch wenn Robert das wohl so sieht.
Upps, vielleicht sollte ich Dir erst einmal sagen um was es hier geht.
ICh habe nach mit Deinem Fiat 500 Model weitergearbeitet. Läuft soweit auch alles recht gut.
Habe weiter Listbox dazu gebaut, dich ich wie folgt angelegt habe:

ListBox2.ColumnCount = 3
ListBox2.RowSource = "Daten!B2:C12"
ListBox2.ColumnWidths = "30;0"

Um mir dort auch die Nachbarspalten anzeigen zu lassen benutze ich:

With ListBox2
.Clear
.ColumnCount = 3
.ColumnWidths = "120;80;25"
End With

Aber bei Listbox1 Fiat 500 Model weiß ich auch nach dem Tipp von Franz nicht wie ich das angehen soll.
Möchte einfach nur das die Nachbarzelle mit angezeigt wird.

Magst du noch einmal helfen und bitte auch kommentieren?

Gruß
Stefan

Achja der Tipp von Franz mit dem ich nicht klar komme

Listbox1:
Hier die Eigenschaft ColumnCount auf 2 ändern und ggf. auch ColumnsWidths anpassen.

Combobox1:
Makro wie folgt anpassen. Es wird zusätzlich zusätzlich die Zeilennummer zu den Werten in Spalte C im Dictionary-Objekt erfasst. So kann man dann die weiteren Informationen für die Listbox zusammenstellen.

Sinnvoll wäre es, die Spaltennummer auch in einer weiteren Spalte der Listbox zu erfassen. Dann könnte man im Listbox1-Change-Makro auf die Suchfunktion verzichten und über die Zeilennummer des gewählten Eintrags in der List der Listbox direkt auf die Daten in der Tabelle zugreifen.

Gruß
Franz


  

Betrifft: ...ich hab ja doch Recht !.........owT von: robert
Geschrieben am: 12.11.2014 19:15:21




  

Betrifft: AW: Siehe oben owT von: Stefan Glander
Geschrieben am: 12.11.2014 22:09:33

.


  

Betrifft: AW: Kleines Problem von: Crazy Tom
Geschrieben am: 12.11.2014 20:31:13

Hallo Stefan

wo ist denn nu das Problem?
du hast doch schon das hier

    ListBox2.ColumnCount = 3
    ListBox2.RowSource = "Daten!B2:C12"
    ListBox2.ColumnWidths = "30;0"

damit wird dir allerdings nur die erste Spalte der Listbox angezeigt

und so werden dir 2 Spalten angezeigt
Private Sub UserForm_Initialize()
    ListBox2.ColumnCount = 3
    ListBox2.RowSource = "Daten!B2:C12"
    ListBox2.ColumnWidths = "50;25"
End Sub

MfG Tom


  

Betrifft: AW: Kleines Problem von: Stefan Glander
Geschrieben am: 12.11.2014 21:49:29

Hallo Tom,

ja ber in Deinem Bespiel haben wir die Listbox1 doch über eine Combobox befüllt.

Private Sub UserForm_Initialize()
Dim strBlatt As Variant
strBlatt = Sheets("Daten").Range("H2:H9")
With ComboBox1
.List = strBlatt
.ListIndex = 0

Da ist mein Verständnisproblem.

Lieben Gruß
Stefan

PS und bitte nicht sauer sein wenn ich Robert nun mal Voll-Löffel


  

Betrifft: AW: Kleines Problem von: Crazy Tom
Geschrieben am: 14.11.2014 15:51:53

Hallo Stefan

versuch mal das hier

Private Sub ComboBox1_Change()
    Dim objDic As Object, rngC As Range
    Dim i As Long
    Set objDic = CreateObject("Scripting.dictionary")
    If ComboBox1.ListIndex = 0 Then Exit Sub
    With Sheets(ComboBox1.Text)
        For Each rngC In .Range(.Cells(2, 3), .Cells(Rows.Count, 3).End(xlUp))
            objDic(rngC.Value) = 0
        Next
    End With
    ListBox1.List = objDic.keys
    With ListBox2
        .Clear
        .ColumnCount = 3
        .ColumnWidths = "50;50;50"
    End With
    With Sheets(ComboBox1.Text)
        For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
            ListBox2.AddItem .Cells(i, 3)
            ListBox2.List(ListBox2.ListCount - 1, 1) = .Cells(i, 4)
            ListBox2.List(ListBox2.ListCount - 1, 2) = .Cells(i, 5)
        Next
    End With
End Sub

MfG Tom


  

Betrifft: AW: Kleines Problem von: Stefan Glander
Geschrieben am: 14.11.2014 08:16:51

Hallo Tom,
muss ich nun davon ausgehen das keine Hilfe mehr kommt?

Gruss

Stefan


  

Betrifft: Ja von: Ein Freund
Geschrieben am: 14.11.2014 08:29:11