Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Messagebox-Knöpfe per VBA betätigen
#1
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


Sheets("Master").Shapes("CommandButton1").Delete
Sheets("Master").OLEObjects("CommandButton2").Object.Enabled = True

dateiname = TextBox2.Text
tabellenblattname = TextBox1.Text
       
Sheets("Master").Name = tabellenblattname

ActiveWorkbook.SaveAs Filename:="\\C\XXX\XXXXX\" & dateiname

Unload UserForm1


End Sub
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.
Code:
SendKeys "{ENTER}"

Hat jemand eine Idee?
Antworten Top
#2
Hallo elamigo,

Zitat:und er direkt "speichern unter" ausführt

mag sein, daß ich da was falsch verstanden habe, aber wie behandelst Du den Fall,
daß bei Deiner Konstellation der Dateiname bereits besteht?

Als Lösung dafür würde mir spontan einfallen, einen Index hochzählen zu lassen
oder Datum und Uhrzeit im Dateinamen mit aufzunehmen.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#3
Hi Peter,

Danke für deine Antwort.

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.
Antworten Top
#4
Hallo elamigo,

also, ... und eine Beispieldatei zum Testen hättest Du auch?  :19:
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#5
Hi,

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
   
'    If retval <> 7 Then
'        Call MethodFoo
'    End If

End Sub
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antworten Top
#6
Ich versuch das ganze mal in eine Beispieldatei zu basteln :D
ich glaub sonst erkläre ich mich ewig  Undecided

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 :)


Angehängte Dateien
.xlsm   Clever Excel forum.xlsm (Größe: 53,74 KB / Downloads: 7)
Antworten Top
#7
Hallöchen,

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)
Antworten Top
#8
Für den Fall hier kann man besser EnableEvents auf False setzen, dann wird Workbook_BeforeSave gar nicht ausgelöst.
Antworten Top
#9
und warum hilft nun nicht #5?
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antworten Top
#10
Hallöchen,

Zitat:und warum hilft nun nicht #5?

ob das hilft oder nicht wissen wir ja nicht Sad

Nur, falls die unerwünschte Meldung eine Standardmeldung von Excel wäre, dann gäb es damit eine weitere …



Hier noch ein kleiner Tipp ohne API:

Code:
Sub msg()
Dim retCode
retCode = CreateObject("WScript.Shell").Popup("Dr?ck mich oder dr?ck mich nicht", 7, "Nun mach schon ...", 36)
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste