Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Dateinamen aus Tabelleninhalt via VBA kreieren...

Begonnen von datekk, Januar 15, 2015, 15:32:40

⏪ vorheriges - nächstes ⏩

datekk

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.



Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

database

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

datekk

Das sieht gut aus.. Werde ich mal testen und dann berichten :) Danke schon mal.
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

datekk

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 :)
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

datekk

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?

Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

DF6GL

HAllo,

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

.
.
PFDateiname = Replace(PFDateiname, vbCrLf, "")
PFDateiname = Left(PFDateiname, 20)
End Function
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

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
Gruß Klaus

DF6GL

Hi,

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

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

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MaggieMay

Hallo,

der Zeilenumbruch setzt sich folgendermaßen zusammen:
Chr(13) & Chr(10)
Freundliche Grüße
MaggieMay

datekk

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
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MaggieMay

Hi,

da riskierst du aber, deine AngebotsID zu verlieren.
Wäre es nicht besser, nur den Firmennamen einzukürzen und ggfls. den Status?
Freundliche Grüße
MaggieMay

datekk

#11
Wieso verliere ich da die AngebotsID? Und was meinst Du mit "Status"? Sorry, ich stehe vielleicht jetzt auf dem Schlauch...
Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MaggieMay

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.
Freundliche Grüße
MaggieMay

datekk

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"

Access 2016 mit SQL Server Backend. Bereits umgesetzt: Access mit MS SQL Backend,  ADODB Formularbindung, Streamen von Dateien zum SQL Server und zurück (Filestream), Drag&Drop Dateiupload zum Server, CTI / TAPI Integrierung in Access Anwendung - Nutzung auch über Remote Desktop, selbst aktualisierendes Access Frontend auf entfernten Rechnern (Upgrade). Berichte / Kreuztabellen mit SQL Server Backend, Mail Tagging, Outlook Steuerung über Access und umgekehrt // Grundwissen in .Net Core & Blazor Apps

MaggieMay

#14
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...
Freundliche Grüße
MaggieMay