Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
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

Frage zu Makro

Frage zu Makro
Holger
Hallo.
Benutze für eine Suchfunktion folgendes Makro:
Option Explicit
Global SSearch As String
Public Sub SearchAllTables()
Dim ws As Worksheet
Dim c
Dim firstAddress As String
Dim secAddress
Dim GFound As Boolean
Dim GWeiter As Boolean
GWeiter = False
GFound = False
anf:
SSearch = InputBox("Suchen nach:", "Search In All Tables", SSearch)
If SSearch = "" Then
End
End If
weiter:
For Each ws In Worksheets
'ws.Select
ws.Protect password:="xxx", userinterfaceonly:=True
With ws.Columns(1)
Set c = .Find(SSearch, LookIn:=xlValues, MatchCase:=False)
If Not c Is Nothing Then
GFound = True
ws.Select
c.Select
firstAddress = c.Address
If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbYes Then
Do
Set c = .FindNext(c)
secAddress = c.Address
If c.Address = firstAddress Then
Exit Do
End If
c.Select
If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbNo Then
GWeiter = True
GoTo ende
End If
Loop While Not c Is Nothing And secAddress  firstAddress And c.Address   _
firstAddress
Else
GWeiter = True
GoTo ende
End If
End If
End With
Next ws
ende:
If GFound = False Then
If MsgBox("Suchwert nicht gefunden ! Neue Suche ?", vbInformation + vbYesNo) = vbYes  _
Then
GoTo anf:
End If
Else
If GWeiter = False Then
If MsgBox("Sie haben alle Tabellenblätter durchsucht ! Nochmal alle gefundenen  _
Einträge zum Suchbegriff anzeigen ?", vbInformation + vbYesNo) = vbYes Then
GoTo weiter
End If
End If
End If
End Sub
Habe eine Excelmappe mit mehreren Tabellenblättern, welche aber ausgeblendet sind. Über Buttons kann zu den einzelnen Blättern gesprungen werden, so das dann nur das eine Blatt angezeigt wird.
Die o.g. Suche wird über einen Button gestartet, welcher sich auf dem jeweiligen Tabellenblatt befindet.
Wie muss ich den Code ändern, damit er nur auf dem aktuellen aktivierten /aktuell angezeigten Tabellenblatt sucht und nicht alle Blätter ?
Derzeit besteht das Problem, dass, wenn ich z.B.: nach Affe suche alles in Ordnung ist, sobald ich aber nach z.B.: Afe suche springt er bis zum letzen gefunden Eintrag (bei weitersuchen) und klickt man dann wieder auf weitersuchen, so kommt ein Laufzeitfehler (1004 - Die Methode select für das Objekt _Worksheet ist fehlgeschlagen - Klick auf debuggen und die Zeile unter GFound = True ist gelb unterlegt (also die Zeile ws.Select)).
Auf dem System befindet sich derzeit noch Office 2003 und 2007 im Paralellbetrieb. Die Mappe wird aber unter Office 2007 geöffnet.
Gruss
Holger

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Frage zu Makro
28.07.2010 13:05:40
Dirk
Hallo Holger,
probier mal so (onhne test) und lass' hoeren, ob ok.
Gruss
Dirk aus Dubai
Public Sub SearchAllTables()
Dim ws As Worksheet
Dim c
Dim firstAddress As String
Dim secAddress
Dim GFound As Boolean
Dim GWeiter As Boolean
GWeiter = False
GFound = False
anf:
SSearch = InputBox("Suchen nach:", "Search In All Tables", SSearch)
If SSearch = "" Then
End
End If
weiter:
set ws = ActiveSheet
ws.Protect password:="xxx", userinterfaceonly:=True
With ws.Columns(1)
Set c = .Find(SSearch, LookIn:=xlValues, MatchCase:=False)
If Not c Is Nothing Then
GFound = True
ws.Select
c.Select
firstAddress = c.Address
If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbYes Then
Do
Set c = .FindNext(c)
secAddress = c.Address
If c.Address = firstAddress Then
Exit Do
End If
c.Select
If MsgBox("Weitersuchen ?", vbQuestion + vbYesNo) = vbNo Then
GWeiter = True
GoTo ende
End If
Loop While Not c Is Nothing And secAddress  firstAddress And c.Address   _
_
firstAddress
Else
GWeiter = True
GoTo ende
End If
End If
End With
ende:
If GFound = False Then
If MsgBox("Suchwert nicht gefunden ! Neue Suche ?", vbInformation + vbYesNo) = vbYes  _
Then
GoTo anf:
End If
Else
If GWeiter = False Then
If MsgBox("Sie haben alle Tabellenblätter durchsucht ! Nochmal alle gefundenen  _
Einträge zum Suchbegriff anzeigen ?", vbInformation + vbYesNo) = vbYes Then
GoTo weiter
End If
End If
End If
End Sub

Anzeige
AW: Frage zu Makro
28.07.2010 13:33:30
Holger
Hey Dirk,
funktioniert super. Laufzeitfehler taucht nicht mehr auf.
Eine kurze Frage habe ich noch, was und wo muss ich ergänzen, damit das Makro beim erneuten Aufruf nicht den letzten erfassten Suchbegriff anzeigt, sondern leer ist.
LG
Holger
AW: Frage zu Makro
29.07.2010 08:10:49
Heiko
Moin Holger,
Hier vorne eine Zeile einfügen:
GWeiter = False
GFound = False
SSearch = ""
anf:
SSearch = InputBox("Suchen nach:", "Search In All Tables", SSearch)
If SSearch = "" Then
End
End If
weiter:
Ungetestet.
Oder die Variable SSearch garnicht erst global deklarieren.
Gruß Heiko
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige