Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBA Dateiname auslesen, bearbeiten und wieder abspeichern

Mitglied: PatRixx

PatRixx (Level 1) - Jetzt verbinden

11.02.2013, aktualisiert 12:03 Uhr, 7949 Aufrufe, 10 Kommentare

Hallo zusammen,

bin neu hier und ich hoffe ihr könnt mir gleich helfen.

Ich habe eine definierte Formatvorlage in Word 2010. (Reparaturaufträge)
Wenn ich die Vorlage zum ausfüllen öffne, soll mir ein Makro gleich die Datei mit einer Laufnummer versehen.
Wenn ich dann die Datei speicher, soll der Name wie folgt lauten: "Reparaturaufträge_6-stellige Laufnummer_Datum"
Soweit so gut.
So nun zu meinem Problem mit der Laufnummer:
Bis jetzt habe ich das mit einer externen INI-Datei gelöst, in welche einfach die aktuelle Nummer geschrieben wird und beim erneuten öffnen der Vorlage wird einfach +1 hochgezählt.

Ich möchte das aber etwas anders lösen.
Und zwar soll mir das Makro die LETZTE abgespeicherte Laufnummer auslesen, +1 addieren und die neue Datei abspeichern.
Ich möchte einfach keine externe INI-Datei verwenden.

Leider hab ich keine Ahnung wie ich Dateinamen aus bestehenden Dokumenten auslesen und bearbeiten kann.

Ich hoffe ihr versteht mein Problem und könnt mir helfen.

Danke schon mal und viele Grüße

Bitte entschuldigt wenn ein ähnliches Thema bereits irgendwo behandelt wurde.
Wenn jemand eine Lösung hat, bitte idiotensicher erklären. Bin absoluter VBA-Neuling

Anbei noch mein jetziges Makro

Private Const Präfix = "Reperaturauftrag_"
Private Const INIDatei = "C:\Users\Test\Documents\laufnummer.txt"

Sub AutoNew()
Dim oDoc As Document, oV As Template

Set oDoc = ActiveDocument
Set oV = oDoc.AttachedTemplate
aSec = aSec & Left(oV.Name, InStr(oV.Name, ".") - 1)
Num = System.PrivateProfileString(INIDatei, aSec, "Laufnummer")
Num = Val(Num) + 1
Num = Format(Num, "000000")
Monat = Format(Date, "mm")
Tag = Format(Date, "dd")
Jahr = Format(Date, "yyyy")
System.PrivateProfileString(INIDatei, aSec, "Laufnummer") = Num
On Error Resume Next
oDoc.CustomDocumentProperties.Add Name:="Laufnummer", _
LinkToContent:=False, Value:=Num, Type:=msoPropertyTypeString
On Error GoTo 0
For Each Teil In oDoc.StoryRanges
Teil.Fields.Update
While Not (Teil.NextStoryRange Is Nothing)
Set Teil = Teil.NextStoryRange
Teil.Fields.Update
Wend
Next
With Dialogs(wdDialogFileSummaryInfo)
.Title = Präfix & Num
.Execute
End With
oDoc.Windows(1).Caption = Präfix & Num & "_" & Jahr & "." & Monat & "." & Tag
End Sub
Mitglied: bastla
11.02.2013 um 12:32 Uhr
Hallo PatRixx und willkommen im Forum!
die LETZTE abgespeicherte Laufnummer auslesen
Demnach soll das Makro also in einem (noch nicht genannten) Ordner die gespeicherten Dateien (haben welches Dateiformat?) durchgehen, um jene mit der höchsten Laufnummer entsprechend dem Schema "Reparaturaufträge_6-stellige Laufnummer_Datum" zu finden und daraus die nächste Nummer berechnen zu können?

Grüße
bastla
Bitte warten ..
Mitglied: PatRixx
11.02.2013 um 13:01 Uhr
Zitat von bastla:
Hallo PatRixx und willkommen im Forum!
> die LETZTE abgespeicherte Laufnummer auslesen
Demnach soll das Makro also in einem (noch nicht genannten) Ordner die gespeicherten Dateien (haben welches Dateiformat?)
durchgehen, um jene mit der höchsten Laufnummer entsprechend dem Schema "Reparaturaufträge_6-stellige
Laufnummer
_Datum" zu finden und daraus die nächste Nummer berechnen zu können?

Grüße
bastla


Ganz genau!
Es handelt sich um herkörmmliche doc-Dateien.

Beispiel:

Reparaturaufträge_000001_20130211.doc
Reparaturaufträge_000002_20130212.doc

Wenn ich jetzt das nächste Dokument speichern möchte soll es so heißen:
Reparaturaufträge_000003_20130212

Das Makro soll NUR die Laufnummer auslesen.
Das Datum soll automatisch generiert werden.
Bitte warten ..
Mitglied: bastla
11.02.2013 um 14:25 Uhr
Hallo PatRixx!

Etwa so:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
HNr = "000000" 'Startwert für "höchste Nummer" 
03.
Pre = "Reparaturaufträge_" 'Präfix des Dateinamens 
04.
For Each File In fso.GetFolder("D:\Ordner mit Reparaturaufträgen").Files 'alle Dateien durchgehen 
05.
    'nur doc-Dateien, die mit "Reparaturaufträge_" beginnen, verarbeiten 
06.
    If Left(File.Name, Len(Pre)) = Pre And LCase(fso.GetExtensionName(File.Name)) = "doc" Then 
07.
        LNr = Split(File.Name, "_")(1) 'Nummer ist Teil zwischen erstem und zweitem "_" 
08.
        If LNr > HNr Then HNr = LNr 'merken, wenn höher, als bisher höchste Nummer 
09.
    End If 
10.
Next 
11.
Num = Format(CLng(HNr) + 1, "000000") 'neue Nummer berechnen
Grüße
bastla
Bitte warten ..
Mitglied: PatRixx
11.02.2013 um 14:37 Uhr
Zitat von bastla:
Hallo PatRixx!

Etwa so:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
> HNr = "000000" 'Startwert für "höchste Nummer" 
03.
> Pre = "Reparaturaufträge_" 'Präfix des Dateinamens 
04.
> For Each File In fso.GetFolder("D:\Ordner mit Reparaturaufträgen").Files 'alle Dateien durchgehen 
05.
>     'nur doc-Dateien, die mit "Reparaturaufträge_" beginnen, verarbeiten 
06.
>     If Left(File.Name, Len(Pre)) = Pre And LCase(fso.GetExtensionName(File.Name)) = "doc" Then 
07.
>         LNr = Split(File.Name, "_")(1) 'Nummer ist Teil zwischen erstem und zweitem "_" 
08.
>         If LNr > HNr Then HNr = LNr 'merken, wenn höher, als bisher höchste Nummer 
09.
>     End If 
10.
> Next 
11.
> Num = Format(CLng(HNr) + 1, "000000") 'neue Nummer berechnen 
12.
> 
Grüße
bastla

Super!
Erstmal vielen Dank.

Wie viel soll ich von meinem ursprünglichen Makro behalten?
Und wo kommt dein Code rein?
Bitte warten ..
Mitglied: bastla
11.02.2013 um 14:39 Uhr
Hallo PatRixx!

Magst du vielleicht auch selber etwas tun?

Grüße
bastla
Bitte warten ..
Mitglied: PatRixx
11.02.2013 um 14:55 Uhr
Du hast recht.

Nur bin ich wie gesagt absoluter VBA-Neuling.

Aber gut, ich werde mich selbst mal dran versuchen.

Trotzdem vielen Dank für deine Hilfe!
Bitte warten ..
Mitglied: PatRixx
12.02.2013 um 14:03 Uhr
Nach etwar rumbasteln und anpassen, funktioniert es jetzt ganz gut.
DANKE DAFÜR!

Jetzt habe ich noch eine Frage.

Die Variable "Num" nimmt ja beim erzeugen der Datei einen Wert an.
Dieser Wert ist ja meine Reparaturauftragsnummer.
Ich möchte, dass mir beim Öffnen der Vorlage, die neu generierte Nummer "Num" in einem definierten Feld in dem Dokument anzeigt.

Wie bekomme ich das hin?
Bitte warten ..
Mitglied: bastla
12.02.2013 um 21:00 Uhr
Hallo PatRixx!

Falls es sich bei Deinem "definierten Feld" um eine Textmarke handelt, sollte das etwa so gehen:
ActiveDocument.Bookmarks("NameDerTextMarke").Range = Num
Grüße
bastla
Bitte warten ..
Mitglied: PatRixx
13.02.2013 um 09:57 Uhr
Zitat von bastla:
Hallo PatRixx!

Falls es sich bei Deinem "definierten Feld" um eine Textmarke handelt, sollte das etwa so gehen:
ActiveDocument.Bookmarks("NameDerTextMarke").Range = Num 
> 
Grüße
bastla

Danke für den Befehl aber bei mir funktioniert das natürlich mal wieder nicht

Ich hab "ActiveDocument.Bookmarks("NameDerTextMarke").Range = Num" in VBA direkt unter die Anweisung geschrieben, wo die Variable "Num" ihren Wert bekommt. (siehe dein Code Zeile 11)

Müsste doch eigentlich funktionieren oder?
Bitte warten ..
Mitglied: bastla
13.02.2013 um 12:48 Uhr
Hallo PatRixx!
Müsste doch eigentlich funktionieren oder?
Kann ich nicht beantworten - bisher weiß ich noch nicht einmal, ob Du tatsächlich eine Textmarke gemeint (und auch schon erstellt) hast ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
VB for Applications

CSV Datei automatisch bearbeiten und abspeichern

gelöst Frage von klaus1985VB for Applications6 Kommentare

Hallo , Ich habe hier jeden Monat eine CSV Datei die in unserem ERP System generiert wird und von ...

Batch & Shell

String Zeichenpaare auslesen und bearbeiten

Frage von ahstaxBatch & Shell6 Kommentare

Moin, ich möchte gerne einen String der Form "41004800", der beliebig lang sein kann, in Zeichenpaare aufteilen, also in ...

VB for Applications

Excel VBA - Auswahl aus Listbox bearbeiten

Frage von MasterSchlumpfVB for Applications1 Kommentar

Hallo Profis, ich benötige Eure Hilfe in Excel VBA. Ich lasse den Inhalt einer Tabelle in einer Listbox anzeigen. ...

Batch & Shell

Dateinamen auslesen und in einer Schleife benutzen

gelöst Frage von TeholBeddictBatch & Shell12 Kommentare

Hallo Experten, ich kämpfe derzeit mit folgender Aufgabenstellung, welche ich per Batchskript lösen möchte: In einem Ordner sind 1 ...

Neue Wissensbeiträge
Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 4 StundenWindows Update

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Microsoft Office

MS Office 2019 ohne OneNote - OneNote App speichert nur in Cloud

Information von Deepsys vor 15 StundenMicrosoft Office2 Kommentare

Microsoft zeigt deutlich wohin alles bei Ihnen geht, OneNote 2019 wird es nicht mehr geben, und die Windows 10 ...

Humor (lol)

Warum man sein Gast-WLAN nicht beliebig nennen sollte

Erfahrungsbericht von Henere vor 1 TagHumor (lol)5 Kommentare

Servus, mal was aus dem Alltag. Zu Hause. Eigentlich wollte ich nur einen weiteren WLAN-AP ins Netz bringen, damit ...

Sicherheit

Schwachstelle in Intel SPI Flash Firmware kann manipuliert werden

Information von sabines vor 2 TagenSicherheit

Es existiert ein Problem in einigen Intel Chipsätzen, das durch einen lokalen Angreifer genutzt werden könnte. Die Firmware befindet ...

Heiß diskutierte Inhalte
Off Topic
1st , 2nd Level Support Techniker - Patchfeld und Switche etc.
Frage von pixel0815Off Topic30 Kommentare

Moin zusammen, ich weiß gar nicht ob es hier richtig ist, aber mich würde mal interessieren wie ihr das ...

Windows Netzwerk
LAN nur 10MB pro s trotz gb lan
Frage von tsunamiWindows Netzwerk19 Kommentare

Hallo zusammen, ich brauche mal wieder einen Anstoß in die richtige Richtung. Ich habe einen Windows 10 pc mit ...

Festplatten, SSD, Raid
Server SSD: NVMe PCIe 3.0 RAID?
Frage von bouneeFestplatten, SSD, Raid14 Kommentare

Hallo liebe Admins, mir stellt sich gerade die Frage, ob ein neuer Server mit SSD NVMe PCIe 3.0 Sinn ...

Windows 10
Windows 10 Startmenü-Einstellungen Systemweit festlegen
Frage von flotautWindows 1013 Kommentare

Guten Morgen liebe Admins, wir möchten bei uns am Lehrstuhl demnächst auf Windows 10 umsteigen. Wir installieren unsere PC's ...