Da ich eine Befragung durchführe, habe ich eine Exceldatei(Befragung.xls) entworfen. Wenn man sie anklickt, so startet sie sofort ihre befragung (Mit meinem ersten Formular
Private Sub Worbook_Open()
Hallo.show
End_Sub
)
wenn die befragung vorbei ist, schließt sich auch excel mit der befragung.
Ich muss diese befragung ca. 100 mal machen und habe mir auch schon eine auswertung überlegt. Alle Befragung.xls sind in einem Ordner und mit meinem Makro rufe ich sie nacheinander auf. Soweit funktioniert das auch, aber wenn ich die erste datei Befragung.xls öffne vom VBA-Programm, so startet die befragung auch bei mir und das für 100 dateien.
Gibt es eine Möglichkeit, dass Private Sub Workbook_open() nicht ausgeführt wird?
war da nicht mal was mit „Umschalt-Taste“ drücken beim öffnen der Datei und Makros werden nicht ausgeführt?
LG Tobias
PS: zur Not gibts irgendwo eine Api-Funktion mit der man den Nutzer auslesen kann. Dann könnte man ne If-Abfrage starten ob du das bist - dann soll er die UserForm nicht starten.
__
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Ich muss diese befragung ca. 100 mal machen und habe mir auch
schon eine auswertung überlegt. Alle Befragung.xls sind in
einem Ordner und mit meinem Makro rufe ich sie nacheinander
auf. Soweit funktioniert das auch, aber wenn ich die erste
datei Befragung.xls öffne vom VBA-Programm, so startet die
befragung auch bei mir und das für 100 dateien.
Gibt es eine Möglichkeit, dass Private Sub Workbook_open()
nicht ausgeführt wird?
Hi Wischnor,
spontan fallen mir dazu drei Dinge ein.
a) du schreibst in deine personl.xls in tabelle1!A! den Wert 4711 rein. In Private Sub Workbook_open() der Datei prüfst du ab ob es die Mappe personl.xls überhaupt gibt und ob da in abelle1!A1 der Wert 4711 steht, wenn beides Ja, Exit Sub.
b) Du ersetzt „Workbook_open()“ durch Auto_Open(), MS sagt zum Open-Befehl (du öffnest ja wohl die 100 Dateinen per Open-Befehl):
Falls die zu öffnende Arbeitsmappe Auto_öffnen-Makros enthält, werden diese nicht ausgeführt, wenn Sie die Datei mit Visual Basic öffnen. Sollen Auto_öffnen-Makros dennoch ausgeführt werden, verwenden Sie die RunAutoMacros-Methode.
c) Mit alten Excel4Makroanweisungen kannst du sowohl in Excel aber auch in Excel-Vba einzelne Zellen einer geschlossenen Datei auslesen, daher spielt es da keinerlei Rolle ob die Datei Makros hat, da sie nicht geöffnet wird.
(Natürlich wird die datei geöffnet, geht ja nicht anders um was zu auszulesen, aber das spielt sich tiefer im Zwiebelmodell ab als dort „oben“ wo Excel ist, für Excel wird sie nicht geöffnet.
Ich muss diese befragung ca. 100 mal machen und habe mir auch
schon eine auswertung überlegt. Alle Befragung.xls sind in
einem Ordner und mit meinem Makro rufe ich sie nacheinander
auf. Soweit funktioniert das auch, aber wenn ich die erste
datei Befragung.xls öffne vom VBA-Programm, so startet die
befragung auch bei mir und das für 100 dateien.
Gibt es eine Möglichkeit, dass Private Sub Workbook_open()
nicht ausgeführt wird?
Wenn Du die Dateien per VBA öffnest könntest Du IMO die Ereignisse deaktivieren und dann erst die einzelnen Mappen öffnen:
Application.EnableEvents = False
'Deine Mappen öffnen und bearbeiten
Application.EnableEvents = True
Oder aber Du beziehst die nur mit reinen Formeln auf die Inhalte der einzelnen Mappen; die Formeln kannst Du mit VBA in die Zellen der aktiven Mappe schreiben und dann durch die Werte ersetzen.
Allenfalls wäre auch eine direkte Abfrage auf die Daten denkbar, die Du dann jeweils aktualisierst und einen neuen Namen als Quell übergibst. Aus dem Bereich der Abfrage holst Du dann deine gewünschen Daten.
Mit freundlichen Grüssen
Thomas Ramel
–
MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-3]
@Tobi@s: Soll ich die ganze Zeit die Umschalttaste gedrückt
halten?
Hi Wischnor,
IMHO:
„In my humble/honest opinion…“ - „Meiner bescheidenen/ehrlichen Meinung nach…“
IMO:
„In my opinion…“ - „Meiner Meinung nach…“
Der Code soll ja auf allen PCs loslaufen nur bei deinem PC nicht, an der 4711 könnte er erkennen daß es dein Rechner ist.
Kannst es auch so lösen:
Private Sub Workbook_Open()
If UCase(Application.UserName) = „WISCHNOR“ Then Exit Sub
’
'weiterer Code
’
End Sub
Zur Umschalttaste, aus der Hilfe:
Starten von Microsoft Excel ohne Ausführung automatischer Makros
Automatische Makros, wie z. B. Auto_Aktivieren, werden beim Start von Excel ausgeführt. Weitere Informationen zu diesen Makros erhalten Sie unter Hilfe zu Visual Basic.
Wenn Makros nicht automatisch ausgeführt werden sollen, halten Sie die UMSCHALTTASTE gedrückt, während Sie Excel starten.
Anmerkung Wenn Sie Excel über die Office Shortcut-Leiste starten, klicken Sie zuerst auf die Schaltfläche Microsoft Excel auf der Office Shortcut-Leiste und halten dann sofort die UMSCHALTTASTE gedrückt, während Excel gestartet wird.
Hey, ich weiss nicht wo ich Application.EnableEvents = False setzten muss.
Ich muss doch wenn ich die Datei öffnen will, vorher in meinem Quellcode Application.EnableEvents = False setzen, aber auf die zu öffnene Datei, richtig?
Danke für deine Hilfe.
Mfg Wischnor
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Auf die eigentlichen Vorschläge gehst du aber leider nicht ein
hat dich die Abkürzung dermassen geschockt…?
Hey, ich weiss nicht wo ich Application.EnableEvents = False
setzten muss.
Ich muss doch wenn ich die Datei öffnen will, vorher in meinem
Quellcode Application.EnableEvents = False setzen, aber auf
die zu öffnene Datei, richtig?
Ja, das ist korrekt - aber lass dir doch die Informationen nicht wie Würmer aus der Nase ziehen, wenn du möchtest, dass wir dich konkret unterstützen…
Du sagtest, dass Du einen Code hast, der die Mappen automatisiert aufruft - richtig? Wenn Du uns diesen Code zeigst, könnten wir die exakte Stelle benennen, an der die Zeile ingefügt werden muss.
Mangels Code daher die prinzipielle Darstellung:
Sub DeinCode()
Application.EnableEvents = False
'Dein Code zum Öffnen der einzelnen Dateien
Application.EnableEvents = True
End Sub
Public Sub FileReader()
Dim fso
Set fso = CreateObject(„Scripting.FileSystemObject“)
Dim opendFile As Workbook
Dim i As Integer
i = 1
Set objFolder = fso.GetFolder(„c:\excel“)
For Each file In objFolder.Files
Set opendFile = Workbooks.Open(file)
opendFile.Sheets(„Sheet1“).Columns(2).Copy Destination:=ThisWorkbook.Sheets(„Sheet1“).Columns(i)
i = i + 1
opendFile.Close
Next
End Sub
___________________________________________
Public Sub FileReader()
Dim fso As Object, opendFile As Workbook, i As Integer, file, objFolder
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder("c:\excel")
Application.ScreenUpdating = False
For Each file In objFolder.Files
i = i + 1
Set opendFile = Workbooks.Open(file)
opendFile.Sheets("Sheet1").Columns(2).Copy Destination:=ThisWorkbook.Sheets("Sheet1").Columns(i)
opendFile.Close
Next file
Application.ScreenUpdating = True
End Sub