Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1588to1592
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Durch einen button Werte ausgeben

Durch einen button Werte ausgeben
02.11.2017 11:57:27
Martina
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

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Durch einen button Werte ausgeben
02.11.2017 15:42:00
Nepumuk
Hallo Martina,
was soll passieren wenn du in der ersten Zeile angekommen bist, wieder von unten anfangen?
Gruß
Nepumuk
AW: Durch einen button Werte ausgeben
02.11.2017 16:02:15
Martina
Hallo Nepumuk,
am idealsten ware, wenn ich eine msgbox bekomme mit "letzte zelle angekommen" oder sowas.
MFG
Tina
AW: Durch einen button Werte ausgeben
02.11.2017 16:33:56
Nepumuk
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
Anzeige
AW: Durch einen button Werte ausgeben
02.11.2017 21:56:18
Tina
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
AW: Durch einen button Werte ausgeben
02.11.2017 23:11:14
Tina
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
Anzeige
AW: Durch einen button Werte ausgeben
03.11.2017 11:01:08
Nepumuk
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
Anzeige
AW: Durch einen button Werte ausgeben
03.11.2017 14:29:30
Martina
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
Anzeige
AW: Durch einen button Werte ausgeben
03.11.2017 14:38:16
Nepumuk
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
AW: Durch einen button Werte ausgeben
03.11.2017 15:09:29
Martina
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.

Die Datei https://www.herber.de/bbs/user/117418.xlsm wurde aus Datenschutzgründen gelöscht


Besten Dank im Voraus für deine Unterstützung.
Gruß
Martina
Anzeige
AW: Durch einen button Werte ausgeben
03.11.2017 21:20:15
Tina
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
Anzeige
AW: Durch einen button Werte ausgeben
04.11.2017 08:42:58
Nepumuk
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
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige