Makro ausführen trotz geschützter Blätter

Tappam

Newbie
Registriert
Jan. 2022
Beiträge
4
Hallo zusammen!
Kann mir einer helfen? Ich habe in meiner Exceldatei ein Makro, welches Barcodes generiert. Wenn ich aber den Blattschutz aktiviere, gehen meine Makros nicht mehr...
Ich habe jetzt zwar etwas im Google gefunden und zwar, dass ich da folgendes eingeben musste im Modul:

ActiveSheets.Unprotect Password:="TEST" Worksheets("doku").Unprotect Password:="TEST" Worksheets("beleg").Unprotect Password:="TEST"

Aber es will nicht funktionieren, vielleicht gebe ich das an falscher Stelle ein?

Es sind übrigens 2 Module und die sind nicht von mir
"ModulBarcode"
"ModulCode128"
Ich kann auch dann den Code von den Modulen geben, falls es weiterhilft.
 
Naja, mit dem Code entfernst du den Schutz bei den Arbeitsblättern. Das funktioniert bei dir wahrscheinlich deshalb nicht, weil dein Passowrt wohl anders lauten dürfte.

Aber:
Der Sinn des Schutzes ist doch gerade, dass Makros und Veränderungen nicht ausführbar/möglich sind!?
 
Zuletzt bearbeitet:
Ja, Test ist nur ein Beispiel.
Mit dem Schutz soll gewährleistet werden, dass die Formeln in den Zellen nicht verändert werden. Aber das Makro soll weiterhin funktionieren.
Die Datei macht folgendes:
Ich trage im ersten Arbeitsblatt irgendwelche Daten ein. Daraufhin werden zu diesen Daten Barcodes generiert.
Die Daten werden in anderen Arbeitsblättern auch mit übernommen und Barcodes werden somit auch dort in den entsprechenden Zellen generiert.
Sind die Blätter aber geschützt, werden die Daten übernommen, aber keine neuen Barcodes mehr generiert und das soll sich ändern.
PW: SINPRO
' Barcode symbol creation by VBA ' Author: alois zingl ' Version: V1.1 jan 2016 ' Copyright: Free and open-source software ' http://members.chello.at/~easyfilter/barcode.html ' Description: the indention of this library is a short and compact implementation to create barcodes ' of Code 128, Data Matrix, (micro) QR or Aztec symbols so it could be easily adapted for individual requirements. ' The Barcode is drawn as shape in the cell of the Excel sheet. ' The smallest bar code symbol fitting the data is automatically selected, ' but no size optimization for mixed data types in one code is done. ' Functions: ' DataMatrix(text As String, Optional rectangle As Integer) ' QuickResponse(text As String, Optional level As String = "L", Optional version As Integer = 1) ' Aztec(text As String, Optional security As Integer, Optional layers As Integer = 1) ' Code128(text As String) ' Option Explicit ' add description to user defined barcode functions Private Sub Workbook_Open() Worksheets("Auftragsdoku").Unprotect Password:="SINPRO" ReDim arg(0) As String arg(0) = "text to encode" Application.MacroOptions macro:="Code128", Description:="Draw Code 128 barcode", Category:="Barcode", ArgumentDescriptions:=arg Application.MacroOptions macro:="DataMatrix", Description:="Draw DataMatrix barcode", Category:="Barcode", ArgumentDescriptions:=arg ReDim Preserve arg(2) arg(1) = "percentage of checkwords (1..90)" + vbCrLf + "number, optional, default 23%" arg(2) = "minimum number of layers (0-32)" + vbCrLf + "number, optional, default 1" + vbCrLf + "set to 0 for Aztec rune" Application.MacroOptions macro:="Aztec", Description:="Draw Aztec barcode", Category:="Barcode", ArgumentDescriptions:=arg arg(1) = "security level ""LMQH""" + vbCrLf + "low, medium, quartile, high" + vbCrLf + "letter, optional, default L" arg(2) = "minimum version size(-3..40)" + vbCrLf + "number, optional, default 1" + vbCrLf + "MircoQR M1:-3, M2:-2, M3:-1, M4:0" Application.MacroOptions macro:="QRCode", Description:="Draw QR code", Category:="Barcode", ArgumentDescriptions:=arg End Sub ' convert UTF-16 (Windows) to UTF-8 Public Function utf16to8(text As String) As String Dim i As Integer, c As Long utf16to8 = text For i = Len(text) To 1 Step -1 c = AscW(Mid(text, i, 1)) And 65535 If c > 127 Then If c > 4095 Then utf16to8 = Left(utf16to8, i - 1) + Chr(224 + c \ 4096) + Chr(128 + (c \ 64 And 63)) + Chr(128 + (c And 63)) & Mid(utf16to8, i + 1) Else utf16to8 = Left(utf16to8, i - 1) + Chr(192 + c \ 64) + Chr(128 + (c And 63)) & Mid(utf16to8, i + 1) End If End If Next i End Function 'update all barcodes in active sheet Public Sub updateBarcodes() Worksheets("Auftragsdoku").Unprotect Password:="SINPRO" Dim shp As Shape, bc As Variant, str As String On Error Resume Next For Each shp In ActiveSheet.Shapes ' delete all lost barcode shapes If shp.Type = msoAutoShape Then str = LCase(shp.AlternativeText) For Each bc In Array("aztec", "code128", "datamatrix", "qrcode") If Left(str, Len(bc)) = bc Then shp.Title = "" ' force redraw If InStr(LCase(Range(shp.Name).Formula), bc) = 0 Then shp.Delete Exit For End If Next bc End If Next shp Application.CalculateFull ' refresh all barcodes Kanji End Sub ' read/write kanji conversion string from/to file Public Sub Kanji() Worksheets("Auftragsdoku").Unprotect Password:="SINPRO" Dim p As Variant, s As Worksheet, k1 As String, c As Long Const k = "kanji" ' property name For Each s In Application.ThisWorkbook.Worksheets For Each p In s.CustomProperties ' look for kanji conversion string If p.Name = k Then If Len(p.Value) > 10000 Then k1 = p.Value Next p Next s ChDir Application.ThisWorkbook.Path If k1 = "" Then ' not found, get from file p = Application.GetOpenFilename("Excel Files (*.xlsm), *.xlsm", 1, "Read Kanji Conversion String for QRCodes from 'barcode.xlsm'") If p <> False Then Application.ScreenUpdating = False With Workbooks.Open(p, 0, True) For Each s In .Worksheets For Each p In s.CustomProperties ' look for kanji conversion string If p.Name = k Then If Len(p.Value) > 10000 Then k1 = p.Value Next p Next s .Close End With Application.ScreenUpdating = True If Len(k1) < 10000 Or (Len(k1) And 1) Then MsgBox "No Kanji conversion string for QRCodes found in Excel file." For Each s In Application.ThisWorkbook.Worksheets c = 0 For Each p In s.CustomProperties ' look for kanji conversion string If p.Name = k Then p.Value = k1: c = 1 Next p If c = 0 Then s.CustomProperties.Add k, k1 Next s End If End If End Sub
 
Bin kein Excel-Profi, aber mWn. ist entweder das Blatt (schreib)geschützt oder nicht. Eine Unterscheidung, wer bzw. was Schreibzugriff hat oder nicht, ist imho nicht möglich.
 
Was ich dabei mache, ist ein Makro damit zu starten die Excel Liste zu entsperren und am ende lasse ich es wieder im Makro sperren.
 
Das Problem ist, dass das Makro die Liste nicht öffnet. Sperren lassen werde ich dann, wenn das Öffnen funktioniert. Aber es klappt irgendwie nicht, oder ich setze es an falscher Stelle
Folgende Funktionen habe ich schon ausprobiert:
Sheets("Auftragsdoku").Unprotect " SINPRO"
oder
Worksheets(“Auftragsdoku”).Unprotect("SINPRO")
oder
Worksheets("Auftragsdoku").Unprotect Password:="SINPRO"
 
Noch eine Nebenbei-Info zum Thema Excel-"Schutz":
Falls die Excel-Datei verteilt wird, sollte Dir bewusst sein, dass man den Excel-"Schutz" relativ einfach aushebeln/entfernen kann.
Etwas googeln und ein Zip-Programm reichen aus ...
 
So siehts bei mir aus ohne weitere Informationen dazwischen ;-)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$8" Then
Dim WkSh_Q As Worksheet


Set WkSh_Q = ThisWorkbook.Worksheets("NamedesBlattes")
WkSh_Q.Unprotect "password"
WkSh_Q.Protect "password"
WkSh_Q.Range("F8").Select
End If

End Sub
 
Laut Post #3 entfernst du zu beginn der Funktion "Private Sub Workbook_Open()" den Passwortschutz.
D.h., wenn du die Datei oeffnest, sollte der Passwortschutz aufgehoben werden.
Passiert das?

Schon einmal an den Blattschutzeinstellungen etwas geaendert?
Evtl. reicht es ja schon, das "Objekte" bearbeitet werden duerfen, ohne das der Blattschutz deaktiviert werden muss.

Nachtrag:
Alle Schreibweise in Post #6 sind ligitim und fuehren zum gleichen Ergebnis.
Ansonsten sollte tritt idR ein Fehler auftreten, außer er wird an anderer Stelle unterdrueckt.
 
Gummybär schrieb:
So siehts bei mir aus ohne weitere Informationen dazwischen ;-)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$8" Then
Dim WkSh_Q As Worksheet


Set WkSh_Q = ThisWorkbook.Worksheets("NamedesBlattes")
WkSh_Q.Unprotect "password"
WkSh_Q.Protect "password"
WkSh_Q.Range("F8").Select
End If

End Sub
Ich bin leider sehr laienhaft im VBA und kann jetzt nicht ganz nachvollziehen, wie ich das Ganze in meinem Fall übertragen kann..
@Scientist
Ich setz den Code nach "Private Sub Workbook_Open()" und es passiert nichts auch nicht nach dem Öffnen((
 
Kannst du die Datei mit Summy-Daten mal hochladen?

Wenn du die beiden folgenden Makros in deine Datei einfuegst (Tabellenblatt oder extra Modul) und dann ausfuehrst, wird dann der Blattschutz gesetzt bzw. entfernt?
(Vorausgesetzt, Blattbezeichnung und Passwort sind korrekt.)

Code:
Sub blattschutz_setzen()
    ThisWorkbook.Worksheets("Auftragsdoku").Protect Password:="SINPRO"
End Sub

Sub blattschutz_entfernen()
    ThisWorkbook.Worksheets("Auftragsdoku").Unprotect Password:="SINPRO"
End Sub
 
Zurück
Oben