CommonDialog ->ShowSave-Methode

Hallo
würde gerne mein CommonDialog-Steuerelement verbessern.
Ich habe es nun soweit angepasst, das eine Endung automatisch ergänzt wird, sofern man selbst keine eingibt (der Punkt wird mit pos gesucht und so eine Endung erkannt).

Leider klappt dies ja nicht beim überschreiben!!!.

Wenn ich eine Datei hätte, die keine Endung hat, wird automatisch eine Endung angefügt. Wie kann ich das noch einbinden, das es beim Überschreiben (allgemein)keine Abfrage geben soll, sondern direkt der alte Dateiname genommen werden soll.

On Error Resume Next
'Dateifilter für die Formate
cdlDaten.Filter = „Alle Dateien (*.*) |*.*|Liniendateien (*.lne) |*.lne|“
'setzen von Zusatzoptionen beim Öffnen/Schließen
cdlDaten.Flags = &H2 + &H4 + &H1000
'Öffnen des Menüs Öffnen von Dateien
cdlDaten.CancelError = True
cdlDaten.ShowSave

'Format für Dateiendung wird festgelegt
Pos = 0
Pos = InStr(cdlDaten.FileName, „.“) 'Finden der Position des Dezimalpunktes
If Pos = 0 Then
cdlDaten.FileName = cdlDaten.FileName & „.lne“
End If
Pos = 0

'Programm läuft trotz Fehlermeldung bei ABBRECHEN weiter, hier erfolgt Fehlerprüfung und der Sprung zurück ins Hauptmenü
If Err 0 Then
Exit Sub
End If

If cdlDaten.FileName „“ Then
Open cdlDaten.FileName For Output As #1
End If

Hallo

Hallo

würde gerne mein CommonDialog-Steuerelement verbessern.
Ich habe es nun soweit angepasst, das eine Endung automatisch
ergänzt wird, sofern man selbst keine eingibt (der Punkt wird
mit pos gesucht und so eine Endung erkannt).

Warum so schwer? Mache dich der IIF und Right Function zu nutze :smile:

Leider klappt dies ja nicht beim überschreiben!!!.

Wenn du das ergebnis einer Variablen zuweisst, so kannst du sie nach belieben veraendern :smile:

Wenn ich eine Datei hätte, die keine Endung hat, wird
automatisch eine Endung angefügt. Wie kann ich das noch
einbinden, das es beim Überschreiben (allgemein)keine Abfrage
geben soll, sondern direkt der alte Dateiname genommen werden
soll.

Das kannst du über die Flags realisieren :smile:
Das die Meldung kommt dafür ist das Flag &h2 ( cdlOFNOverwritePrompt) verantwortlich :smile: Einfach das Flag entfernen und schon hast du ruhe.
Aber willst du wirklich ein File überschreiben ohne vorher nachzufragen?

On Error Resume Next
'Dateifilter für die Formate
cdlDaten.Filter = „Alle Dateien (*.*) |*.*|Liniendateien
(*.lne) |*.lne|“
'setzen von Zusatzoptionen beim Öffnen/Schließen
cdlDaten.Flags = &H2 + &H4 + &H1000
'Öffnen des Menüs Öffnen von Dateien
cdlDaten.CancelError = True
cdlDaten.ShowSave

'Format für Dateiendung wird festgelegt
Pos = 0
Pos = InStr(cdlDaten.FileName, „.“) 'Finden der Position
des Dezimalpunktes
If Pos = 0 Then
cdlDaten.FileName = cdlDaten.FileName & „.lne“
End If
Pos = 0

'Programm läuft trotz Fehlermeldung bei ABBRECHEN weiter,
hier erfolgt Fehlerprüfung und der Sprung zurück ins Hauptmenü
If Err 0 Then
Exit Sub
End If

If cdlDaten.FileName „“ Then
Open cdlDaten.FileName For Output As #1
End If

hier ein kleines Demo :smile: ist aber ungetestet, sollte aber laufen :smile:

On Error GoTo fehler
Dim file As String
cdlDaten.Filter = „Alle Dateien (*.*) |*.*|Liniendateien (*.lne) |*.lne|“
cdlDaten.Flags = &H4 + &H1000
cdlDaten.CancelError = True
cdlDaten.ShowSave
file = IIf(LCase(Right(cdlDaten.FileName, 4)) = „.lne“, cdlDaten.FileName, cdlDaten.FileName + „.lne“)
'Unter File ist nun der eingegebene Filename
'Hier Code fortsetzen
Exit Sub
fehler:
If Err.Number = 32755 Then
'Abbrechen wurde gewaehlt
'Code fürs Abbrechen hier einfügen
Else
'Ein unerwarteter Fehler
'Code dafür hier einfügen
End If

Erklärung:

durch durch canceerror auf wahr gesetzt hast, tritt ein Fehler auf beim klicken der abbrechen schaltfläche. Durch die angabe von on error goto fehler, fragen wir den Fehler ab :wink:
Danach habe ich das Flag cdlOFNOverwritePrompt(&h2) entfernt und somit bekommst du kein Prompt mehr wegen dem überschreiben :smile:
Danach habe ich eine IIF Abfrage eingebaut, welche bewirkt das wenn die letzten Buchstaben .lne sind , diese endung automatisch angehaengt wird :smile: und dieser eine Variable ( file) zugewiesen habe. Mit dieser kannst du nun nach belieben weiterarbeiten.
Danach wird die Sub verlassen.
Tritt ein Fehler auf so fragen wir ab um welchen es sich handelt. Klickt der benutzer auf abbrechen so tritt der fehler 32755 auf, dort kannst du nun einen seperaten code reinschreiben. Tritt ein andere Fehler auf so kannst du dann unter der else anweisung auch noch code dafür abarbeiten.

Ich hoffe das ist das was du gesucht hast, wenn net einfach nochmal nachfragen.

MFG Alex

es ist nicht das was ich suche!!!
Hallo
scheinbar schreibe ich irgendwie wirr, jedenfalls wird meist irgendetwas falsch verstanden. Das kommt wahrscheinlich daher, das ihr immer nur Absätze beantwortet.

Der Code, wie ich ihn abgedruckt habe ist völlig OK. Ich will durchaus eine Meldung haben, wenn ich ein File überschreiben möchte.

Einziges Problem ist, das wenn das File keine Endung hat, wird in meinem Code eine angefügt. Es soll aber ja trotzdem überschrieben werden.
Ich habe dafür gesorgt, das automatisch immer eine bestimmte Endung angefügt wird, wenn ich einen Dateinamen eingebe(!), aber wenn ich ihn anklicke zum überschreiben, gebe ich ihn ja nicht ein, wohin wandert dieser Name dann (Variable???). Oder kann man sagen, wenn .Flag = &H2 Then … ???
Wenn ich das weiss ist alles OK, dann wüsste ich bescheid.

Dazu müsst ihr aber auch mal den Code anschauen, was der tut und nicht immer gleich alles neu abwickeln!!!

Mfg Werner

Hallo
das gleiche tut mein Code auch!

Hallo Werner,

ich habe mir Dein Problem auch mal angesehen.

scheinbar schreibe ich irgendwie wirr, jedenfalls wird meist
irgendetwas falsch verstanden. Das kommt wahrscheinlich daher,
das ihr immer nur Absätze beantwortet.

Ja, mache ich auch. Wenn Du mehrere Fragen hast und ich kenne nur zu einer davon die Antwort, dann beantworte ich diese. Warum soll ich kommentieren, was ich nicht weiß?

Der Code, wie ich ihn abgedruckt habe ist völlig OK.

Das diskutieren wir mal. :wink:

Ich will
durchaus eine Meldung haben, wenn ich ein File überschreiben
möchte.

Ist OK, dazu gibt’s am Ende den Code.

Einziges Problem ist, das wenn das File keine Endung hat, wird
in meinem Code eine angefügt. Es soll aber ja trotzdem
überschrieben werden.

Auch OK.

Ich habe dafür gesorgt, das automatisch immer eine bestimmte
Endung angefügt wird, wenn ich einen Dateinamen eingebe(!),
aber wenn ich ihn anklicke zum überschreiben, gebe ich ihn ja
nicht ein, wohin wandert dieser Name dann (Variable???). Oder
kann man sagen, wenn .Flag = &H2 Then … ???
Wenn ich das weiss ist alles OK, dann wüsste ich bescheid.

Dazu müsst ihr aber auch mal den Code anschauen, was der tut
und nicht immer gleich alles neu abwickeln!!!

Nein, den Code muß ich mir dazu eigentlich nicht ansehen. :wink:
Aber tun wir’s trotzdem mal. …

On Error Resume Next

überflüssig und schädlich. Du merkst nicht, wenn Dein Code Fehlerhaft ist.

'Dateifilter für die Formate
cdlDaten.Filter = "Alle Dateien (\*.\*) |\*.\*|Liniendateien (\*.lne) |\*.lne|"

Wieso? Entweder alle, oder nicht alle.

'setzen von Zusatzoptionen beim Öffnen/Schließen
cdlDaten.Flags = &H2 + &H4 + &H1000
'Öffnen des Menüs Öffnen von Dateien
cdlDaten.CancelError = True

überflüssig

cdlDaten.ShowSave

OK, der Befehl wird gebraucht. :wink:

'Format für Dateiendung wird festgelegt
Pos = 0
Pos = InStr(cdlDaten.FileName, ".") 'Finden der Position des Dezimalpunktes
If Pos = 0 Then
cdlDaten.FileName = cdlDaten.FileName & ".lne"
End If
Pos = 0

'Programm läuft trotz Fehlermeldung bei ABBRECHEN weiter, hier erfolgt Fehlerprüfung und der Sprung zurück ins Hauptmenü
If Err 0 Then
Exit Sub
End If

überflüssig. Trage in der Eigenschaft ‚DefaultExt‘ ein: .lne und das Steuerelement erledigt das für Dich.

If cdlDaten.FileName "" Then
Open cdlDaten.FileName For Output As #1
End If

Richtig, genau deshalb brauchst Du ‚Error‘ nicht.
Jetzt noch mein ‚Alternativcode‘. :wink:

 cdlDaten.Flags = cdlOFNOverwritePrompt
 cdlDaten.ShowSave
 If cdlDaten.FileName "" Then
 Open cdlDaten.FileName For Output As #1
 End If

Einträge in den Eigenschaften von cdlDaten:
CancelError - False
DefaultExt - .lne
Filter - (*.lne)|*.lne|

Verhalten:
Commondialog wird geöffnet, Alle Dateien mit der Endung .lne werden angezeigt. Du kannst einen Dateinamen eingeben, der automatisch mit der Endung .lne ergänzt wird, falls der Name keine oder eine andere Endung hat. Gibst Du einen Namen an, der bereits vorhanden ist, wirst Du gefragt, ob die Datei überschrieben werden soll.
Sagst Du da nein, oder gibst keinen Namen an, bleibt .Filename = „“.

Das war’s doch, was Du wolltest. Den ganzen Code, den Du geschrieben hast, brauchst Du nicht. … Und das wolltest Du gar nicht wissen? Eigenartig.

Gruß, Rainer

Nachtrag
Hallo Werner,

noch ein kleiner Nachtrag,

cdlDaten.Flags = cdlOFNOverwritePrompt

kannst Du auch noch weg lassen, wenn Du in der Eigenschaften von Commondialog bei Flags eine 2 einträgst. :wink:

Gruß, Rainer