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.
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
Das sieht gut aus.. Werde ich mal testen und dann berichten :) Danke schon mal.
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 :)
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?
HAllo,
indem Du nochmal ein Replace für den Zeilenumbruch einbaust:
.
.
PFDateiname = Replace(PFDateiname, vbCrLf, "")
PFDateiname = Left(PFDateiname, 20)
End Function
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
Hi,
evtl. geht es auch so ohne weiteres Replace: (ungetestet):
Const c_sonder As String = "#?/\&%='.,;:$§!()[]" & vbLf & vbCr
Hallo,
der Zeilenumbruch setzt sich folgendermaßen zusammen:
Chr(13) & Chr(10)
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
Hi,
da riskierst du aber, deine AngebotsID zu verlieren.
Wäre es nicht besser, nur den Firmennamen einzukürzen und ggfls. den Status?
Wieso verliere ich da die AngebotsID? Und was meinst Du mit "Status"? Sorry, ich stehe vielleicht jetzt auf dem Schlauch...
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.
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"
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...