Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Schutz einfügen und Schließen geht nicht
24.11.2008 13:08:11
Kurt
Guten Tag Zusammen,
ich habe ein Makro für das erstellen einer Datei aus dem Forum etc. mir zusammengestellt.
Ich füge mein VBA Passwortschutz ein, klappt erstaunlicherweise auch.
Nun möchte ich zum Abschluss die Datei schließen geht nicht, Warum ?
Hier mein Makro:

Sub BlattSpeichern()
Dim TBName$, WBName$
Dim tan
tan = ActiveSheet.Name
TBName = InputBox("Blattname:", "Datei erstellen", tan)
If TBName = "" Then Exit Sub
WBName = InputBox("Dateiname übernehmen oder ändern ?", _
"Dateinamen erstellen", tan & "  vom  " & Format(Date, "YYYY.MM.DD") & ".xls")
If WBName = "" Then Exit Sub
Worksheets(TBName).Copy
'--- so jetzt noch ins Verzeichnis speichern -------------
Dim Fs As Object, OrdNam As Variant, Ord As Byte, Pfad As String
Dim DateiNam As String
DateiNam = WBName
On Error Resume Next
OrdNam = Split("C:\Werkstatt\Muster\Teile", "\")
Pfad = OrdNam(0) & "\"
ChDrive Left(OrdNam(0), 1)
For Ord = 1 To UBound(OrdNam)
ChDir Pfad
Set Fs = CreateObject("Scripting.FileSystemObject")
If Not Fs.folderexists(Pfad & OrdNam(Ord)) Then
MkDir OrdNam(Ord)
MsgBox "Der Ordner " & vbLf & vbLf & Pfad & OrdNam(Ord) & _
vbLf & vbLf & " wurde erstellt.                                  "
Else
' MsgBox "Der Ordner " & vbLf & vbLf & Pfad & _
'         OrdNam(Ord) & vbLf & vbLf & " existiert bereits.                 "
End If
Pfad = Pfad & OrdNam(Ord) & "\"
Next Ord
Set Fs = Nothing
MsgBox "Ordner:   " & Pfad & "              ist vorhanden !    " & Chr(13) _
& Chr(13) & "   Datei:  " & "          " & DateiNam & "             " _
& "     wird jetzt gespeichert !    ", vbInformation, " Hinweis !"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Pfad & DateiNam, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False
'----- jetzt schutz setzen --------------
Dim akw As String
akw = ActiveWorkbook.Name
Dim Password As String
Password = "wwpawb"
Dim wb As Workbook, ok As Boolean, s As String
Set wb = Application.Workbooks(akw)
SendKeys "%{F11}^r{Tab}", True
Do While Application.VBE.ActiveVBProject.Filename  wb.FullName
''Cursor im Projekt-Explorer-Fenster auf das nächste Projekt setzen _
bis er auf dem aktuelle Projekt der zu entschützenden Arbeitsmappe steht
SendKeys "{Tab}", True
Loop
If Not ActiveWorkbook.VBProject.Protection Then
' Application.DisplayAlerts = False
' Application.ScreenUpdating = False
SendKeys "%xi"                          'damit Passwort
SendKeys "{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}"
SendKeys "{RIGHT}"
SendKeys "{TAB}"
SendKeys " "                         'für Leertaste
SendKeys "{TAB}"
SendKeys Password
SendKeys "{TAB}"
SendKeys Password
SendKeys "{TAB}"
SendKeys "{Enter}"
SendKeys "%{F11}"
End If
' MsgBox "Der VBA Schutz ist eingefügt !        "
'ActiveWorkbook.Close
End Sub


mfg Kurt P

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Schutz einfügen und Schließen geht nicht
24.11.2008 13:38:25
JogyB
Hi.
Wenn der Code auskommentiert ist, dann geht es natürlich nicht.
Gruss, Jogy
Habe ich im Makro natürlicht nicht auskommentiert
24.11.2008 13:40:00
Kurt
Hallo Jogy,
habe ich natürlich im Makro nicht.
mfg Kurt P
AW: Habe ich im Makro natürlicht nicht auskommentiert
24.11.2008 13:42:12
JogyB
Hi.
Was genau passiert denn, wenn es drin ist?
Gruss, Jogy
dann wird
24.11.2008 14:17:06
Kurt
Hallo Jogy,
dann wird das VBA-Schutz passwort nicht eingesetzt,
mfg Kurt P
AW: dann wird
24.11.2008 16:15:00
JogyB
Hi.
SendKeys ist immer so eine Sache, das funktioniert meistens, machnmal aber auch nicht. Ich hatte bei mir schon den Fall, dass ein Makro mit wesentlich weniger SendKeys-Befehlen mal tagelang (trotz diverser Reboots) nicht lief und danach plötzlich wochenlang ohne Probleme. Teilweise sind es dann irgendwelche Kleinigkeiten, wegen denen SendKeys mal geht und mal nicht.
Vermutlich wird in Deinem Fall der Tastaturpuffer erst nach Ablauf des Makros geleert und somit ist das Workbook dann schon weg, bevor die Sendkeys-Befehle kommen. Erstell doch mal eine Prozedur, die nur das Schliessen erledigt und rufe diese am Ende des Makros mit Application.OnTime zeitverzögert auf.
Gruss, Jogy
Anzeige
AW: dann wird
24.11.2008 16:21:00
Kurt
Hallo Jogy,
wie muß ich den das hinterlegen bzw. ins Makro einsetzen ?
Bei mir kommt Fehlermeldung:

Public Sub Schließen_nach_VBA()
Application.OnTime
ActiveWorkbook.Close
End Sub


mfg Kurt P

AW: dann wird
24.11.2008 16:39:00
JogyB
Hi.

Public Sub Schließen_nach_VBA()
ActiveWorkbook.Close
End Sub
' Und das nach den ganzen SendKeys
Application.OnTime Now + TimeValue("00:00:01"), "Schließen_nach_VBA"


Gruss, Jogy

AW: dann wird
24.11.2008 18:04:00
Kurt
Guten Abend Jogy,
danke für die Hilfe !!!
mfg Kurt P
AW: VBA Schutz einfügen und Schließen geht nicht
24.11.2008 13:44:00
Luschi
Hallo Kurt,
Du willst ja die Arbeitsmappe schließen, bei der Du den Vba-Kennwortschutz gesetzt hast, deshalb so:
wb.Save
wb.Saved = True
wb.Close
Set wb = Nothing
Übrigens habe ich an der Do While-Schleife zum Setzen des Fokus im Vba-Editor 'ne ganze Zeit gebastelt.
Bei Excel 2007 mußte ich gerade jetzt wieder feststellen, daß die SendKey-Befehle nicht immer punktgenau laufen, und es dann nicht zum Setzen/Entfernen des Kennwort-Schutzes kommt.
Gruß von Luschi
aus klein-Paris
Anzeige
Hallo Luschi, leider nicht
24.11.2008 14:20:41
Kurt
Hallo Luschi, leider läuft das Makso immer wieder neu durch !
mfg Kurt P
AW: Hallo Luschi, leider nicht
24.11.2008 16:12:00
Luschi
Hallo Kurt,
so habe ich getestet und klappt:

Sub test1(password As String)
Dim wb As Workbook, ok As Boolean, s As String
Set wb = Application.Workbooks("Mappe3.xls")
SendKeys "%{F11}^r{Tab}", True
'SendKeys "^r{Tab}", True
Do While Application.VBE.ActiveVBProject.Filename  wb.FullName
''Cursor im Projekt-Explorer-Fenster auf das nächste Projekt setzen _
bis er auf dem aktuelle Projekt der zu entschützenden Arbeitsmappe steht
SendKeys "{Tab}", True
Loop
If wb.VBProject.Protection = vbext_pp_none Then     '--> ist wichtig
' Application.DisplayAlerts = False
' Application.ScreenUpdating = False
SendKeys "%xi"
SendKeys "{TAB 9}"
SendKeys "{RIGHT}"
SendKeys "{TAB}"
SendKeys " "
SendKeys "{TAB}"
SendKeys password
SendKeys "{TAB}"
SendKeys password
SendKeys "{TAB}"
SendKeys "{Enter}"
SendKeys "%{F11}", True     '--> ist wichtig
End If
MsgBox "Der VBA Schutz ist eingefügt !"
wb.Save
wb.Saved = True
wb.Close
Set wb = Nothing
ThisWorkbook.Activate
End Sub
Sub test2()
test1 "bla blabla"
End Sub

Gruß von Luschi
aus klein-Paris

Anzeige
AW: Hallo Luschi, leider nicht
24.11.2008 16:32:14
Kurt
Hallo Luschi,
mußte noch ändern, klappt so.
Habe ich das RICHTIG ? geändert ?
'----- jetzt schutz setzen --------------
Dim akw As String
akw = ActiveWorkbook.Name
' MsgBox akw
Dim Password As String
Password = "wwpawb"
Dim wb As Workbook, ok As Boolean, s As String
'Set wb = Application.Workbooks("Mappe3.xls")
Set wb = Application.Workbooks(akw)
SendKeys "%{F11}^r{Tab}", True
'SendKeys "^r{Tab}", True
Do While Application.VBE.ActiveVBProject.Filename <> wb.FullName
''Cursor im Projekt-Explorer-Fenster auf das nächste Projekt setzen _
bis er auf dem aktuelle Projekt der zu entschützenden Arbeitsmappe steht
SendKeys "{Tab}", True
Loop
Dim vbext_pp_none ' mußte ich reinsetzen
If wb.VBProject.Protection = vbext_pp_none Then '--> ist wichtig
' Application.DisplayAlerts = False
' Application.ScreenUpdating = False
SendKeys "%xi"
SendKeys "{TAB 9}"
SendKeys "{RIGHT}"
SendKeys "{TAB}"
SendKeys " "
SendKeys "{TAB}"
SendKeys Password
SendKeys "{TAB}"
SendKeys Password
SendKeys "{TAB}"
SendKeys "{Enter}"
SendKeys "%{F11}", True '--> ist wichtig
End If
MsgBox "Der VBA Schutz ist eingefügt !"
wb.Save
wb.Saved = True
wb.Close
Set wb = Nothing
ThisWorkbook.Activate
mfg Kurt P
Anzeige
AW: Hallo Luschi, leider nicht
24.11.2008 17:46:00
Luschi
Hallo Kurt,
ja so sollte es auch laufen. Weiß bloß nicht, wie Du das Makro anschubst, da ja dieser Vba-Code nicht in der aktiven Arbeitsmappe steht.
Durch die Verwendung der Variablen 'vbext_pp_none' muß folgender Verweis in der AM mit dem Vba-Code gesetzt sein: Microsoft Visual Basic for Application Extensibility 5.3
Wie gesagt, der SendKeys-Befehl ist sehr unzuverlässig. Solange man von der ungeschützten Datei den Schutz setzen will, funktioniert es noch sehr schön. Sollte dann irgendwann der Wunsch entstehen, per Vba eine kennwortgeschützte Datei zu entsperren , dann wird es krischisch und ist nur noch per Addin zu lösen. Leider macht hier Excel 2007 Probleme mit dem SendKeys-Befehl und es läuft nicht immer korrekt.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Hallo Luschi, leider nicht -)
24.11.2008 18:06:59
Kurt
Hallo Luschi,
was ist den AM ?
Danke für die Unterstützung, es haut auf jeden Fall hin !
mfg Kurt P
AW: Hallo Luschi, leider nicht -)
25.11.2008 08:58:05
Luschi
Hallo Kurt,
AM ist die Abkürzung für Arbeitsmappe (also für die xls-Datei).
Gruß von Luschi
aus klein-Paris

305 Forumthreads zu ähnlichen Themen


Hallo Hans,
wenn ich die URLs richtig interpretiere, haben wir im Forum soeben die Zahl von 1 Million Beiträgen überschritten.
Herzlichen Glückwunsch zu dem Erfolg Deines "Babys"!
Gruß
Martin
Anzeige

Hallo zusammen!
Ich habe da als blutiger Anfänger in VBA zwei Fragen:
1.) Wie kann ich in meiner Tabelle in jeder zweiten Spalte 4 leere Spalten einfügen lassen?
2.) Dann möchte ich unter den Inhalt der ersten fünf Spalten (A-E) den Inhalt der zweiten 5 Spalten (F-J) usw. In der grö...

Guten Morgen!
Ich hätte folgendes Problem: Ich erhalte automatisiert Exceltabellen, bei denen nicht alle Zellen einer Zeile gefüllt werden, wenn dort der Inhalt einer darüberliegenden Zeile stehen sollte. Zur Weiterverarbeitung muss ich aber diese Zellen mit den dazugehörigen Werten füllen....
Anzeige

Hallo zusammen,
ich habe eine lange Liste, in der in einer Spalte Daten stehen, wo ab und zu vorangehende Nullen nötig sind (mal eine - mal 2...etc.) - und manchmal auch keine.
Wie kann ich diese Zellen formatieren, das die vorangehenden "Nullen" nicht automatisch weggelassen werden?

Hallo Excel-Profis
ich habe folgenden Code in ein Makro eingebaut:
'Drucken mit Vorschau
Application.ActivePrinter = "\\dataserv\HP LaserJet 5L AV auf Ne05:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Preview:=True, Collate:= _
True
Hier wird der Standard-Drucker an...

Hallo,
Ich brauche dringend Eure Hilfe. Unter https://www.herber.de/bbs/user/54533.xls findet Ihr eine Mappe, in welcher in Spalte A
1 für "Kaufen"
0 für " "
-1 für "Verkaufen"
steht. IN SPALTE B SIND BISHER NUR MANUELL ERSTELLTE BEISPIELEINTRÄGE ENTHALTEN, DAMIT ERSICHTLIC...
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige