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

Makro löscht Makro

Makro löscht Makro
Mark
Hallo zusammen,
bin neu hier im Forum.
Habe eine Frage bezüglich eines "Löschmich" Makros.
Habe ein excel sheet mit mehreren Makros, die auch alle problemlos funktionieren.
Möchte nun mein "Start Makro" löschen um meinen Kollegen den Zugriff auf diese Datei zu ermöglichen.
Start Makro: .xlt öffnet/überschreibt .xls und öffnet 2. Prog welches wiederrum Daten in die .xls schreibt.
Option Explicit
Private Sub Workbook_Open()
Dim s As String
Dim f As Object
Dim myappid
s = "C:\TestDaten\Test.xls"
If workbookIsOpened("Test.xls") Then Exit Sub
If ActiveWorkbook.FullName  s Then
Set f = CreateObject("Scripting.FileSystemObject")
If f.FileExists(s) Then
'        MsgBox "File vorhanden"
If MsgBox("Achtung: Vorhergehende Messung gesichert?" & vbCrLf & _
"Wollen Sie die vorhergehende Messung '" & s & "' überschreiben?", vbOKCancel  _
_
+ vbExclamation, "Hinweis") = vbOK Then
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=s
Application.DisplayAlerts = True
myappid = Shell("C:\programme\Müller\Müller.exe  C:\programme\Müller\Schaltbilder\ _
Test.dsb", vbMaximizedFocus)
Else
MsgBox "Bitte das File '" & s & "' unter anderem Namen sichern!", vbOKOnly +  _
vbInformation
Application.DisplayAlerts = False
ActiveWorkbook.Close False
Application.DisplayAlerts = True
End If
End If
Set f = Nothing
End If
End Sub
Private Function workbookIsOpened(name As String) As Boolean
On Error GoTo workbook_opened
Dim wb As Workbook
Set wb = Workbooks(name)
workbookIsOpened = True
Exit Function
workbook_opened:
workbookIsOpened = False
End Function
(Test.xls - DieseArbeitsmappe (Code)
Folgendes Problem:
Sub Makro_löschen()
Dim FoundFlag As Boolean
Dim Zeilen()
Makroname = "Workbook_Open"
Suchtext = "Sub " & Workbook_Open & "()"
Set VBE = Application.VBE.ActiveCodePane.CodeModule
FoundFlag = False
With VBE
For x = 1 To .CountOfLines
If UCase(.Lines(x, 1)) = UCase(Suchtext) Then FoundFlag = True
If FoundFlag Then
Zähler = Zähler + 1
ReDim Preserve Zeilen(Zähler)
Zeilen(Zähler) = x
If .Lines(x, 1) = "End Sub " Then
.DeleteLines Zeilen(1), UBound(Zeilen)
Exit For
End If
End If
Next x
If Not FoundFlag Then MsgBox "Makro " & Workbook_Open & " nicht gefunden !", vbCritical
End With
End Sub Test.xls - Modul1 ( Code)
Löscht bezw. findet mein Makro nicht
Hat jemand eine Lösung
Danke
AW: Makro löscht Makro
Hajo_Zi
Hallo Mark,
den Zugriff auf das VBA Projerkt hast Du zugelassen.
Frage mich nicht wo, dazu gebe ich keine Auskunft.

AW: Makro löscht Makro
Mark
Ja, der Zugiff auf das Makro ist unter Extras-Makro-Sicherheit-Vertrauenswürdige Quellen-Zugriff auf VB Projekt vertaruen gesetzt.
Gruß Mark
AW: Makro löscht Makro
Josef

Hallo Mark,
sollte das nicht vielleicht so heißen?
Suchtext = "Private Sub  Workbook_Open()"
Und warum ermittelst du nicht einfach den Benutzernamen um die Ausführung des Codes zu steuern?
Dann brauchst du nichts löschen.

« Gruß Sepp »

Anzeige
AW: Makro löscht Makro
Mark
Hallo Sepp,
habe ich versucht,
das Makro wird nicht gefunden.
Gruß Mark
AW: Makro löscht Makro
Mark
Hallo Sepp,
Und warum ermittelst du nicht einfach den Benutzernamen um die Ausführung des Codes zu steuern?
Wie geht das?
AW: Makro löscht Makro
Hajo_Zi
Environ("username")
Gruß Hajo
AW: Makro löscht Makro
Reinhard
Hallo Mark,
Sub tt()
MsgBox Application.UserName 'Excelname
MsgBox Environ("Username")  'Windowsname
End Sub

Gruß
Reinhard
AW: Makro löscht Makro
Mark
Danke Hajo, Reinhard
Username hab ich ,
und nun...
Wie wird der Code gesteuert?
Was passiert wenn das sheet auf einem anderen Rechner läuft?
Username ändert sich dann, oder?
Anzeige
AW: Makro löscht Makro
Hajo_Zi
Hallo Mark,
falls Du nicht angemeldet bist und das Makro ausführst Ja.
Gruß Hajo
AW: Makro löscht Makro
Hajo_Zi
Halo Mark,
das gilt für meinen Vorschlag. Den bei Excel eingetragenen würde ich nicht benutzen.
Gruß Hajo
AW: Makro löscht Makro
Mark
OK, heißt also mein Kollege müsste sich unter meinem Benutzernamen anmelden.
Bzw. der Rechner auf dem das Makro laufen soll muss den gleichen Benutzernamen haben (geht nicht,definitiv(itabteilung)).
Gibt es noch eine andere möglichkeit?
Anzeige
AW: Makro löscht Makro
Hajo_Zi
Hallo Mark,
ich würde mein passwort für das Netzt niemals an einen anderen geben. Du prüfst ja ob es Dein Name ist dann mache die, ist es der von Deinem Kollegen machen das ansonsten diesen Code.
Gruß Hajo
AW: Makro löscht Makro
Mark
Danke Hajo, Reinhard
Username hab ich ,
und nun...
Wie wird der Code gesteuert?
Was passiert wenn das sheet auf einem anderen Rechner läuft?
Username ändert sich dann, oder?
AW: Makro löscht Makro
Mark
Sollte vielleicht erwähnen:
Dieses Sheet wird von mir und einem Kollegen zu Messzwecken benötigt.
Das Sheet habe ich selbst erstellt und mit Formeln und Makros hinterlegt (Was auch problemlos funktioniert).
Nach der Messung wird dieses Shett nun an einige Kollegen (Pi´s) weitergeleitet.
Um diesen Leuten das arbeiten mit der Tabelle zu ermöglichen muss mein erster Code gelöscht werden.
Dann könnten Makros aktiviert werden und das sheet weiter verarbeitet werden (z.B. andere Sprache als Makro danach ausdruck als PDF usw. usw.
Anzeige
AW: Makro löscht Makro
Hajo_Zi
bei Export einer Tabelle wird Open nicht mitkopiert.
Gruß Hajo
AW: Makro löscht Makro
Mark
Entschuldigung habe mich falsch ausgedrückt.
Das Sheet wird per e-mail an einen Kollegen gesendet.
Der dieses dann wiederum öffnet und die Makros aktivieren muss um es weiter zu verarbeiten.
AW: Makro löscht Makro
Hajo_Zi
ein Sheet ist eine Tabelle da sehe ich keinen Unterschied. Du hast nicht geschrieben die Datei. Es Stand immeer Explicit die Tabelle/sheet.
Gruß Hajo
Anzeige
AW: Makro löscht Makro
Mark
Stimmt, die Datei wird auf zwei Rechnern mit Messsoftware genutzt.
Nach beendigung der Messung wird diese Datei zur Weiterverarbeitung an einen PI als e-mail Anhang versendet.
Der PI wiederrum hat nur einen Rechner ohne Messsoftware.
Beim öffnen der Datei könnte er keine Makros aktivieren.(Das Makro Workbook_Open) würde dann gestartet.
Da der PI aber unter "C:\programme\Messsoftware\Dasylab.exe C:\programme\Dasylab 7.00.05d\Schaltbilder\Test.dsb" diese Programme nicht hat, kanner nur die Makros deaktivieren und somit nicht weiter verarbeiten.
AW: Makro löscht Makro
Hajo_Zi
dann ist das Problem also geklärt.
Gruß Hajo
Anzeige
AW: Makro löscht Makro
Reinhard
Hallo Mark,
hier das Forum hängt in letzter Zeit wieder mal.
Wenn du also einen Artikel abschickst so scheint sich nix zu tun. Dem ist aber nicht so, gib Herber
ein bisschen Zeit :-)
Ansonsten wenn du nochmals auf Abschicken klickst haste dann zweimal abgeschickt :-(
Ich weiß nicht was du da mit Makro löschen willst. Grund sätzlich kannst du das Kennwort aus
Excel und aus Windows überprüfen. Ich habe nur meinen PC und kein Netzwerk aber Hajo sagt das
Kennwort aus Excel würde er nicht nehmen. Also wird es wohl dafür Gründe geben die ich nicht kenne ohne jedwede Netzerfahrung.
Weiterhin käönntest du auch für diese Mappe ein Kennwort vergeben was du dann per InputBox
im Workbook_Open Ereignis abfragst. Dieses kennwort müßtest du dann allen Berechtigten
mitteilen.
Nachfolgend zwei Varanten der Abfrage des Win-Kennworts. Sie machen beide das Gleiche.
Unterschied ist in erster Varaiante steht aller Code in Workbook_Open.
Das hat Nachteile, eine lange Prozedur ist schlechter schnell zu lesen, hat nachteile wenn man schnell mal was abändern austesten will.
Die zweite Variante hat dementsprechende Vorteile.
Codes sind nicht getestet.
Gruß
Reinhard
In DieseArbeitsmappe kommt dieser Code:

Option Explicit
Private Sub Workbook_Open()
Dim arrNamen, A As Integer, Vorh As Boolean
arrNamen = Array("abc", "4711", "xyz", "r")
For A = LBound(arrNamen) To UBound(arrNamen)
If arrNamen(A) = Environ("Username") Then
Vorh = True
Exit For
End If
Next A
If Vorh = True Then
' führe diese Codezeilen aus
Else
' führe jene Codezeilen aus
End If
End Sub

ODER dieser Code:

Option Explicit
Private Sub Workbook_Open()
If Vorh = True Then
Call Makro1
Else
Call Makro2
End If
End Sub
Im zweiten Fall kommt dann in ein Standardmodul (Modul1 o.ä.) dieser Code:

Option Explicit
Function Vorh() As Boolean
Dim arrNamen, A As Integer
arrNamen = Array("abc", "4711", "xyz", "r")
For A = LBound(arrNamen) To UBound(arrNamen)
If arrNamen(A) = Environ("Username") Then
Vorh = True
Exit For
End If
Next A
End Function
Sub Makro1()
'diese Codezeilen
End Sub
Sub Makro2()
'jene Codezeilen
End Sub

Anzeige
AW: Makro löscht Makro
Mark
Hallo Hajo ,Reinhard
Habe bereits bemerkt das ich meine Antwort 2 mal abgeschickt habe. (Tschuldigung;-) ) war etwas durcheinander weil keine reaktion im Browser.
Habt vielen Dank für eure Bemühungen
Werde mal die Codes von Reinhard probieren. Code 2 sieht sehr vielversprechend aus.
Somit dürfte alles laufen.
Werde mich auf alle Fälle nochmals gegen Abend melden ob es klappt oder nicht.
Many Thanks
AW: Makro löscht Makro
Mark
Hallo Reinhard,
soo super erfahren in VBA bin ich auch noch nicht,
Function Vorh() As Boolean
Dim arrNamen, A As Integer
arrNamen = Array("abc", "4711", "xyz", "r")
For A = LBound(arrNamen) To UBound(arrNamen)
If arrNamen(A) = Environ("Username") Then
Vorh = True
Exit For
End If
Next A
End Function
Was sind die arrNamen Zeile 2-4?
Wenn ich den Usernamen eingebe funktioniert es auf allen Rechnern?
Oder nur auf meinem?
Makro 1 wäre dann mein "Startmakro" ?
Makro 2 zum löschen des "Startmakros"?
Würde das löschen ubereinen Command Button machen.
Kann man ausführen wenn benötigt.
Danke
Anzeige
AW: Makro löscht Makro
Reinhard
Hallo Mark,
mannomann, du bist ja mit deinem Löschen stur wie ein Panzer. Ich kann das beurteilen, bin
genauso stur, wenn nicht noch schlimmer *grien*
####Was sind die arrNamen Zeile 2-4?####
Die Variable arrNamen steht für ein Array, ein Datenfeld, in dem Fall eindimensional.
In dem Code hat die variable arrNamen vier Datenfelder. Mit dem Index 0 bis 3.
arrNamen(0) hat den Wert "abc"
arrNamen(1) hat den Wert "4711"
arrNamen(2) hat den Wert "xyz"
arrNamen(3) hat den Wert "r"
Die For-Schleife hätte ich in dem Fall auch so schreiben können:
For A = 0 to 3
Das ist aber unpraktisch, z.B. wenn noch ein Name dazukommt. Dann müßte ich das ja im Code auf
For A = 0 to 4
abändern.
In der jetzigen Form ermittel mir LBound() und UBound() automatisch die 0 und die 3. Kommt in der
Klammer in:
arrNamen = Array("abc", "4711", "xyz", "r")
nun dieser fünfte Namen hinzu so berücksichtigt das mein Code automatisch, ist also viel pflegeleichter
als fest zu schreiben 0 To 3.
####Wenn ich den Usernamen eingebe funktioniert es auf allen Rechnern?####
Du brauchst da nix einzugeben. Du schreibst in die klammer von
arrNamen = Array("abc", "4711", "xyz", "r")
alle jeweiligen Win-Benutzernamen deiner berechtigten Kollegen.
Das klappt dann auf allen Rechnern.
Makro 1 wäre dann mein "Startmakro" ?
Makro 2 zum löschen des "Startmakros"?
Du legst fest welcher Code in Makro1 und makro2 steht bzw. was die machen sollen.
Je nachdem ob die benutzer berechtigt sind oder nicht wird mit meinem Code entwerde makeo1 oder makro2 ausgeführt.
Mir ist immer noch nicht klar warum du da löschen willst?
Würde das löschen ubereinen Command Button machen.
Kann man ausführen wenn benötigt.
Natürlich kann man über einen CommandButton einen beliebigen Code ausführen lassen.
Gruß
Reinhard
Anzeige
AW: Makro löscht Makro
Mark
Danke für deine Erklärung,
habe ich auch soweit verstanden.
Da aber meine Kollegen PI´s leider des öfteren wechseln (andere Abteilung usw.) müsste ich meinen Code ewig pflegen.
Mein eigentliches Problem besteht ja darin dass das löschen Makro mein zu löschendes Makro nicht findet.
Ich denke wenn dass "Startmakro" gelöscht ist , lässt sich die Datei ohne Probleme öffnen und alle anderen Makros laufen problemlos weiter.
Funktioniert ja auch wenn ich das Makro per Hand entferne.
Trotzdem vielen Dank für euer Verständniss mit mir.
Gruß Mark
AW: Makro löscht Makro
Josef

Hallo Mark
und warum prüfst du nicht einfach, ob die 'Test.db' auf dem Rechner vorhanden ist?
Wenn ja, Code ausführen sonst eben nichts machen.

« Gruß Sepp »

AW: Makro löscht Makro
Mark
Hallo Reinhard;Sepp;Hajo
Habe mich nun für "auskommentieren" entschieden.
Sub Makro_löschen()
Dim strCode As String
Dim intTMP As Integer
With ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe").CodeModule
For intTMP = 1 To .CountOfLines
If strCode = "" Then
strCode = strCode & "'" & .Lines(intTMP, 1)
Else
strCode = strCode & vbNewLine & "'" & .Lines(intTMP, 1)
End If
Next intTMP
.DeleteLines 1, .CountOfLines
.AddFromString strCode
End With
End Sub
Werde ich noch ein wenig hübsch machen mit einer Sicherheitsabfrage OK / Cancel.
Makro ist noch vorhanden, startet nur nicht mehr.(So soll es sein)
Muss momentan per Hand die ' entfernen wenn das Makro nochmals zum Einsatz kommen sollte (erneute Messung auf Messrechner...).
Frage meinerseits:
Kann ich die ' auch wieder per Makro entfernen ( Kommentar in Code)?
Danke und Gruß Mark
AW: Makro löscht Makro
Hajo_Zi
Hallo Mark,
was ich nicht verstehe, Du schreibst hochkomplizierten Code zum entfernen von Code. Aber kannst keinen einfache If Eviron() oder If Dir() einbauen. Das ist nur meine Meinung. Ich bin raus.
Gruß Hajo
AW: Makro löscht Makro
Mark
Weil ich dann das Makro ständig pflegen muss. Neue Benutzer usw.
Desweiteren ist das ganze über PW geschützt damit kein Unbefugter irgendwelche Codes oder Formeln "verbiegen" kann. OK ganz pfiffige werden auch von einem PW nicht abgeschreckt. Aber der normale User kann es erst mal nicht.
Trotzdem meinen Dank
Gruß Mark
AW: Makro löscht Makro
Hajo_Zi
Hallo mark,
das Makro wolltest Du nur benutzen und falls Du nicht ständig Deinen Namen im Netzt änderst ist kein Änderung notwenndig. Aber das sehe ich bestimmt falsch.
Gruß Hajo
AW: Makro löscht Makro
Reinhard
Hallo Marko,
Sub Modul_Deaktivieren()
Dim strCode As String, intTMP As Integer
With ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe").CodeModule
For intTMP = 1 To .CountOfLines
.ReplaceLine intTMP, "'" & .Lines(intTMP, 1)
Next intTMP
End With
End Sub

Sub Modul_Aktivieren()
Dim strCode As String, intTMP As Integer
With ActiveWorkbook.VBProject.VBComponents("DieseArbeitsmappe").CodeModule
For intTMP = 1 To .CountOfLines
.ReplaceLine intTMP, Mid(.Lines(intTMP, 1), 2)
Next intTMP
End With
End Sub

Gruß
Reinhard
AW: Makro löscht Makro
Mark
Dank an alle,
Reinhard dein Makro funzt problemlos (Supi:-)))
@ Hajo:
Sollte vielleicht erwähnen:
Dieses Sheet wird von mir und einem Kollegen zu Messzwecken benötigt.
Das Sheet habe ich selbst erstellt und mit Formeln und Makros hinterlegt (Was auch problemlos funktioniert).
Nach der Messung wird dieses Shett nun an einige Kollegen (Pi´s) weitergeleitet.
Um diesen Leuten das arbeiten mit der Tabelle zu ermöglichen muss mein erster Code gelöscht werden.
Dann könnten Makros aktiviert werden und das sheet weiter verarbeitet werden (z.B. andere Sprache als Makro danach ausdruck als PDF usw. usw.
Nur zum Verständnis: Mein Kollege und Ich sind die Messtechniker "vor Ort".
Die Vorlage(?.xlt) wird geöffnet / überschreibt mein Datei(?.xls) und startet mein Messprog.. Daten werden automatisch in der ?.xls aufgenommen. Nach beenden der Messung wird die ?.xls unter anderem Namen abgespeichert (Datum_Kunde_usw.xls). Nun kann die Datei per E-Mail an andere Kollegen(Projektingeneur=PI) versendet werden. Das Problem besteht jetzt darin das meine PI´s die .xls zwar öffnen können aber keine Makros aktivieren können ( zur Weiterverarbeitung Sprache(als Makro hinterlegt);etc.). Da ich nun aber dieses Makro (Open) deaktiviere, können alle anderen Makros genutzt werden. Desweiteren gibt mir das _aktivieren Mako (Danke an Reinhard) die Möglichkeit das -OPEN Makro_ wieder zu aktivieren so kann die Datei .xls wieder in das Messgerät eingespielt werden und startet dort auch wieder mein Messprogr. zB. Nachmessung; Messung nach Änderung usw.
Ein dickes Lob an alle , habt mir sehr geholfen
Ich denke der Thread kann dann geschlossen werden.
Have a nice day
Gruß Mark

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige