AW: Suche in mehreren Tabellblättern
25.04.2017 09:43:39
yummi
Hallo Friedl,
du fängst in dem nicht sichtbaren Sheet Bewohnerliste an zu suchen, wen ndu das nciht willst, dann musst du noch eine if Abfrage so in der Art machen
if wks.name "Bewohnerliste" then innerhalb der for Schleife drum herum bauen
Ich habe dir für dich zur Ansicht eine 2. For-Schleife davor gesetzt (zum Debuggen, siehe Direktfenster, da gehen die Ausgaben hin), da siehst Du welche Tebellenblätter er durchsucht, die 1. For Schleife kannst Du dann entfernen, wenn Du es verstanden hast.
Private Sub CommandButton1_Click()
Dim ssearch As String
Dim firstAddress
Dim i As Integer
Dim wks As Worksheet
Dim wkb As Workbook
Dim tb As Integer
Set wkb = ThisWorkbook
If Me.ComboBox1.Text = "" Then
MsgBox "Geben Sie bitte einen Suchbegriff ein !"
Exit Sub
Else
'nur für Debug Zwecke
Debug.Print "Anzahl der Sheets : " & wkb.Sheets.Count
For tb = 1 To wkb.Sheets.Count
Set wks = wkb.Sheets(tb)
Debug.Print wks.Name
Set wks = Nothing
Next tb
'Debug Zwecke Ende
For tb = 1 To wkb.Sheets.Count
Set wks = wkb.Sheets(tb)
Debug.Print wks.Name 'hier gibt er dir im Debug Direktfenster aus welches _
Tabellenblatt gerade durchsucht wird
ssearch = Me.ComboBox1.Text
Set rngFind = wks.Columns("d:d").Find(What:=ssearch, LookAt:=xlWhole, LookIn:=xlValues)
If rngFind Is Nothing Then
If MsgBox("Dieser Datensatz existiert noch nicht !" & vbCrLf & vbCrLf & " Möchten _
Sie ihn jetzt neu anlegen ?", vbQuestion + vbYesNo, "Nachfragen") = vbNo Then
Me.ComboBox1.Text = ""
Me.ComboBox1.SetFocus
Exit Sub
Else
Me.ComboBox1.SetFocus
End If
Else
i = 0
firstAddress = rngFind.Address
Do
With Me.ListBox1
.AddItem
.List(i, 0) = rngFind.Offset(0, -3).Value
.List(i, 1) = rngFind.Offset(0, -2).Value
.List(i, 2) = rngFind
.List(i, 3) = rngFind.Offset(0, 1).Value
.List(i, 4) = rngFind.Offset(0, 2).Value
.List(i, 5) = rngFind.Offset(0, 3).Value
.List(i, 6) = rngFind.Offset(0, 4).Value
.List(i, 7) = rngFind.Offset(0, 5).Value
.List(i, 8) = rngFind.Offset(0, 6).Value
.List(i, 9) = rngFind.Offset(0, 7).Value
End With
Set rngFind = wks.Columns("d:d").FindNext(rngFind)
i = i + 1
Loop While Not rngFind Is Nothing And rngFind.Address firstAddress
End If
Set wks = Nothing
Next tb
'was willst du hier machen?
If Me.ListBox1.ListCount = 1 Then
With Me
.ListBox1.Text = rngFind.Offset(0, -2).Value
.TextBox2.Text = rngFind.Offset(0, 1).Value
.TextBox3.Text = rngFind.Offset(0, 2).Value
.TextBox4.Text = rngFind.Offset(0, 3).Value
.TextBox5.Text = rngFind.Offset(0, 4).Value
.TextBox6.Text = rngFind.Offset(0, 5).Value
.TextBox7.Text = rngFind.Offset(0, 6).Value
.TextBox8.Text = rngFind.Offset(0, 7).Value
.TextBox9.Text = rngFind.Offset(0, 8).Value
.TextBox10.Text = rngFind.Offset(0, 9).Value
.TextBox11.Text = rngFind.Offset(0, 10).Value
.TextBox12.Text = rngFind.Offset(0, 11).Value
.TextBox13.Text = rngFind.Offset(0, 12).Value
.TextBox14.Text = rngFind.Offset(0, 13).Value
.TextBox15.Text = rngFind.Offset(0, 14).Value
.TextBox16.Text = rngFind.Offset(0, 15).Value
.TextBox17.Text = rngFind.Offset(0, -1).Value
.TextBox18.Text = rngFind.Offset(0, 16).Value
.TextBox19.Text = rngFind.Offset(0, 17).Value
.TextBox20.Text = rngFind.Offset(0, 18).Value
End With
Me.ListBox1.Clear
End If
If Me.TextBox16.Text "" Then
ReadFolder "N:\UK_Dokumentation\KRIPPE\Anmeldungen - kinder\" & Me.TextBox16.Text & "\" _
' Ordner Inhalt in Listbox anzeigen Function ReadFolder
End If
End If
End Sub
Allerdings werden die Tabellenblätter nur so lange durchsucht, bis der suchbegriff gefunden wird. Du musst darauf achten, dass Du vollständig referenzierst, sonst wirst du auf arge Probleme laufen, da sonst nur immer das aktive Sheet referenziert wird und das willst Du ja nicht.
Schau dir das mal an, ob Du damit vom Verstehen her weiter kommst.
Gruß
yummi