Clever-Excel-Forum

Normale Version: Hilfe beim VBA-Code
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo ihr fleißigen Helfer. Durch googlen habe ich einen VBA-Code der es mir ermöglicht eine gesamten Arbeitsmappe zu durchsuchen.
Nun habe ich festgestellt, dass ich dieses Makro nicht in einer geschützten Datei ausführen lässt. Also was macht der hilflose Anwender  Angel. Er googelt erneut und findet die Hilfe ich soll folgendes machen:

ActiveSheet.Unprotect Password:="Test""
Mein Makro
ActiveSheet.Protect Password:="Test" 


Gemacht getan mein Makro sieht dann so aus:
Option Explicit
Public strSuch As String
ActiveSheet.Unprotect Password:="Test""
Sub Suchen_alle_Tabellen()
Dim wks As Worksheet
Dim rng As Range
Dim strAddress As String, strFind As String
Dim oldColor As Integer
strFind = InputBox("Bitte Suchbegriff eingeben:", Application.UserName, strSuch)
If strFind = "" Then Exit Sub
For Each wks In Worksheets
Set rng = wks.Cells.Find(strFind, lookat:=xlPart, LookIn:=xlFormulas)
If Not rng Is Nothing Then
strAddress = rng.Address
Do
Application.GoTo rng, False
oldColor = rng.Interior.ColorIndex
rng.Interior.ColorIndex = 55
If MsgBox("Weiter", vbYesNo + vbQuestion) = vbNo Then GoTo Aufraeumen
rng.Interior.ColorIndex = oldColor
Set rng = Cells.FindNext(After:=ActiveCell)
If rng.Address = strAddress Then Exit Do
Loop
End If
Next wks
strSuch = strFind
MsgBox "Keine weiteren Fundstellen!", False, Application.UserName
Exit Sub
Aufraeumen:
rng.Interior.ColorIndex = oldColor
ActiveSheet.Protect Password:="Test" 
End Sub

Soweit so gut. Das funktioniert leider aber nur halb. 
1.) Der Blattschutz wird entfernt
2.) Das Makro wird ausgeführt und dann wird der Blattschutz leider nicht wieder aktiviert

Was ist falsch bei diesem Code/Vorgehen ??
Bitte helft einem Laien..........
Danke
Hallo,

ohne den Code gelesen zu haben, die Struktur ist in etwa so:


Code:
sub Suchen()
such = "SuchwortW
for each Sht in sheets
     Sht.UnProtect "123"
     set rng = Sht.cells.find(such, xlValues, xlWhole)
     if not rng is nothing then
'Hier die Codes zum suchen
     endif
     Sht.Protect "123"
next Sht
end sub
(03.03.2018, 19:31)Fennek schrieb: [ -> ]Hallo,

ohne den Code gelesen zu haben, die Struktur ist in etwa so:


Code:
sub Suchen()
such = "SuchwortW
for each Sht in sheets
    Sht.UnProtect "123"
    set rng = Sht.cells.find(such, xlValues, xlWhole)
    if not rng is nothing then
'Hier die Codes zum suchen
    endif
    Sht.Protect "123"
next Sht
end sub

Hallo Fennek.
Vielen Dank für deine rasche Hilfe. Wenn ich deinen Code bei mir einfüge und ausführe bekomme ich eine Fehlermeldung

Laufzeitfehler "13"
Typen unverträglich.

Mache ich etwas falsch
Hallo,

der Code ist ein "Gerüst" und so nicht lauffähig. Die notwendigen Änderungen musst du einfügen.


Code:
sub Suchen()
dim Sht as worksheet
such = "Suchwort"
for each Sht in thisworkbook.sheets
    Sht.UnProtect "123"
    set rng = Sht.cells.find(such, xlValues, xlWhole)
    if not rng is nothing then
'Hier die Codes zum suchen
    endif
    Sht.Protect "123"
next Sht
end sub

Außerdem hilft es anzugeben, in welcher Zeile der Fehler aufgetreten ist. Falls du "option explicit" verwendest, müssen alle Variablen dimensioniert werden.

mfg
Hi,

(03.03.2018, 19:07)schadre schrieb: [ -> ]strSuch = strFind
MsgBox "Keine weiteren Fundstellen!", False, Application.UserName
Exit Sub
Aufraeumen:
rng.Interior.ColorIndex = oldColor
ActiveSheet.Protect Password:="Test" 
End Sub

Soweit so gut. Das funktioniert leider aber nur halb. 
1.) Der Blattschutz wird entfernt
2.) Das Makro wird ausgeführt und dann wird der Blattschutz leider nicht wieder aktiviert

Was ist falsch bei diesem Code/Vorgehen ??
Bitte helft einem Laien..........
Danke

Wenn keine Fundstelle mehr vorhanden ist, wird das Makro verlassen: Exit Sub
danach wird nichts mehr ausgeführt.

Das Setzen des Blattschutzes muß an einer geeignete Stelle vor dem "Exit Sub" erfolgen.


Oder einfach das Exit Sub entfernen. Wink