21.05.2019, 13:50 (Dieser Beitrag wurde zuletzt bearbeitet: 21.05.2019, 13:51 von elamigo.)
Guten Tag zusammen,
ich habe folgenden Code welcher beim speichern der Datei abgefragt wird. Nun ist das Ziel von mir, dass das "normale" speichern nicht funktioniert, aber dafür nur "speichern unter", wie bei einer Excel Vorlage. Ich nehme keine Vorlage weil ich andauernd Ändernungen an dem "Dummy" vornehmen muss.
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Antwort = MsgBox("Soll der Dummy wirklich gespeichert werden? Hinweis: Falls der Prozess normal durchlaufen wurden bitte JA drücken", vbYesNo)
If Antwort = vbYes Then MsgBox ("Der Dummy wurde neu gespeichert") End If
If Antwort = vbNo Then MsgBox ("Dummy wurde NICHT gespeichert!") Cancel = True End If
End Sub
Für "speichern unter" nutze ich folgenden Code, der auch die Datei und das wichtigste Tabellenblatt umbennent.
Code:
Private Sub CommandButton1_Click()
Dim dateiname As String Dim tabellenblattname As String
Mein Ziel ist es, dass in der Msgbox sozusagen per VBA "ok" gedrückt wird. Also das wenn ich das Makro zum speichern unter nutze, dass die msgbox erst gar nicht erscheint und er direkt "speichern unter" ausführt. Meine Idee war wenn die msgbox eingeblendet wird, über sendkeys Enter zu "senden", dies klappt allerdings nicht wirklich.
Vielleicht etwas mehr Inhalt zum Prozess der dahintersteckt. Ich bekomme eine Liste mit 1500 Personen (Master), diese Liste soll nach Abteilungen abgeteilt werden und an die Vorgesetzten geschickt werden, die in dieser Liste dann ihre MA graden können. Dies geschicht im Master über das normale filtern, die gefilterten Daten werden dann in ein Dummy kopiert. In diesem Dummy wird dann save as ausgeführt, um die Datei zu bearbeiten und um sie zu bennen. Der neue Dateiname kommt aus der Textbox. Mir geht es darum das während des speichern die msgbox kommt und fragt ob es ok ist das gespeichert wird, da während des Prozesses die Antwort immer ja ist, wäre ein Makro gut, welches diese direkt ausführt. Allerdings soll, wenn wir uns gerade nicht im Prozess befinden, immer beim speichern nach der msgbox gefragt werden.
Ich hoffe es Licht ins Dunkle gebracht zu haben :D
Also es geht im Endeffekt nur darum, dass bei dieser msgbox, nach druck auf save as in der UF, per makro auf "JA" gedrückt wird.
sorry, aber das verstehe ich nicht ganz: was heißt denn "wenn wir uns gerade nicht im Prozess befinden"? Wenn dieser "Prozess" über VBA "erfassbar" ist, dann nimm diesen doch dafür, ob die Msgbox erscheint oder nicht.
Oder probiere das:
Code:
Option Explicit
Declare Function MessageBoxTimeout Lib "user32.dll" Alias "MessageBoxTimeoutA" ( _ ByVal hwnd As Long, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal uType As Long, _ ByVal wLanguageID As Long, _ ByVal lngMilliseconds As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long
Public Sub MsgBoxDelay() Const cmsg As String = "Yes or No? leaving this window for 1 min is the same as clicking Yes." Const cTitle As String = "popup window" Dim retval As Long retval = MessageBoxTimeout(FindWindow(vbNullString, "Title"), cmsg, cTitle, 4, 0, 2000) Debug.Print retval
22.05.2019, 07:43 (Dieser Beitrag wurde zuletzt bearbeitet: 22.05.2019, 08:02 von elamigo.)
Ich versuch das ganze mal in eine Beispieldatei zu basteln :D ich glaub sonst erkläre ich mich ewig So nun mit einer Beispeildatei! Ich hoffe es wird dadurch etwas mehr klar, ich glaube ich habe mich einfach falsch ausgedrückt oder es zu kompliziert gemacht. Ich vermute es ist nur eine CodeZeile, welche ich suche.
Schon mal vielen Dank an alle die es sich genauer anschauen :)
ich hab jetzt nicht in Deine Datei geschaut. Wenn es um Standard-Msgboxen geht, kannst Du die meist mit Application.DisplayAlerts = False unterdrücken und brauchst die nicht mit SendKeys zu bestätigen. Dann generierst Du in Abhängigkeit davon, ob Du im Prozess bist oder nicht, eine eigene MsgBox.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)