Discussion:
W97 - Dateinamenerfassung per ‹Dialogs›
(zu alt für eine Antwort)
unknown
2010-05-27 06:51:00 UTC
Permalink
Moin, Moin!

Eine TXT muss geöffnet werden - und zwar sicher als ANSI-TXT - um dann
als DOS-TXT gespeichert zu werden (überschreiben gewollt).

Da nach Doppeklick (und bestätigen-Dialog) eh eine Speicher-Unter und
evtl. navigieren nötig ist überlege ich diese Methode:
Per Öffnen Dialog (um eben die Datei zu finden) als ANSI-TXT in einem
vorgegebenen Ordner habe ich den Dateinamen um über ein spezielle
Speicherfunktion die Konvertierung zu erledigen.

Das klaptt nicht; obwohl ich der Einbildung unterliege über Dialogs den
Dateinamen zurückzubekommen?! Wenn damit direktes Öffnen + Dateinam
nicht geht so sollte derselbe + Pfad genügen über VBA zu öffnen und zu
speichern.
Knackpunkt ist eben an den immer neuen Dateinamen zu kommen.
--
Eric March

Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.
"Die Geschichte ist der beste Lehrmeister - mit den unaufmerksamsten
Schülern." Indira Gandhi
Thomas Gahler
2010-05-27 08:54:44 UTC
Permalink
Hallo Eric
Post by unknown
Per Öffnen Dialog (um eben die Datei zu finden) als ANSI-TXT in einem
vorgegebenen Ordner habe ich den Dateinamen [...]
Das klaptt nicht; obwohl ich der Einbildung unterliege über Dialogs den
Dateinamen zurückzubekommen?! Wenn damit direktes Öffnen + Dateinam nicht
geht so sollte derselbe + Pfad genügen über VBA zu öffnen und zu
speichern.
Zeig uns doch ein paar Zeilen Code, wie du dein Öffnen-Dialog aufrufts, dann
können wir sicher weiterhelfen
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP3), Office XP (SP3)
unknown
2010-05-27 10:09:26 UTC
Permalink
Post by Thomas Gahler
Hallo Eric
Post by unknown
Per Öffnen Dialog (um eben die Datei zu finden) als ANSI-TXT in einem
vorgegebenen Ordner habe ich den Dateinamen [...]
Das klaptt nicht; obwohl ich der Einbildung unterliege über Dialogs den
Dateinamen zurückzubekommen?! Wenn damit direktes Öffnen + Dateinam nicht
geht so sollte derselbe + Pfad genügen über VBA zu öffnen und zu
speichern.
Zeig uns doch ein paar Zeilen Code, wie du dein Öffnen-Dialog aufrufts, dann
können wir sicher weiterhelfen
Das was ich habe klappt ja nicht; liefert mir nur True/False bzw. -1/0
zurück:

Dummy = Application.Dialogs(wdDialogFileOpen).Display("C:\Otto\")

Weiter war ich zu dem Augenblick nicht gekommen, mir geht's darum
rauszukreigen ob man so überhaupt den Dateinamen abfischen kann.
.Show funktionert ja auch nicht.
--
Eric March

Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.
"Die Geschichte ist der beste Lehrmeister - mit den unaufmerksamsten
Schülern." Indira Gandhi
Thomas Gahler
2010-05-27 13:04:08 UTC
Permalink
Hallo Eric
Post by unknown
Das was ich habe klappt ja nicht; liefert mir nur True/False bzw. -1/0
Das macht doch nichts, mit deinem Code kann ich mir mehr vorstellen was du
erreichen möchtest.
Post by unknown
Dummy = Application.Dialogs(wdDialogFileOpen).Display("C:\Otto\")
Das geht so leider nicht...

Siehe auch die Hilfe
-> "Dialogs" im VBA-Editor schreiben und F1 drücken
-> Im Thema "Dialogs-Eigenschaft" auf den Verweis 'Dialogs-Aiuflistung'
klicken
-> im Thema "Dialogs-Objekt (Auflistung)" auf den Verweis 'Dialog-Objekten'
klicken
-> Siehe auch und die Themen 'Argumente für integrierte Dialogfelder' und
'Anzeigen von integrierten Dialogfeldern in Word' lesen
Post by unknown
.Show funktionert ja auch nicht.
.Show = anzeigen und ausführen
.Display = anzeigen
.Execute = ausführen



Mit diesen Zeilen solltest du klar kommen.


Sub Demo()
Const tgDlgSchliessen As Integer = -2
Const tgDlgOK As Integer = -1
Const tgDlgAbbrechen As Integer = 0

Dim intReturn As Integer
Dim strDateiname As String

With Dialogs(wdDialogFileOpen)
intReturn = .Display
strDateiname = .Name
End With

If intReturn = tgDlgOK Then
MsgBox Options.DefaultFilePath(wdCurrentFolderPath) & "\" &
strDateiname
Else
MsgBox "Keine Datei gewählt"
End If
End Sub
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP3), Office XP (SP3)
Eric March
2010-05-27 15:13:36 UTC
Permalink
Post by Thomas Gahler
Hallo Eric
Post by unknown
Das was ich habe klappt ja nicht; liefert mir nur True/False bzw. -1/0
Das macht doch nichts, mit deinem Code kann ich mir mehr vorstellen was du
erreichen möchtest.
Post by unknown
Dummy = Application.Dialogs(wdDialogFileOpen).Display("C:\Otto\")
Das geht so leider nicht...
Siehe auch die Hilfe
-> "Dialogs" im VBA-Editor schreiben und F1 drücken
-> Im Thema "Dialogs-Eigenschaft" auf den Verweis 'Dialogs-Aiuflistung'
klicken
-> im Thema "Dialogs-Objekt (Auflistung)" auf den Verweis 'Dialog-Objekten'
klicken
-> Siehe auch und die Themen 'Argumente für integrierte Dialogfelder' und
'Anzeigen von integrierten Dialogfeldern in Word' lesen
Da war ich auch; aber gezündet hat da leider nichts bei mir.
Post by Thomas Gahler
Post by unknown
.Show funktionert ja auch nicht.
.Show = anzeigen und ausführen
.Display = anzeigen
.Execute = ausführen
(Damit meinte ich eigntlich nur: «tut nicht das was ich will»;
fuktionierwn an sich tuts schon.)
Post by Thomas Gahler
Mit diesen Zeilen solltest du klar kommen.
Sub Demo()
Const tgDlgSchliessen As Integer = -2
Const tgDlgOK As Integer = -1
Const tgDlgAbbrechen As Integer = 0
Dim intReturn As Integer
Dim strDateiname As String
With Dialogs(wdDialogFileOpen)
intReturn = .Display
strDateiname = .Name
End With
If intReturn = tgDlgOK Then
MsgBox Options.DefaultFilePath(wdCurrentFolderPath)& "\"&
strDateiname
Else
MsgBox "Keine Datei gewählt"
End If
End Sub
Da fällt es einem wie Schnuppen von den Haaren ;-)

Der Aufhänger ist die WITH-Konstruktion - und die gedankliche Weigerung,
dass ein aufgerufener Dialog ein (für mich) schwebendes Objekt sein kann
dem ich nicht mehr als eine Rückgabe abfordern kann. Dieses VB-Prinzip
werde ich wohl nie verinnerlichen…

Jetzt müssen nur noch der Öffnungs-Pfad und der Dateityp übergeben
werden und ich wärs zufrieden.
--
Eric March - eric.march(spambremse)@gmx.net

»Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.«
„Die Geschichte ist der beste Lehrmeister - mit den unaufmerksamsten
Schülern.“ Indira Gandhi
Thomas Gahler
2010-05-27 20:03:14 UTC
Permalink
Hallo Eric
Jetzt müssen nur noch der Öffnungs-Pfad und der Dateityp übergeben werden
und ich wärs zufrieden.
Na dann passen wir das Ding ein wenig an...





Sub Demo()
Const tgDlgSchliessen As Integer = -2
Const tgDlgOK As Integer = -1
Const tgDlgAbbrechen As Integer = 0

Dim strPfadAlt As String
Dim intReturn As Integer
Dim strDateiname As String

'Wir merken uns den alten Pfad...
strPfadAlt = Options.DefaultFilePath(wdDocumentsPath)

'...und ändern diesen auf den gewünschten ab.
Options.DefaultFilePath(wdDocumentsPath) = "C:\Temp"

'Aufruf von Öffnen-Dialog
With Dialogs(wdDialogFileOpen)
'Pseudo-Filter setzen
.Name = "*.txt*"
'Anzeigen und Rückgabewert festhalten
intReturn = .Display
'Gewählte Datei festhalten
strDateiname = Options.DefaultFilePath(wdCurrentFolderPath) & _
Application.PathSeparator & _
.Name
End With

'Den alten Pfad unbedingt wieder eintragen.
Options.DefaultFilePath(wdDocumentsPath) = strPfadAlt

'Mach etwas mit der gewählten Datei
If intReturn = tgDlgOK Then
MsgBox strDateiname, vbInformation + vbOKOnly
Else
MsgBox "Keine Datei gewählt", vbExclamation + vbOKOnly
strDateiname = ""
End If
End Sub



Kann sein, dass in deinem W97 die Ziele
- .Name = "*.txt*"
angepasst werden muss. Vielleihct muss/darf dort nur
- .Name = "*.txt"
stehen. Da bin ich nicht mehr sicher. Diese Version ist bei mir ein weilchen
her...
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows Vista (SP2), Office 2007 (SP2)
unknown
2010-05-28 07:00:54 UTC
Permalink
Dieser beitrag ist möglicherweise unangemessen. Klicken sie auf, um es anzuzeigen.
Thomas Gahler
2010-05-28 09:28:53 UTC
Permalink
Halllo Eric
Post by unknown
Was ich mal gern hätte wäre ein vernünftige Hilfe die einem Dinge wie
Options.DefaultFilePath(wdDocumentsPath)
aufführt oder als übersichtliche Liste-von-Möglichkeiten mit >Erklärung<
anbietet. Das Default. z.B. kann man gerade so noch nachvollziehen, da
sich der FielPath aber live ändert ist Default als Präfix nicht leicht zu
erraten.
Ist ein bisschen Word eigen. Dazu gehört Erfahrung oder Fragen in der NG ;-)
Post by unknown
Application.PathSeparator< - so was findet man wohl auch nur hier, aber
in keiner Hilfe; nach dem . nach Application säufts in der Masse ab. Danke
für den Tipp.
Dann läuft es auch auf dem Mac ;-)
Post by unknown
»Sie haben keinen Zugriff auf {Pfad}\*.TXT - wenden Sie sich an Ihren
Administrator«.
Irgendwie hatte ich das auch schon hingekriegt, aber was damals die genauen
Anforderungen waren, das wiess ich nicht mehr.
Post by unknown
(Wie gesagt ist der Hintergrund der gesamten Aktion ja ANSI in ASCII
umzuwandeln, und das mit möglichst einfachen Mitteln wie dem
allgegenwärtigen Word.)
Es gibt ja die Option Extras/Optionen/Allgemein/Konvertierung beim Öffnen
bestätigen, dann kannst du selber festlegen mit was umgewandelt wird und
dann bekommst du die Umlaute auch richtig konvertiert.

Die Option kann auch via VBA gesetzt werden (aber dran denken, wenn du sie
verstellst, dann anschliessend den alten Wert wieder herstellen).
--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows XP (SP3), Office XP (SP3)
Eric March
2010-05-29 10:44:01 UTC
Permalink
Post by Thomas Gahler
Halllo Eric
Post by unknown
Was ich mal gern hätte wäre ein vernünftige Hilfe die einem Dinge wie
Options.DefaultFilePath(wdDocumentsPath)
aufführt oder als übersichtliche Liste-von-Möglichkeiten mit>Erklärung<
anbietet. Das Default. z.B. kann man gerade so noch nachvollziehen, da
sich der FielPath aber live ändert ist Default als Präfix nicht leicht zu
erraten.
Ist ein bisschen Word eigen. Dazu gehört Erfahrung oder Fragen in der NG ;-)
Post by unknown
Application.PathSeparator< - so was findet man wohl auch nur hier, aber
in keiner Hilfe; nach dem . nach Application säufts in der Masse ab. Danke
für den Tipp.
Dann läuft es auch auf dem Mac ;-)
Das hatte ich mir als alter UNIX-Mensch schon ganz insgeheim so gedacht ;)
Post by Thomas Gahler
Post by unknown
»Sie haben keinen Zugriff auf {Pfad}\*.TXT - wenden Sie sich an Ihren
Administrator«.
Irgendwie hatte ich das auch schon hingekriegt, aber was damals die genauen
Anforderungen waren, das wiess ich nicht mehr.
Ich habe unten mal mein (mit vieeeel fremder Hilfe entstandenes)
Machwerk abgelegt.
Post by Thomas Gahler
Post by unknown
(Wie gesagt ist der Hintergrund der gesamten Aktion ja ANSI in ASCII
umzuwandeln, und das mit möglichst einfachen Mitteln wie dem
allgegenwärtigen Word.)
Es gibt ja die Option Extras/Optionen/Allgemein/Konvertierung beim Öffnen
bestätigen, dann kannst du selber festlegen mit was umgewandelt wird und
dann bekommst du die Umlaute auch richtig konvertiert.
Die wollte ich eigentlich ganz aus dem Weg haben weil sie nur - nervt.
Oder es überzogen wäre sie hie extra scharzumachen.
Post by Thomas Gahler
Die Option kann auch via VBA gesetzt werden (aber dran denken, wenn du sie
verstellst, dann anschliessend den alten Wert wieder herstellen).
Sodele:

Sub TextZuASCII()
Rem Um in Interv ANSIS als nötiges ASCII zu speichern
Dim PfadAlt As String
Dim TypAlt As Integer
Dim Rückgabe As Integer
Dim DateiName As String

'Alte Zustände sichern
PfadAlt = Options.DefaultFilePath(wdDocumentsPath)
TypAlt = Options.DefaultOpenFormat
Options.DefaultFilePath(wdDocumentsPath) = "P:\FAD"
Options.DefaultOpenFormat = wdOpenFormatText

'Öffnen-Dialog, es wird aber nur der DateiName erfasst
With Dialogs(wdDialogFileOpen)
Rückgabe = .Display
DateiName = Options.DefaultFilePath(wdCurrentFolderPath) &
Application.PathSeparator & .Name
End With

'Sicherung zurückspielen
Options.DefaultFilePath(wdDocumentsPath) = PfadAlt
Options.DefaultOpenFormat = TypAlt

'Abbruch abfangen
If Rückgabe = -1 Then
Application.ScreenUpdating = False
Documents.Open FileName:=DateiName, Format:=wdOpenFormatText,
AddToRecentFiles:=False
ActiveDocument.SaveAs FileName:=DateiName,
FileFormat:=wdFormatDOSText, AddToRecentFiles:=False
ActiveDocument.Close (False)
Application.ScreenUpdating = True
Else
Rem
DateiName = ""
End If

End Sub

Das ist an den Kollegen ders braucht zum Testen raus.
Klar geht das schief wenn man DOS-Text aufmacht, aber sagen wir: die
Praxis sollte dieses Problem vernachlässigbar machen.

Nochmals ein Dankeschön.
--
Eric March - eric.march(spambremse)@gmx.net

»Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.«
„Die Geschichte ist der beste Lehrmeister - mit den unaufmerksamsten
Schülern.“ Indira Gandhi
Loading...