37414
Jan 23, 2015, updated at Jan 28, 2015 (UTC)
20941
21
0
Das Makro wurde nicht gefunden oder wurde deaktiviert wegen Ihrer Makro Schutzeinstellungen
In einem anderen Thread habe ich mit Eurer Hilfe ein Makro erstellt, welches grds. auch gut funktioniert.
Heute habe ich es an 3 Arbeitsplätzen installiert, indem ich den Code einfach in unserem Word 2000 unter "Extras / Makros "...bearbeiten" einkopiert habe.
Bisher ging das meist problemlos.
An einem Arbeitsplatz jedoch erhalte ich folgende Fehlermeldung:
"Das Makro wurde nicht gefunden oder wurde deaktiviert wegen Ihrer Makro Schutzeinstellungen"
Mir fiel dort auf, dass es im VBA-Editor unter "Normal / Module" zwei verschiedene Einträge gibt, die in jeweils einem eigenen Fenster erscheinen... nämlich einmal "NewMacros" und einmal "NewMacros1".
Ich habe dann den gesamten Makro-Code ins andere Fenster kopiert und aus dem ersten Fenster gelöscht.
Mit meinem Test-Dokument (einer Vorlage.dot) lief dann alles korrekt.
Nun wollte der Mitarbeiter jedoch eine andere Word-Vorlage nutzen und erhielt dann die obige Fehlermeldung.
Woran kann das liegen - und wie behebe ich das Problem?
Danke und schöne Grüße,
imebro
Heute habe ich es an 3 Arbeitsplätzen installiert, indem ich den Code einfach in unserem Word 2000 unter "Extras / Makros "...bearbeiten" einkopiert habe.
Bisher ging das meist problemlos.
An einem Arbeitsplatz jedoch erhalte ich folgende Fehlermeldung:
"Das Makro wurde nicht gefunden oder wurde deaktiviert wegen Ihrer Makro Schutzeinstellungen"
Mir fiel dort auf, dass es im VBA-Editor unter "Normal / Module" zwei verschiedene Einträge gibt, die in jeweils einem eigenen Fenster erscheinen... nämlich einmal "NewMacros" und einmal "NewMacros1".
Ich habe dann den gesamten Makro-Code ins andere Fenster kopiert und aus dem ersten Fenster gelöscht.
Mit meinem Test-Dokument (einer Vorlage.dot) lief dann alles korrekt.
Nun wollte der Mitarbeiter jedoch eine andere Word-Vorlage nutzen und erhielt dann die obige Fehlermeldung.
Woran kann das liegen - und wie behebe ich das Problem?
Danke und schöne Grüße,
imebro
Please also mark the comments that contributed to the solution of the article
Content-Key: 260925
Url: https://administrator.de/contentid/260925
Printed on: April 19, 2024 at 02:04 o'clock
21 Comments
Latest comment
Moin,
entweder die Makro-Sicherheitseinstellungen auf Niedrig stellen Extras -> Makros -> Sicherheitseinstellungen oder das Makro-Projekt im VBA Editor mit einer selbst erstellten digitalen Signatur versehen.
Gruß jodel32
entweder die Makro-Sicherheitseinstellungen auf Niedrig stellen Extras -> Makros -> Sicherheitseinstellungen oder das Makro-Projekt im VBA Editor mit einer selbst erstellten digitalen Signatur versehen.
Gruß jodel32
Da stimme ich @114757 zu. Entweder Makrosicherheitseinstellungen auf Niedrig stellen oder digital signieren:
http://blog.didierstevens.com/2009/01/05/howto-add-a-digital-signature- ...
Grüße Uwe
http://blog.didierstevens.com/2009/01/05/howto-add-a-digital-signature- ...
Grüße Uwe
Das Projekt unter Normal ist die Standardvorlage von Word (normal.dot). Wenn du dort also dein Makro reinpackst ist es in jedem neuen Dokument das in Word auf dieser Vorlage erstellt wird verfügbar.
Dann gibt es noch ein Projekt für das aktuelle Dokument das auf deiner Vorlage basierend neu angelegt wurde und das Projekt der Vorlage ansich.
Wenn man Vorlagen anpassen will öffnet man sie im Explorer nicht mit einem Doppelklick sondern mit Rechtsklick > Öffnen (der zweite Eintrag unter dem Standard). Damit wird dann nicht ein neues Dokument auf Basis dieser Vorlage erstellt sondern die Vorlage selber geöffnet !! Das ist wichtig !
Zum Thema Signatur, das Feature muss im Office-Setup ausgewählt worden sein, damit du eine Signatur erstellen kannst. Sie ist aber nicht nötig wenn du die Sicherheitseintellungem auf Niedrig gestellt hast.
Also das Makro in das Vorlagen-Projekt kopieren und dann läuft das ! Bei dir scheint das das Projekt TemplateProject zu sein.
Aber bitte wie geschrieben überprüfen wie die die Vorlage öffnest!! mit Doppelklick änderst du nicht die Vorlage sondern erstellst daraus wie schon gesagt ein neues Dokument.
Frage: Wie und womit lässt du dein Makro starten? Das ist auch nicht ganz unwichtig!
Grüße Uwe
Dann gibt es noch ein Projekt für das aktuelle Dokument das auf deiner Vorlage basierend neu angelegt wurde und das Projekt der Vorlage ansich.
Wenn man Vorlagen anpassen will öffnet man sie im Explorer nicht mit einem Doppelklick sondern mit Rechtsklick > Öffnen (der zweite Eintrag unter dem Standard). Damit wird dann nicht ein neues Dokument auf Basis dieser Vorlage erstellt sondern die Vorlage selber geöffnet !! Das ist wichtig !
Zum Thema Signatur, das Feature muss im Office-Setup ausgewählt worden sein, damit du eine Signatur erstellen kannst. Sie ist aber nicht nötig wenn du die Sicherheitseintellungem auf Niedrig gestellt hast.
Also das Makro in das Vorlagen-Projekt kopieren und dann läuft das ! Bei dir scheint das das Projekt TemplateProject zu sein.
Aber bitte wie geschrieben überprüfen wie die die Vorlage öffnest!! mit Doppelklick änderst du nicht die Vorlage sondern erstellst daraus wie schon gesagt ein neues Dokument.
Frage: Wie und womit lässt du dein Makro starten? Das ist auch nicht ganz unwichtig!
Grüße Uwe
OK.
Dann mach dir am besten ein sogenanntes Add-In Dokument welches die Makros beinhaltet, und gebe dieses unter Addins > Vorlagen auf den jeweiligen Rechnern an:
https://support.office.com/de-ch/article/Laden-oder-Entladen-einer-Dokum ...
Dann brauchst du den Code auch nicht bei jedem Client hineinkopieren, sondern hast eine Zentrale Vorlage. Wenn mal Änderungen nötig sind, ist das auch wesentlich einfacher zu warten, da die Änderung zentral geschehen kann.
Dann mach dir am besten ein sogenanntes Add-In Dokument welches die Makros beinhaltet, und gebe dieses unter Addins > Vorlagen auf den jeweiligen Rechnern an:
https://support.office.com/de-ch/article/Laden-oder-Entladen-einer-Dokum ...
Dann brauchst du den Code auch nicht bei jedem Client hineinkopieren, sondern hast eine Zentrale Vorlage. Wenn mal Änderungen nötig sind, ist das auch wesentlich einfacher zu warten, da die Änderung zentral geschehen kann.
Von daher wird es nicht gehen, wenn alle auf die gleichen Makros zugreifen... es wird nur so gehen, dass jeder seine eigenen Makros nutzen kann.
Quatsch mit Soße. Grafiken kann man auch an Zentraler Stelle ablegen oder für den Namen oder den Pfad Variablen wie den aktuellen Usernamen heranziehen !! Das ist allemal besser als so ein pro User misst den du da baust. Ebenso die Daten unter der Überschrift lassen sich in einer zentralen Textdatei ablegen die man dann anhand des Usernamens filtert und die jeweiligen Textstellen ausgibt.So wie du das machst ist das absolut unüblich und du hast wie @colinardo schon sagt erheblichen Aufwand wenn mal Änderungen anstehen...so ist das absoluter Murks, sorry.
Das wird dir hier jeder bestätigen...
Gruß jodel32
P.s. Und wenn du es unbedingt so machen willst kannst du ja für jeden Otto eine angepasste Vorlage erstellen und diese unter Addins einbinden.
Ich nehme an, dass ich die Variable im Script einfach mit %USERNAME% angeben kann für die Fotos, welche dann auf dem jeweiligen Desktop immer den gleichen Namen haben.
Nope, machst du so:set objShell = CreateObject("wscript.shell")
strUserprofile = objShell.ExpandEnvironmentStrings("%userprofile%")
strImagePath = strUserprofile & "\Desktop\unterschrift.jpg"
Zitat von @37414:
Bei der Textdatei mit den Filterungsmöglichkeiten für die einzelnen Mitarbeiter bräuchte ich dann nochmal Eure
Hilfe.
Kein Problem, hier ein Beispiel für das Auslesen aus einer Datei die bspw. so aufgebaut ist:Bei der Textdatei mit den Filterungsmöglichkeiten für die einzelnen Mitarbeiter bräuchte ich dann nochmal Eure
Hilfe.
mmustermann;Zusatztext1;Zusatztext2
smeier;Zusatztext1;Zusatztext2
Dim objShell,fso,regex,matches,strText1,strText2
'Pfad zur Textdatei
Const FILEPATH = "\\Server\Share\daten.txt"
'Objekte
Set objShell = CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set regex = CreateObject("vbscript.regexp")
'aktueller angemeldeter User
strUsername = objShell.ExpandEnvironmentStrings("%username%")
'Regex Settings
regex.Global = False: regex.IgnoreCase = True: regex.MultiLine = True
'Regex Pattern für Zeilen (in dem Fall sind es drei Spalten mit Semikolon getrennt Spalte1=Username / Spalte2=Zusatztext1 / Spalte3=Zusatztext2)
regex.Pattern = "^" & strUsername & ";(.*);(.*)"
'Regex auf Inhalt der Textdatei anwenden (Usernamen suchen)
Set matches = regex.Execute(fso.OpenTextFile(FILEPATH,1).ReadAll())
'Wurde ein Treffer gefunden setze die Variablen
If matches.count > 0 Then
strText1 = matches(0).Submatches(0)
strText2 = matches(0).Submatches(1)
Else 'es wurde kein passender User gefunden, in diesem Fall setze die Werte der Variablen z.B. auf Defaultwerte
strText1 = ""
strText2 = ""
End If
MsgBox strText1 & " / " & strText2
Set objShell = Nothing
Set fso = Nothing
Set regex = Nothing
Zitat von @37414:
Würde das auch mit einer Druckerbezeichnung gehen?
Wenn z.B. der Drucker des einen Mitarbeiters"MV_Schmitz_Blanko" heißen würde und der des anderen
"MV_Müller_Blanko"... könnte man dann z.B. im Script einfach "MV_%username%_Blanko" angeben?
Das geht nach dem Schema von oben so:Würde das auch mit einer Druckerbezeichnung gehen?
Wenn z.B. der Drucker des einen Mitarbeiters"MV_Schmitz_Blanko" heißen würde und der des anderen
"MV_Müller_Blanko"... könnte man dann z.B. im Script einfach "MV_%username%_Blanko" angeben?
set objShell = CreateObject("wscript.shell")
strUsername = objShell.ExpandEnvironmentStrings("%username%")
strPrintername = "MV_" & strUsername & "_Blanko"
Zitat von @37414:
Hmmm... hoffe, ich habe das jetzt wenigstens annähernd richtig verstanden
Ja soweit hast du das richtig interpretiert. Damit das hier jetzt nicht wieder so ein ellenlanger Thread wie letztes mal wird, und wir einen VBA Kurs machen müssen , anhand deines Codes aus dem letzten Thread, das ganze mal zusammengesetzt:Hmmm... hoffe, ich habe das jetzt wenigstens annähernd richtig verstanden
Sub Foto_und_Druck()
'
Dim img As InlineShape, posImage As Range, posAbteilung As Range, posImAuftrag As Range
Dim objShell As Object,fso As Object,regex As Object,matches,strText1 As String,strText2 As String
'Pfad zur Textdatei
Const FILEPATH = "S:\Daten_MV\daten.txt"
'Objekte
Set objShell = CreateObject("Wscript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set regex = CreateObject("vbscript.regexp")
strUsername = objShell.ExpandEnvironmentStrings("%username%")
strUserprofile = objShell.ExpandEnvironmentStrings("%userprofile%")
strImagePath = strUserprofile & "\Desktop\Unterschrift.jpg"
'Druckername
strPrintername = "MV_" & strUsername & "_Blanko"
'Regex Settings
regex.Global = False: regex.IgnoreCase = True: regex.MultiLine = True
'Regex Pattern für Zeilen
regex.Pattern = "^" & strUsername & ";(.*);(.*)"
'Regex auf Inhalt der Textdatei anwenden (Usernamen suchen)
Set matches = regex.Execute(fso.OpenTextFile(FILEPATH,1).ReadAll())
'Wurde ein Treffer gefunden setze die Variablen
If matches.count > 0 Then
strText1 = matches(0).Submatches(0)
strText2 = matches(0).Submatches(1)
Else 'es wurde kein passender User gefunden, in diesem Fall setze die Werte der Variablen z.B. auf Defaultwerte
strText1 = ""
strText2 = ""
End If
Selection.GoTo wdGoToPage, wdGoToFirst
With ActiveDocument.Content.Find
.Text = "Mit freundlichen Grüßen"
.Forward = True
.Wrap = wdFindContinue
.MatchWildcards = True
.Execute
If .Found Then
.Parent.InsertParagraphAfter
.Parent.InsertParagraphAfter
.Parent.InsertParagraphAfter
.Parent.InsertParagraphAfter
Set posImage = .Parent.GoTo(wdGoToLine, wdGoToNext, 1)
posImage.ParagraphFormat.LineSpacingRule = wdLineSpaceSingle
Set img = posImage.InlineShapes.AddPicture(strImagePath)
Set posImAuftrag = posImage.GoTo(wdGoToLine, wdGoToNext, 1)
With posImAuftrag
.End = .Paragraphs(1).Range.End
.Font.Name = "Arial"
.Font.Size = 11
.Text = strText1
End With
Set posAbteilung = posImAuftrag.GoTo(wdGoToLine, wdGoToNext, 1)
With posAbteilung
.End = .Paragraphs(1).Range.End
.Font.Name = "Arial"
.Font.Size = 9
.Text = strText2
End With
End If
End With
Set objShell = Nothing
Set fso = Nothing
Set regex = Nothing
Call drucken
End Sub
Grüße Uwe
Zitat von @37414:
Mit "strText1" und "strText2" werden i. A. und die Dienstbezeichnung eingesetzt.
Ja in diesen Variablen sind die jeweiligen Texte des Mitarbeiters enthaltenMit "strText1" und "strText2" werden i. A. und die Dienstbezeichnung eingesetzt.
Diese Angaben, sowie die Namen hatte ich ja in meinem obigen Vorschlag so in die Textdatei "daten.txt" eingetragen:
genauIch kapiere dabei nicht, wie die Namen aufgespürt werden?
Die werden mit Regular Expressions extrahiert (das geht fixer als Zeile für Zeile zu überprüfen ob ein User vorhanden ist oder nicht):Folgende Zeile definiert einen RegEx Pattern mit dem die Textdatei nachher überprüft wird
regex.Pattern = "^" & strUsername & ";(.*);(.*)"
Die Suche wird dann hier auf den Inhalt der Textdatei angewendet:
Set matches = regex.Execute(fso.OpenTextFile(FILEPATH,1).ReadAll())
strText1 = matches(0).Submatches(0)
strText2 = matches(0).Submatches(1)
Grüße Uwe