Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Werte UserForm in Array übernehmen

Werte UserForm in Array übernehmen
Gregor
Hallo zusammen
Aus dem Fundus im Forum habe ich folgenden Code zusammengestellt, der prima funktioniert:

Sub Suchen_und_Fundstellen_auflisten_mehrere_Tabellen()
Dim Meldung As Variant, strWort() As Variant
Dim Bereich As Range, Rng As Range
Dim WS As Worksheet
Dim y As Double, IntI As Double, n As Double
Dim arrFind()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
strWort() = Array("Morgen", "Heute", "Gestern", "Test")
' Eigentlicher Suchvorgang (in allen Tabellenblättern)
n = 0
For y = 1 To Sheets.Count
If Sheets(y).Name  "Auswahltabelle" Then
' Bereich festlegen
Set Bereich = Worksheets(y).UsedRange
For Each Rng In Bereich
For IntI = 0 To 3 'Anzahl Array = 4 (0,1,2,3)
If InStr(Rng, strWort(IntI)) Then
n = n + 1
ReDim Preserve arrFind(1 To 2, 1 To n)
arrFind(1, n) = Sheets(y).Name
arrFind(2, n) = Rng.Address(RowAbsolute:=False, ColumnAbsolute:=False)
End If
Next
Next
End If
Next
Select Case n
Case 1
Meldung = MsgBox("Es wurde leider nichts gefunden", _
vbOKOnly, "   Gefundene Werte")
Exit Sub
Case Else
Meldung = MsgBox(n & " Übereinstimmungen gefunden.", _
vbOKOnly, "   Gefundene Werte")
' Tabelle einfügen
For Each WS In Worksheets
If WS.Name = "Auswahltabelle" Then
WS.Delete
End If
Next
Worksheets.Add.Move after:=Worksheets(Worksheets.Count)
On Error Resume Next
With ActiveSheet
.Name = "Auswahltabelle"
.[A1] = "Suchergebnis"
.Range(.Cells(2, 1), .Cells(1 + n, 2)).Select
.Range(.Cells(2, 1), .Cells(1 + n, 2)) = Application.Transpose(arrFind)
.Cells.EntireColumn.AutoFit
.Cells(1, 1).Select
End With
End Select
Sheets(y).Select
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Nun sollte ich aber die Suchbegriffe Variabel gestallten, indem ich in einer UserForm max 10 Suchbegriffe zur Auswahl vorgebe. Der User soll die gewünschten Suchbegriffe (mehrere) anklicken können und anschliessend sollten die angewählten Begriffe in den Array zum Suchen übernommen werden. Wie muss ich meinen Code ergänzen?
Danke und Gruss
Gregor
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Werte UserForm in Array übernehmen
14.09.2011 21:55:27
Peter
Hallo Gregor,
ein UserForm(ular) mit einer ListBox und einem CommandButton.
Die ListBox auf MultiSelect = 1 oder 2 gesetzt
dann kannst Du auswählen und einen temporären Array mit den ausgewählten Daten füllen

Private Sub CommandButton1_Click()
Dim lListBox  As Long
Dim lZeile    As Long
Dim vTemp()   As Variant
Dim iTemp     As Integer: iTemp = -1
With ThisWorkbook.Worksheets("Tabelle2")
.Range("C1:C" & .Cells(Rows.Count, 3).End(xlUp).Row).ClearContents
For lListBox = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lListBox) Then
iTemp = iTemp + 1
ReDim Preserve vTemp(iTemp)
vTemp(iTemp) = ListBox1.List(lListBox, 0)
End If
Next lListBox
End With
If iTemp > -1 Then
MsgBox Join(vTemp) ' anzeigen der ausgewählten Suchbegriffe
Else
MsgBox "Sie haben keinen Suchbegriff ausgewählt.", _
48, "   Hinweis für " & Application.UserName
End If
End Sub


Private Sub UserForm_Activate()
Dim vTemp  As Variant
vTemp = ThisWorkbook.Worksheets("Tabelle2").Range("A1:A12")
With ListBox1
.List = vTemp
End With
End Sub

Gruß Peter
Anzeige
AW: Werte UserForm in Array übernehmen
14.09.2011 22:13:01
Peter
Hallo Gregor,
hier noch die Beispiel.Mappe dazu

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


Gruß Peter
AW: Werte UserForm in Array übernehmen
14.09.2011 23:21:53
Gregor
Hoi Peter
Vielen Dank, das scheint schon vielversprechend.
Aber wie bringe ich die ausgewählten Begriffe (Join(vTemp)?) in den untenstehenden Array
strWort() = Array("Morgen", "Heute", "Gestern", "Test")
das heisst anstelle der statischen Angaben?
Leider krieg ich das nicht heraus, ist aber vermutlich keine Hexerei mehr.
Danke und Gruss
Gregor
Anzeige
AW: Werte UserForm in Array übernehmen
15.09.2011 11:59:33
Peter
Hallo Gregor,
in der beigefügten Mappe fülle ich den Array strWort und rufe nach dem Schließen des UserForm(ulars) Dein Makro auf.
Es findet natürlich die angeklickten Werte im Blatt Tabelle1.
Ich hoffe, das war's, was Du wolltest.
Gruß Peter
https://www.herber.de/bbs/user/76630.xls
Anzeige
AW: Werte UserForm in Array übernehmen
15.09.2011 15:45:19
Gregor
Hallo Peter
Super, vielen Dank für deine Unterstützung.
Gruss Gregor
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Werte aus UserForm in ein Array übernehmen


Schritt-für-Schritt-Anleitung

  1. Erstelle eine UserForm: Füge eine UserForm in deinem Excel VBA-Projekt hinzu. Platziere eine ListBox, die auf MultiSelect gesetzt ist, und einen CommandButton.

  2. Fülle die ListBox: Verwende den folgenden Code, um die ListBox mit den Suchbegriffen zu füllen:

    Private Sub UserForm_Activate()
        Dim vTemp As Variant
        vTemp = ThisWorkbook.Worksheets("Tabelle2").Range("A1:A12")
        With ListBox1
            .List = vTemp
        End With
    End Sub
  3. Verarbeite die Auswahl: Verwende den Code im CommandButton, um die ausgewählten Werte in ein Array zu übertragen:

    Private Sub CommandButton1_Click()
        Dim lListBox As Long
        Dim iTemp As Integer: iTemp = -1
        Dim vTemp() As Variant
    
        For lListBox = 0 To ListBox1.ListCount - 1
            If ListBox1.Selected(lListBox) Then
                iTemp = iTemp + 1
                ReDim Preserve vTemp(iTemp)
                vTemp(iTemp) = ListBox1.List(lListBox, 0)
            End If
        Next lListBox
    
        If iTemp > -1 Then
            ' Hier wird der Array mit Werten gefüllt
            strWort() = vTemp
            MsgBox Join(vTemp) ' Anzeigen der ausgewählten Suchbegriffe
        Else
            MsgBox "Sie haben keinen Suchbegriff ausgewählt.", 48, "Hinweis"
        End If
    End Sub
  4. Ergänze die Logik in deinem Hauptmakro: Stelle sicher, dass die Logik zur Suche in den Tabellen nach der UserForm aufgerufen wird, damit die dynamischen Suchbegriffe verwendet werden.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht definiert": Stelle sicher, dass strWort korrekt deklariert wurde:

    Dim strWort() As Variant
  • Fehler: ListBox ist leer: Überprüfe, ob die Daten in der angegebenen Range in Tabelle2 vorhanden sind.

  • Fehler: Keine Auswahl: Wenn der Benutzer keine Suchbegriffe auswählt, wird eine entsprechende Meldung angezeigt. Achte darauf, dass der Benutzer die Auswahl trifft.


Alternative Methoden

Eine alternative Methode, um Suchbegriffe dynamisch zu handhaben, besteht darin, die Begriffe direkt aus einer Excel-Tabelle zu lesen, anstatt sie in der UserForm festzulegen. So kannst du die Begriffe jederzeit in der Tabelle aktualisieren, ohne den VBA-Code ändern zu müssen.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie die UserForm und das Makro zusammenarbeiten. Angenommen, du hast folgende Begriffe in Tabelle2 in den Zellen A1 bis A4:

Morgen
Heute
Gestern
Test

Wenn der Benutzer „Heute“ und „Test“ auswählt und auf den Button klickt, wird der Array strWort wie folgt gefüllt:

strWort() = Array("Heute", "Test")

Das anschließende Makro sucht dann nur nach diesen Begriffen.


Tipps für Profis

  • Verwende Error-Handling: Integriere Error-Handling, um unerwartete Fehler abzufangen. Verwende On Error Resume Next und On Error GoTo 0, um die Fehlerbehandlung zu aktivieren und zu deaktivieren.

  • Optimiere die Benutzeroberfläche: Gestalte die UserForm ansprechend. Benutze Labels zur Erklärung und füge eventuell ein Suchfeld hinzu, um die Benutzererfahrung zu verbessern.

  • Speichere die Auswahl: Du könntest die letzten Auswahloptionen in einer versteckten Tabelle speichern, um die Nutzung zu erleichtern.


FAQ: Häufige Fragen

1. Frage
Wie kann ich die maximale Anzahl der Suchbegriffe, die der Benutzer auswählen kann, begrenzen?
Antwort: Setze eine Bedingung im CommandButton, die die Anzahl der ausgewählten Items überprüft und eine Fehlermeldung anzeigt, wenn die maximale Anzahl erreicht ist.

2. Frage
Kann ich die UserForm so anpassen, dass sie beim Öffnen automatisch die letzten Suchbegriffe anzeigt?
Antwort: Ja, du kannst die letzten Suchbegriffe beim Aktivieren der UserForm aus einer Tabelle laden und in die ListBox einfügen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige