Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1556to1560
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

Display Alert

Display Alert
11.05.2017 09:20:46
N_N
Hallo Zusammen,
ich hoffe es kann mir hier jemand helfen. Ich habe ein Code in VBA geschrieben, womit ich verschiedene Berechnungen durchführe und am Ende ein Output erzeugt wird. Bevor die Berechnung startet, muss man in einer Userform angeben, wo der Output gespeichert werden soll. Ist der Dateiname am Speicherort bereits vorhanden, aber die Datei mit dem gleichen Namen nicht offen, hat das Programm die Datei einfach überspeichert.
Deshalb habe folgendes eingefügt:
Application.DisplayAlerts = True
ActiveWorkbook.SaveAs Speichername
Application.DisplayAlerts = False
Nun kommt die Meldung, dass der Name bereits vorhanden ist und ob man die Datei überspeichern möchte. Ich brauche nun eine If-Bedingung für den Fall, dass man "Nein" wählt. Dann soll eine Inputbox einen neuen Speichernamen abfragen. Leider weiß ich nicht, wie ich diesen DisplayAlert "ansprechen" kann.
Ich freue mich über jeden Tipp.
Danke und viele Grüße
N_N

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Display Alert
11.05.2017 09:59:45
UweD
Hallo
DisplayAlerts ist normal standartmäßig true.
Deshalb brauchst du das nicht ein und auch nicht auszuschalten.
Besser vor dem Speichern prüfen, ob die Datei da ist..
so...
    'zum Testen 
    Dim Pfad As String, Speichername As String
    Pfad = "C:\Temp\"
    Speichername = "Mappe1.xlsx"
    
    'der Speichername wurde in der Userform eingetragen 
    'Der Pfad ist bekannt 
    '... 
    
    
    Do Until Dir(Pfad & Speichername) = ""
        Speichername = InputBox("Datei existiert bereits", "Neuer Dateiname", Speichername)
    Loop
    ActiveWorkbook.SaveAs Speichername
    '... 

LG UweD
Anzeige
AW: Display Alert
11.05.2017 11:53:57
N_N
Hallo UweD,
danke für deine Antwort.
Leider funktioniert es noch nicht. Wenn ich den Code so nutze, dann kommt gar keine Meldung, dass es die Datei mit dem Namen schon gibt, stattdessen wird sie direkt überspeichert.
Ich verstehe den Code aber auch nicht so ganz. Warum muss eine Do Loop Schleife rein?
Gruß
N_N
AW: Display Alert
11.05.2017 12:57:17
UweD
Hallo
1)
Leider funktioniert es noch nicht. Wenn ich den Code so nutze, dann kommt gar keine Meldung, dass es die Datei mit dem Namen schon gibt, stattdessen wird sie direkt überspeichert.
Dann zeig mal deinen kompletten Code. Bei mir funktioniert das kurze Beispiel.
2)
Warum muss eine Do Loop Schleife rein?
Es kann ja sein, dass der neue Name auch schon existiert. Deshalb solange den Loop, bis ein gültiger Name vorliegt
LG UweD
Anzeige
AW: Display Alert
11.05.2017 15:15:40
N_N
Hi Uwe,
Der komplette Code ist super lang, weil da tausend Sachen berechnet werden, aber hier ist der Code für die Userform, die nach dem Speicherpfad und dem Speichernamen fragt:
Üserform für den Speicherpfad
Public Sub CommandButton2_Click()
Dim ordner As FileDialog, Speicherpfad2 As String
Set ordner = Application.FileDialog(msoFileDialogFolderPicker)
If ordner.Show = -1 Then
Speicherpfad2 = ordner.SelectedItems(1)
End If
Speicherpfad.Value = Speicherpfad2
Set ordner = Nothing
End Sub
Userform für den Speichernamen
Private Sub Speichername_Change()
Speichername = Speichername.Value
End Sub
Hier wird das benötigte Tabellenblatt in eine neue Mappe kopiert und die neue Mappe soll dann unter "Speichername" gespeichert werden.
Sheets("Steuerung").Copy
ActiveWorkbook.Sheets(1).Buttons.Delete
ActiveWorkbook.Sheets(1).Name = "Ergebnis"

Jetzt habe ich folgendes noch eingefügt:
Do Until Dir(Speicherpfad2 & Speichername) = ""
Speichername = InputBox("Datei exisiterit bereits", "Neuer Dateiname", Speichername)
Loop
ActiveWorkbook.SaveAs Speichername
Aber wie gesagt, bei mir klappt es noch nicht. Ich habe auf dem Desktop die Excel-Datei "Test" liegen und wenn ich das Makro durchlaufen lasse und den Output als "Test" speichern möchte, fragt er nicht nach, sondern speichert es einfach über und öffnet die Datei.
Anzeige
AW: Display Alert
11.05.2017 15:22:27
UweD
Hi
hat der Wert von Speicherpfad2 hinten ein \
sonst setzt das bitte noch
Do Until Dir(Speicherpfad2 & "\" & Speichername) = ""
LG UweD
AW: Display Alert
11.05.2017 15:49:30
N_N
Du meinst, wenn ich den Pfad einfüge.. nein, am Ende steht kein "\". Hab es trotzdem mal eingesetzt, passiert aber immer noch das Gleiche -.-
Ich habe alternativ auch noch diesen Code:
Set OutputDat = Workbooks(Ergebnis & ".xls")
'Sichern:
'ActiveWorkbook.SaveAs Filename:=Speicherort & "\" & Ergebnis & ".xls"
'If OutputDat(Ergebnis & ".xls").Saved Then
'    janein = MsgBox(Ergebnis & ".xls ist bereits vorhanden, möchtest Du sie überschreiben?",  _
vbQuestion & vbYesNo)
'    If janein = vbYes Then
'    OutputDat.Close
'    ActiveWorkbook.Save
'ElseIf janein = vbNo Then
'    Ergebnis = InputBox("Neuer Name angeben: ", "Speichern unter", ActiveWorkbook.Name)
'    If neuername  " " Then ActiveWorkbook.SaveAs (Ergebnis & ".xls")
' Else
'    ActiveWorkbook.SaveAs Filename:=Speicherort & "\" & Ergebnis & ".xls"
'    End If
'    End If

Das funktioniert auch, aber nur wenn die andere Datei mit dem gleichen Namen offen ist. Das Problem ist nur, dass wenn die Datei geschlossen ist und im gleichen Speicherpfad liegt, meckert der Code nicht und überspeichert einfach. (Speicherpfad und Speichername heißen in dieser Version anders, aber das habe ich berücksichtigt.)
Deswegen der Einfall mit

Application.DisplayAlerts = True
' ActiveWorkbook.SaveAs Speichername
' Application.DisplayAlerts = False
Ich dachte, dass ich dann hier einfach mit einer weiteren IF Bedingung den Fall, dass jemand auf "nein- nicht überspeichern" drückt, abfange.
Anzeige
AW: Display Alert
11.05.2017 16:16:24
UweD
Hallo
ohne Datei mach ich nichts mehr.
Aber ein Tipp zu "Application.DisplayAlerts"
Ist normal =True.
d.h. Sicherheitsfragen z.B. 'beim Löschen eines Tabellenblattes'
oder 'beim Speichern bei schon vorhandener Datei'.. werden ganz normal angezeigt.
Wenn du verschieden Anweisungen per Makro ausführen möchtest, dann sind diese Hinweise störend.
Dazu werden Diese kurzzeitig ausgeschaltet (auf false gesetzt) und nach der Anweisung wieder eingeschaltet.
LG UweD
AW: Display Alert
11.05.2017 16:21:21
UweD
Noch ein Tipp
Schreib hier mal eine MSGBOX davor
MSGBOX Speicherpfad2 & Speichername
Do Until Dir(Speicherpfad2 & Speichername) = ""

und sieh dir mal den kompletten Speicherpfad mit Dateinamen an, ob der deinen Erwartungen entspricht
LG UweD
Anzeige
AW: Display Alert
11.05.2017 16:57:20
N_N
Hi Uwe,
danke dir für deine Zeit. Ich konnte das Problem nun auf einfacherem Wege lösen:
Public Sub CommandButton2_Click()
Dim ordner As FileDialog, Speicherpfad2 As String
Set ordner = Application.FileDialog(msoFileDialogSaveAs)
If ordner.Show = -1 Then
Speicherpfad2 = ordner.SelectedItems(1)
End If
Speicherpfad.Value = Speicherpfad2
Set ordner = Nothing
Trennpunkt = Split(Speicherpfad2, "\")
highest = UBound(Trennpunkt)
Ergebnis = Trennpunkt(highest)
End Sub
Ich habe vorher zwei Userformen genutzt um erst Pfad, dann Namen abzufragen. Wenn ich oben bei dem fettgedruckten "SaveAs" einfüge, macht er beides in einem und dann erkennt Excel "selbst" sofort, wenn der Dateiname in dem Pfad schon vorhanden ist. Anschließend extrahiere ich aus dem Pfad den letzten Teil und speicher das als "Ergebnis" ab um es für mein restliches Makro zu nutzen.
Gruß
N_N
Anzeige
AW: Prima!
11.05.2017 17:12:35
UweD

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige