Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: datekk am Januar 15, 2015, 15:32:40

Titel: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: datekk am Januar 15, 2015, 15:32:40
Huhu.. Ich mal wieder... diesmal allen voran erst mal ein liebes Dankeschön an die immer schnelle und gute Hilfe hier im Forum. Durch Euch bin ich als absoluten Anfänger nun doch Stück für Stück zu einer sehr ansehnlichen Datenbank gekommen, welche meine Arbeitsabläuft und die meines Teams bereits erheblich erleichtert und verbessert. 1000 Dank dafür   ;D ;D ;D ;D Es ist nicht immer einfach die richtigen Fragen zu stellen da die Thematiken und Gedankenhindergründe sehr komplex sind und Dritte sich auch nicht in die individuellen Sachverhalte mal nebenbei reindenken können. Von daher ist eine Umfassende Lösung der geschilderten Problematik auch gar nicht (unbedingt) mein Ansinnen. Aus vielen kleinen Elementen bastel ich was größeres Zusammen. Dadurch, durch die Hilfe von Fachliteratur (z.B. VBA mit Access) und Google kann ich jetzt schon ein bisschen mehr also nur Access starten .) Freilich bin ich noch weit von den Gurus weg, aber es fasziniert mich immer wieder was mit Access so möglich ist und davon möchte ich gern mehr erfahren. Für mich ist es das umfangreichste, spannendste und beste Programm der Office Familie.

So, genug gelabert...  :-* Die Frage:

Über eine Schaltfläche speichere ich einen Bericht ab. Der Dateiname des Berichts setzt sich wie folgt zusammen:

Angebotsstatus_Firmenname_AngebotsID.pdf

... er baut sich also aus drei Elementen selber auf.

Es ist nur leider nicht zu verhindern, dass in einem Firmenname auch Sonderzeichen sind wie ein & oder ein /, oder sich dieser wegen der Länge oder Zusätze aus zwei Zeilen besteht.... Hier erhalte ich eine Fehlermeldung bzw. geht es über eine Fehlerbehandlung dann zu einem Inhalt eines Alternativfeldes.

Lässt sich denn irgendwie automatisch aus dem Firmennamen ein Dateiname erzeugen welcher keine Sonderzeichen enthält und eine begrenzte länge hat?

Vielen Dank schon mal für hilfreiche Tipps.



Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: database am Januar 15, 2015, 15:57:11
Hallo,

schau mal da rein - das hilft vielleicht :-)

http://www.office-loesung.de/ftopic334510_0_0_asc.php

und dann könntest du das Ergebnis per   Left(Ergebnis,5)  auf 5 Zeichen begrenzen
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: datekk am Januar 15, 2015, 16:51:46
Das sieht gut aus.. Werde ich mal testen und dann berichten :) Danke schon mal.
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: datekk am Januar 16, 2015, 13:55:39
Also es hat hervorragend funktioniert. Habe den Code gleich als Public Function genutzt da ich die Korrekturfunktion an mehreren Stellen benötige.
Das ganze sieht dann so aus:


Option Compare Database

Option Explicit

Public Function PFDateiname(Dateiname) As String

Dim i As Integer
         
PFDateiname = Dateiname

         
       Const c_sonder As String = "#?/\&%='.,;:$§!()[]"
       For i = 1 To Len(c_sonder)
       PFDateiname = Replace(PFDateiname, Mid(c_sonder, i, 1), "")
       Next i
       
       PFDateiname = Left(PFDateiname, 20)

End Function


Also besten Dank :)
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: datekk am Januar 19, 2015, 11:59:45
Doch noch eine Frage an dieser Stelle: Die o.g. Funktion zieht diverse unerwünschte Zeichen aus dem Dateinamen und beschränkt den Dateinamen auf eine gewisse Anzahl von Zeichen. Wie ist es mir aber möglich, aus der Zeichenkette auch einen Zeilenumbruch zu entfernen (Tastenkombi Strg+Enter)? Kann man das irgendwie dort noch mit einbauen?

Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: DF6GL am Januar 19, 2015, 12:04:34
HAllo,

indem Du nochmal ein Replace für den Zeilenumbruch einbaust:

.
.
PFDateiname = Replace(PFDateiname, vbCrLf, "")
PFDateiname = Left(PFDateiname, 20)
End Function
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: MzKlMu am Januar 19, 2015, 12:06:33
Hallo,
eine zusätzliche Replace Zeile entfernt auch den Zeilenumbruch.
PFDateiname = Replace(PFDateiname, Chr(10) & Chr(13), "")
Nach dem Next i, vor dem Left.
Eventuell die 10 und die 13 Tauschen.
Oder den Code von Franz verwenden.  ;D
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: DF6GL am Januar 19, 2015, 12:13:51
Hi,

evtl. geht es auch so ohne weiteres Replace: (ungetestet):

Const c_sonder As String = "#?/\&%='.,;:$§!()[]" & vbLf & vbCr

Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: MaggieMay am Januar 19, 2015, 12:37:25
Hallo,

der Zeilenumbruch setzt sich folgendermaßen zusammen:
Chr(13) & Chr(10)
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: datekk am Januar 19, 2015, 13:01:44
Jo genau.. hab ich auch gerade gefunden und den Code wie folgt ergänzt:


Option Compare Database

Option Explicit

Public Function PFDateiname(Dateiname) As String

Dim i As Integer
         
PFDateiname = Dateiname

Const c_sonder As String = "#?/\&%='.,;:$§!()[]"

For i = 1 To Len(c_sonder)
    PFDateiname = Replace(PFDateiname, Mid(c_sonder, i, 1), "")
Next i
PFDateiname = Replace(Replace(PFDateiname, Chr$(13), "_"), Chr$(10), "_")
PFDateiname = Left(PFDateiname, 20)

End Function
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: MaggieMay am Januar 19, 2015, 13:26:54
Hi,

da riskierst du aber, deine AngebotsID zu verlieren.
Wäre es nicht besser, nur den Firmennamen einzukürzen und ggfls. den Status?
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: datekk am Januar 19, 2015, 13:50:09
Wieso verliere ich da die AngebotsID? Und was meinst Du mit "Status"? Sorry, ich stehe vielleicht jetzt auf dem Schlauch...
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: MaggieMay am Januar 19, 2015, 13:54:56
Du hast geschrieben, dass du den Dateinamen folgendermaßen zusammensetzt:

Angebotsstatus_Firmenname_AngebotsID.pdf
Das erste habe ich jetzt einfach mal mit "Status" abgekürzt. ;)

Und wenn du den generierten String (inkl. ".pdf"?  ???) auf 20 Zeichen einkürzt, verlierst u.U. einen wichtigen Teil des Dateinamens.
Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: datekk am Januar 19, 2015, 13:57:20
achso.. Du meinst wegen der Zusammensetzung aus den drei Elementen Status, Firmenname, ID und .pdf...

... nein, das funzt hervorragend via:


doCmd.OutputTo acOutputReport, "Angebot", acFormatPDF, Pfad & "Angebot_" & PFDateiname(Dateiname) & "_" & Me.AngebotAuftrag_ID & ".pdf"

Titel: Re: Dateinamen aus Tabelleninhalt via VBA kreieren...
Beitrag von: MaggieMay am Januar 19, 2015, 14:53:04
Sorry, ich war blind, du übergibst ja gar nicht den Dateinamen, sondern nur den Firmennamen an die Ersetzungsfunktion!  ::)

Da hättest du dann doch wohl besser einen anderen Parameternamen gewählt...