Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-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 OptionButton
BildScreenshot zu OptionButton OptionButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ScrollBar
BildScreenshot zu ScrollBar ScrollBar-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema SpinButton
BildScreenshot zu SpinButton SpinButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Durch einen button Werte ausgeben


Betrifft: Durch einen button Werte ausgeben von: Martina
Geschrieben am: 02.11.2017 11:57:27

Hallo Liebes Forum,

stehe heute morgen wieder etwas neben der Mütze.

Ich habe in einer UserForm eine ClickButton eingebaut. Dieser soll, wenn er betätigt wird (bei dem ersten Mal betätigen auf die letzte Zeile) und bei jedem weiteren betätigen um -1 nach oben. Bespiel :
(letzte Zeile = 54) "1.Klick" gehe auf Zeile 54
"2. Klick gehe auf Zeile 53" usw und jedes mal möchte ich gerne in jeder Zeile die angesprochen wird eine bestimmte Zelle in die TextBox eingefügt haben. Mein Ansatz:

Option Explicit
Private Sub CmdCheckActivity_Click()
Dim Kriterium1 As String, Kriterium2 As String, LetzteZeile As Integer, i As Integer

Kriterium1 = ComboBox7
Kriterium2 = ComboBox1

Range("B1").AutoFilter , Field:=2, Criteria1:=Kriterium1 'setzt einen Filter
Range("E1").AutoFilter , Field:=5, Criteria1:=Kriterium2 ' setzt einen Filter

LetzteZeile = Range("B65536").End(xlUp).Offset(1, 0).Row 'bestimmt die letzte Zeile
For i = LetzteZeile To 2
If Rows(i).RowHeight grosser 0 Then 'identifiziert nur dieZeilen, die ausgefiltert wurden (höhe grösser 0)
Eigentlich ist eine For-Schleife falsch, da ich das was die Schleife macht mit einem Klick machen möchte. Ich komme aber leider nicht weiter. Besten Dank im Voraus für eure wertvollen Tipps

  

Betrifft: AW: Durch einen button Werte ausgeben von: Nepumuk
Geschrieben am: 02.11.2017 15:42:00

Hallo Martina,

was soll passieren wenn du in der ersten Zeile angekommen bist, wieder von unten anfangen?

Gruß
Nepumuk


  

Betrifft: AW: Durch einen button Werte ausgeben von: Martina
Geschrieben am: 02.11.2017 16:02:15

Hallo Nepumuk,

am idealsten ware, wenn ich eine msgbox bekomme mit "letzte zelle angekommen" oder sowas.

MFG
Tina


  

Betrifft: AW: Durch einen button Werte ausgeben von: Nepumuk
Geschrieben am: 02.11.2017 16:33:56

Hallo Martina,

teste mal:

Private Sub CmdCheckActivity_Click()
    
    Static sstrKriterium1 As String, sstrKriterium2 As String
    Static savntValues As Variant
    Static sialngIndex As Long
    
    Dim strTemp As String
    Dim objDataObject As DataObject
    
    If ComboBox7.ListIndex > -1 And sstrKriterium1 = ComboBox7.Text And _
        ComboBox1.ListIndex > -1 And sstrKriterium2 = ComboBox1.Text Then
        
        If sialngIndex = LBound(savntValues) Then
            Call MsgBox("Letzte Zeile erreicht.", vbExclamation, "Hinweis")
        Else
            sialngIndex = sialngIndex - 1
            TextBox1.Text = savntValues(sialngIndex)
        End If
    Else
        
        sstrKriterium1 = ComboBox7.Text
        sstrKriterium2 = ComboBox1.Text
        
        Call Rows(1).AutoFilter(Field:=2, Criteria1:=sstrKriterium1) 'setzt einen Filter
        Call Rows(1).AutoFilter(Field:=5, Criteria1:=sstrKriterium2) ' setzt einen Filter
        
        With ActiveSheet.AutoFilter.Range
            Call Range(.Cells(2, 1), .Cells(.Rows.Count, 1)).Copy
        End With
        
        Set objDataObject = New DataObject
        Call objDataObject.GetFromClipboard
        strTemp = objDataObject.GetText
        Set objDataObject = Nothing
        strTemp = Left$(strTemp, Len(strTemp) - 2)
        Application.CutCopyMode = False
        savntValues = Split(strTemp, vbCrLf)
        sialngIndex = UBound(savntValues)
        
        If sialngIndex > -1 Then
            TextBox1.Text = savntValues(sialngIndex)
        Else
            Call MsgBox("Keine Daten gefunden.", vbExclamation, "Hinweis")
            TextBox1.Text = vbNullString
        End If
    End If
End Sub

Gruß
Nepumuk


  

Betrifft: AW: Durch einen button Werte ausgeben von: Tina W
Geschrieben am: 02.11.2017 21:56:18

Hallo Nepumuk,

ich habe zwar keine Ahnung wie es funktioniert, aber es funktioniert einwandfrei.
Besten Dank für deine Hilfe!!
Gibt es auch eine Möglichkeit, dass wenn z.B der Wert in der TextBox manuell geändert wird, durch Benutzer mit einem neuen Klickbefehl in der Userform z.B "ADD" genau die Zelle im Tabellenblatt "Daten" zu aktualisieren, wo man den Wert hergeholt hat?

Ganz liebe Grüße
Tina


  

Betrifft: AW: Durch einen button Werte ausgeben von: Tina W
Geschrieben am: 02.11.2017 23:11:14

Hey Nepumuk,

und abschließende Frage. Ich würde gerne deinen Code weiter ergänzen.
und zwar würde ich gerne weitere Werte aus der Zeile wo du den Wert für TextBox1 geholt hast, in weitere TextBoxen einfügen. Z.B Aus dieser Zeile die Spalte 5 und die 7 in die TextBox5 und TextBox7 aber da ich nicht durchblicke, fällt mir das sehr schwer :(

Grüße
Tina


  

Betrifft: AW: Durch einen button Werte ausgeben von: Nepumuk
Geschrieben am: 03.11.2017 11:01:08

Hallo Tina,

teste mal:

Option Explicit

Private mialngIndex As Long

Private Sub CmdCheckActivity_Click()
    
    Static sstrKriterium1 As String, sstrKriterium2 As String
    Static savntValues As Variant
    
    Dim strTemp As String
    Dim avntTemp As Variant
    Dim objDataObject As DataObject
    
    If ComboBox7.ListIndex > -1 And sstrKriterium1 = ComboBox7.Text And _
        ComboBox1.ListIndex > -1 And sstrKriterium2 = ComboBox1.Text Then
        
        If mialngIndex = LBound(savntValues) Then
            Call MsgBox("Letzte Zeile erreicht.", vbExclamation, "Hinweis")
        Else
            mialngIndex = mialngIndex - 1
            avntTemp = Split(savntValues(mialngIndex), vbTab)
            TextBox1.Text = avntTemp(0)
            TextBox5.Text = avntTemp(4)
            TextBox7.Text = avntTemp(6)
        End If
    Else
        
        sstrKriterium1 = ComboBox7.Text
        sstrKriterium2 = ComboBox1.Text
        
        Call Rows(1).AutoFilter(Field:=2, Criteria1:=sstrKriterium1) 'setzt einen Filter
        Call Rows(1).AutoFilter(Field:=5, Criteria1:=sstrKriterium2) 'setzt einen Filter
        
        With ActiveSheet.AutoFilter.Range
            Call Range(.Cells(2, 1), .Cells(.Rows.Count, 7)).Copy
        End With
        
        Set objDataObject = New DataObject
        Call objDataObject.GetFromClipboard
        strTemp = objDataObject.GetText
        Set objDataObject = Nothing
        strTemp = Left$(strTemp, Len(strTemp) - 2)
        Application.CutCopyMode = False
        savntValues = Split(strTemp, vbCrLf)
        mialngIndex = UBound(savntValues)
        
        If mialngIndex > -1 Then
            avntTemp = Split(savntValues(mialngIndex), vbTab)
            TextBox1.Text = avntTemp(0)
            TextBox5.Text = avntTemp(4)
            TextBox7.Text = avntTemp(6)
        Else
            Call MsgBox("Keine Daten gefunden.", vbExclamation, "Hinweis")
            TextBox1.Text = vbNullString
        End If
    End If
End Sub

Private Sub CommandButton1_Click()
    Dim lngRow As Long, lngTemp As Long
    With ActiveSheet.AutoFilter.Range
        For lngRow = .Rows.Count To 2 Step -1
            If Not .Rows(lngRow).Hidden Then
                lngTemp = lngTemp + 1
                If lngTemp - 1 = mialngIndex Then
                    .Cells(lngRow, 1).Value = TextBox1.Text
                    .Cells(lngRow, 5).Value = TextBox5.Text
                    .Cells(lngRow, 7).Value = TextBox7.Text
                End If
            End If
        Next
    End With
End Sub

Gruß
Nepumuk


  

Betrifft: AW: Durch einen button Werte ausgeben von: Martina
Geschrieben am: 03.11.2017 14:29:30

Hallo Nepumuk,
vielen Dank für deine Hilfe. Leider Klappt es nicht richtig.

TextBox1.Text = avntTemp(0) 'Funktioniert. Es nimmt den Wert der Richtigen Zelle.
TextBox5.Text = avntTemp(4) 'Hier kommt eine Fehlermeldung(Index Liegt ausserhalb des gültigen Bereich)
TextBox7.Text = avntTemp(6) ' Das Gleiche

in der TextBox7 soll die Zelle von der aktuellen Zeile und Spalte 3 rein
und in die TextBox5 soll die Zelle von der aktuellen Zeile und Spalte 5 rein .

ich habe leider gar kein Durchblick und kann mich nicht durchboxen. hast du eine Idee woran es liegen könnte?

ich werde aber noch weiter zu probieren.

Grüße
Martina


  

Betrifft: AW: Durch einen button Werte ausgeben von: Nepumuk
Geschrieben am: 03.11.2017 14:38:16

Hallo Tina,

die Spalte 5 filterst du da kann nur der Wert von ComboBox1 drin sein.


Zitat:

Aus dieser Zeile die Spalte 5 und die 7 in die TextBox5 und TextBox7

Welche denn nun???

Hast du auch den Rest des Codes kopiert, denn da haben sich nicht nur die zwei Zeilen mit dem Fehler geändert, daher auch die Fehlermeldung.

Gruß
Nepumuk


  

Betrifft: AW: Durch einen button Werte ausgeben von: Martina
Geschrieben am: 03.11.2017 15:09:29

Hallo Nepumuk,

ich habe leider etwas den Überblick verloren. Aber vielleicht wird es verdeutlicht, wenn ich eine Spieldatei hochlade. Ich habe alle Daten umgeändert und auch (deinen Code etwas angepasst).
Konkret geht es um die UserForm5

Dort kann ich die ComboBox7 ,4 und 8 anwählen. Wenn ich nun "CmdCheckActivity" klicke, soll im Worksheet("Daten") nach den Werten in den ComboBoxen gefiltert warden. Dann soll von oben anfangen von jedem der gefilterten Zeilen die dazugehörige Wert der Spalte 6 in die TextBox6, Spalte 3 in die TextBox7 und Spalte5 in die TextBox 5

Wenn ich "CmdCheckActivity" nochmal klicke, dann soll es einfach in die nächste Zeile der gefilterten Werte (z.B von 54 auf 53).

Weiterhin gibt es den Button "CmdAcceptTheChange" der soll einfach nur (Wenn die Textbox6 manuell geändert wird)die Änderungen im Worksheet("Daten") übernehmen.

ich hoffe ich konnte mein Problem einigermaßen verdeutlichen.

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


Besten Dank im Voraus für deine Unterstützung.

Gruß
Martina


  

Betrifft: AW: Durch einen button Werte ausgeben von: Nepumuk
Geschrieben am: 03.11.2017 16:12:00

Hallo Tina,

teste mal: https://www.herber.de/bbs/user/117421.xlsm

Gruß
Nepumuk


  

Betrifft: AW: Durch einen button Werte ausgeben von: Tina W
Geschrieben am: 03.11.2017 21:20:15

Hallo Nepumuk,

vielen Dank es läuft genau so wie ich es haben möchte.
Du hast mir mit deinen Beiträgen sehr geholfen.

Kannst du mir evtl noch einen kleinen Tipp geben, wie ich wenn ComboBox8 gar nicht auswähle, er das als " " (Leerzeichen)sieht ? Weil ich eigentlich nur wenn ich die ComboBox4 = "Protocol" wähle die ComboBox8 brauche . Wenn ich z.B ComboBox4 <> "Protocol" wähle muss ich extra auf ComboBox8= " " anwählen damit es läuft. Kann ich es irgendwie so schreiben, dass wenn ComboBox4 <> "Protocol" ist,
dann automatisch ComboBox8 = " " ist??

TextBox6.Text = avntTemp(5)was bedeutet diese Zeile?
Wie lange beschäftigst du dich schon mit VBA ?
Sorry,dass ich dich wieder mit Fragen bombadiere, aber leider habe ich den Durchblick verloren, sodass ich den Code nach meinen Vorstellungen (s.o) ändern kann.

Besten Dank im Voraus und ein schönes Wochenende.
Grüße
Martina




  

Betrifft: AW: Durch einen button Werte ausgeben von: Nepumuk
Geschrieben am: 04.11.2017 08:42:58

Hallo Tina,

1. Ich hab es mal eingebaut: https://www.herber.de/bbs/user/117424.xlsm Wenn du in Combobox8 nichts auswählst wird die zugehörige Spalte N (14) nicht gefiltert.

2. Wenn ich eine Tabelle kopiere, so sind im Clipboard die Zeilen mit vbCrLf (Cr=carriage return = Wagenrücklauf) (Lf=Line feed = Zeilenvorschub) und die Spalten mit vbTab (Tab-Tabulator) damit trenne ich die Spalten aus einem String in ein Array. Dieses Array ist 0-Basiert Sprich die Spalte A hat den Index 0 die Spalte B den Index 1 usw. avntTemp(5) ist also die Spalte F

3. Ich programmiere seit 40 Jahren, davon rund 20 Jahre VBA.

Gruß
Nepumuk


Beiträge aus den Excel-Beispielen zum Thema "Durch einen button Werte ausgeben"