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

Kein Zugriff auf Datei nach speichern im Dateisystem (VBA?!)

Mitglied: greatsteffen

greatsteffen (Level 1) - Jetzt verbinden

29.08.2006, aktualisiert 30.08.2006, 5883 Aufrufe, 5 Kommentare

Ein Worddokument wird per Makro auf dem Server abgelegt (gespeichert). Da es aber noch geöffnet ist kann ein Prozess auf dem Server nicht auf das Dokument zugreifen und es verarbeiten.

Wie in der Einleitung kurz geschildert, kann der Serverprozess, welcher alle 2 Minuten das Verzeichnis überprüft nicht auf die geöffneten Worddokumente zugreifen. Ich möchte die Dokumente nun irgendwie schließen (das Handle oder sonst was, sodass der Server diese anpacken kann und verarbeiten. Es sollen ja nur Snapshots von dem Dokument gespeichert werden und kein permanenter verlauf.

kurz um >> Das Worddokument schließen ohne es wirklich zu schließen ;)

Am besten das ganze per vba-makro....

wenn jemand eine idee hat wäre das super!
Mitglied: Biber
29.08.2006 um 14:13 Uhr
Na, "irgendwie schließen" könnte aber den normalen Arbeitsablauf Deiner User geringfügig beeinträchtigen.
Reicht ein .Document.Save nicht?

Ich würde die Word-Datei im reinen Nur-Lese-Modus öffnen im neuen Prozess.
Wenn ich überhaupt etwas davon "lesen" will.

Was soll den das hehre Ziel dieses Serverprozesses sein?

Gruß
Biber
Bitte warten ..
Mitglied: greatsteffen
30.08.2006 um 08:03 Uhr
auf dem verzeichnis auf dem server lauscht ein xmlmaker, welcher auf eine steuerdatei wartet, die durch ein makro im word zusammen mit dem dokument selbst auf dem server abgelegt werden. dieser xml maker erzeugt eine neue datei (xml), die an ein archivsystem übergeben wird. dieses archivsystem schnappt sich das xml-file und packt es zusammen mit dem doc ins archivierungssystem.

klingt alles ein wenig kompliziert, klappt aber eigentlich schon ganz gut, nur eben an dem punkt, wo das archivsystem das erzeugte xml-file schnappt und zusammen mit dem word-dokument verarbeiten will hakt es, weil das word dokument ja noch beim user geöffnet ist.

das ding ist nur, es soll ja auch beim user geöffnet bleiben, damit er weiter dran arbeiten kann. jedesmal, wenn er das archivierungsmakro ausführt bekommt die datei einen neuen timestampnamen. somit ist es möglich immer wieder eine neuere versin des dokumentes im archiv abzulegen.

und zum schluss:
erst beim erneuten ausführen des makros wird ja die "alte" dokumentversion geschlossen und eine neue auf dem server angelegt, somit kann nun die alte version verarbeitet werden. der user soll aber nicht 2 mal auf das makro klicken um die als erstes erzeugte version ins archiv zu bekommen.

die lösung:???
meine idee wäre nun den kram zuerst in einem zwischenordner zu speichern und nach dem speichern die dateien in den eigentlichen zielordner zu kopieren. nach der zeit x wird der zwischen ordner per task geleert (z.b. nachts um 24 uhr, dann erwischt man hoffentlich keine "noch nicht in den zielordner verschobenen dateien".

das ganze ist aber recht umständlich und deswegen soll das ja auch irgenwie per makro klappen, das ich dem rechner, ähnlich wie im unixsystem, die datei untern hintern wegziehe, obwohl er sie noch offen hat...

MfG - Steffen
Bitte warten ..
Mitglied: greatsteffen
30.08.2006 um 10:38 Uhr
ich hab das makro erweitert und versuche das Doc zu kopieren, allerdings verweigert er mir den zugriff auf das doc!!!!

kann man den kopiervogang erzwingen?
Bitte warten ..
Mitglied: Biber
30.08.2006 um 10:46 Uhr
ich hab das makro erweitert und versuche das
Doc zu kopieren, allerdings verweigert er mir
den zugriff auf das doc!!!!

kann man den kopiervogang erzwingen?

Kannst Du denn von diesem Makro bzw. von der letzten Erweiterung mal die relevanten Zeilen posten bitte?

Das ist mir so (noch) zu abstrakt.

Danke
Biber
Bitte warten ..
Mitglied: greatsteffen
30.08.2006 um 11:54 Uhr
ok - das prob schein zu 99% gelöst!
hab trick 17 angewendet, auch wenn das nicht die beste variante ist.
ich speichere das dok einfach sofort ein 2.mal mit einem anderem namenszusatz, dann kann ich die erste version weiterverarbeiten.


der gesamte makrocode sieht so aus (sollte auch in einem blanko dokument funzen):
Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

01.
Sub Archiv()
02.
Dim Sektion$, ApplicationTag$, Sender$, File$, Zielpfad$, Zwischenablage$, Steuerdateierweiterung$, Dateiname_hps$, Nrtype$
03.
 
04.
    '------------- Parameterbelegung ------------------
05.
    
06.
    'Speicherpfad für beide Dateien (HPS und DOC)
07.
    Zielpfad = "\\testserver\testverzeichnis\"
08.
    Zwischenablage = "\\testserver\testverzeichnis\Zwischenablage\"
09.
    Steuerdateierweiterung = "hps"
10.
    
11.
    '---------------------------------------------------
12.
   
13.
    'Auslesen des Bereiches zwischen 2 Textmarken
14.
    Dim Textmarke_1, Textmarke_2, Textmarke_3, Textmarke_4
15.
    
16.
    'Textmarken, zwischen denen der Text ausgewählt wird
17.
    Textmarke_1 = "KUNDENNR"
18.
    Textmarke_2 = "KUNDENNR_ENDE"
19.
    Textmarke_3 = "LIEFERANTENNR"
20.
    Textmarke_4 = "LIEFERANTENNR_ENDE"
21.
    
22.
    
23.
    '########## Prüfen ob Kunde ############################
24.
    Dim kDoc As Document
25.
    Dim kRange As Range
26.
    
27.
    Set kDoc = ActiveDocument
28.
    If kDoc.Bookmarks.Exists(Textmarke_1) And kDoc.Bookmarks.Exists(Textmarke_2) Then
29.
        Set kRange = kDoc.Range(Start:=kDoc.Bookmarks(Textmarke_1).Range.Start, End:=kDoc.Bookmarks(Textmarke_2).Range.Start)
30.
        kRange.Select
31.
        'Wenn Kundennummer gefunden wurde
32.
        If kRange <> " " And kRange <> "" Then
33.
            Nrtype = "Kunde"
34.
            'MsgBox (kRange)
35.
            
36.
            Call Titel(Zielpfad, Zwischenablage, Steuerdateierweiterung, kRange, Nrtype)
37.
            
38.
        Else
39.
            '########## Prüfen ob Lieferant #######################
40.
            Dim lDoc As Document
41.
            Dim lRange As Range
42.
            
43.
            Set lDoc = ActiveDocument
44.
            If lDoc.Bookmarks.Exists(Textmarke_3) And lDoc.Bookmarks.Exists(Textmarke_4) Then
45.
                Set lRange = lDoc.Range(Start:=lDoc.Bookmarks(Textmarke_3).Range.Start, End:=lDoc.Bookmarks(Textmarke_4).Range.Start)
46.
                lRange.Select
47.
                'Wenn Lieferantennummer gefunden wurde
48.
                If lRange <> " " And lRange <> "" Then
49.
                    Nrtype = "Lieferant"
50.
                    'MsgBox (NrType)
51.
                    
52.
                    Call Titel(Zielpfad, Zwischenablage, Steuerdateierweiterung, lRange, Nrtype)
53.
                    
54.
                Else
55.
                    '####### wenn keine KDNR und keine LFRNR gefunden wird ####################
56.
                    Nrtype = "Unbekannt"
57.
                    Call Case_manuell(Zielpfad, Zwischenablage, Steuerdateierweiterung, Nrtype)
58.
                End If
59.
            Else
60.
                '####### Falls keine Textmarken nach Lieferantensuche gefunden werden #######################
61.
                Call Case_manuell(Zielpfad, Zwischenablage, Steuerdateierweiterung, Nrtype)
62.
            End If
63.
        End If
64.
    Else
65.
    '####### Falls keine Textmarken gefunden werden ###########
66.
    Call Case_manuell(Zielpfad, Zwischenablage, Steuerdateierweiterung, Nrtype)
67.
    End If
68.
    
69.
End Sub
70.
 
71.
 
72.
Function Case_manuell(Zielpfad, Zwischenablage, Steuerdateierweiterung, Nrtype)
73.
Dim Mldg, Stil, Titel, Hilfe, Ktxt, Antwort, Text1
74.
Mldg = "Es wurden keine Textmarken gefunden" & vbCrLf & "Soll eine manuelle Zuweisung vorgenommen werden?"
75.
Stil = vbYesNo + vbCritical + vbDefaultButton1
76.
Titel = "Fehler beim Auslesen der Textmarken"
77.
Antwort = MsgBox(Mldg, Stil, Titel)
78.
If Antwort = vbYes Then
79.
  Call Neue_Nummer(Zielpfad, Zwischenablage, Steuerdateierweiterung, Nrtype)
80.
Else
81.
   
82.
End If
83.
End Function
84.
 
85.
 
86.
Function Neue_Nummer(Zielpfad, Zwischenablage, Steuerdateierweiterung, Nrtype)
87.
    'Nach Nummerfragen
88.
    Dim manuelle_Nummer
89.
    manuelle_Nummer = InputBox("Keine Kundennummer oder Lieferantennummer gefunden." & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "Bitte Nummer eingeben.", "Manuelle Nummerzuweisung für " & Nrtype, "")
90.
    If manuelle_Nummer = "" Then
91.
       manuelle_Nummer = " "
92.
    End If
93.
 
94.
    Call Titel(Zielpfad, Zwischenablage, Steuerdateierweiterung, manuelle_Nummer & " ", Nrtype)
95.
End Function
96.
 
97.
 
98.
Function Titel(Zielpfad, Zwischenablage, Steuerdateierweiterung, Nummer, Nrtype) As Variant
99.
    'Name des Dokuemtes eingeben
100.
    Dim DocName
101.
    DocName = InputBox("Bitte Dokumentname eingeben:", "Dokumentname für Schreiben an " & Nrtype & " (Nr." & Nummer & ")", "neues Dokument")
102.
    If DocName = "" Then
103.
       DocName = "Neues Dokument"
104.
    End If
105.
    
106.
    'Nochmal fragen ob Dokument wirklich ins Archiv geschoben werden soll
107.
    Dim Archivantwort
108.
    Archivantwort = MsgBox("Möchten Sie das Dokument wirklich ins Archiv einfügen?", vbYesNo + vbQuestion + vbDefaultButton1, "Einfügen bestätigen")
109.
    If Archivantwort = vbYes Then
110.
        'speichern
111.
        Call Speichern(Zielpfad, Zwischenablage, Steuerdateierweiterung, Nummer, DocName)
112.
    Else
113.
        'nix
114.
    End If
115.
End Function
116.
 
117.
Function Speichern(Zielpfad, Zwischenablage, Steuerdateierweiterung, Nummer, DocName) As Variant
118.
    
119.
    'Variablen zum Speichern
120.
    Dim Sektion$, ApplicationTag$, Sender$, File$
121.
    
122.
    'Dateipfad und Name fuer HPS und DOC aus Datum basteln
123.
    Dim Part(1 To 3) As String
124.
    Part(1) = Zwischenablage
125.
    Part(2) = Format(Date, "yyyymmdd") + "_" + Format(Time, "hhmmss")
126.
    Part(3) = "." & Steuerdateierweiterung
127.
    Dateiname_hps = Part(1) & Part(2) & Part(3)
128.
    'MsgBox (Dateiname_hps)
129.
 
130.
    'Erste Zeile (mit eckigen Klammern)
131.
    Sektion = "[Info]"
132.
    
133.
    'ApplicationTag
134.
    ApplicationTag = "ApplicationTag=" & Nummer & DocName
135.
    'MsgBox (ApplicationTag)
136.
 
137.
    'Sender
138.
    Sender = "Sender=" & Environ("Username")
139.
    'MsgBox (Sender)
140.
 
141.
    'File
142.
    File = "File=" & Part(2) & ".doc"
143.
    'MsgBox (File)
144.
    
145.
    'HPS schreiben
146.
    Open Dateiname_hps For Append As 1
147.
    Print #1, Sektion$
148.
    Print #1, ApplicationTag$
149.
    Print #1, Sender$
150.
    Print #1, File$
151.
    Close #1
152.
    
153.
    'Dokumentpfad und Name der Word-Datei aus Datum basteln
154.
    Dim Part_doc(1 To 3) As String
155.
    Part_doc(1) = Zwischenablage
156.
    Part_doc(2) = Part(2)
157.
    Part_doc(3) = ".doc"
158.
    Dateiname_doc = Part_doc(2) & Part_doc(3)
159.
        
160.
    'DOC schreiben in Zwischenablageordner
161.
    ChangeFileOpenDirectory Part_doc(1)
162.
    ActiveDocument.SaveAs FileName:=Dateiname_doc, FileFormat:= _
163.
        wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
164.
        True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
165.
        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
166.
        SaveAsAOCELetter:=False
167.
        
168.
    'DOC schreiben in Zwischenablageordner mit Namenszusatz "_saved"
169.
    Dim Dateiname_Saved
170.
    Dateiname_Saved = Part_doc(2) & "_saved" & Part_doc(3)
171.
    ChangeFileOpenDirectory Part_doc(1)
172.
    ActiveDocument.SaveAs FileName:=Dateiname_Saved, FileFormat:= _
173.
        wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
174.
        True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
175.
        False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
176.
        SaveAsAOCELetter:=False
177.
         
178.
        
179.
    'von der Zwischenablage in den Zielpfad kopieren
180.
    Dim Datei_hps
181.
    Datei_hps = Part(2) & Part(3)
182.
    Call Copy_to_Target(Zwischenablage, Zielpfad, Datei_hps, Dateiname_doc)
183.
    
184.
End Function
185.
 
186.
Function Copy_to_Target(Zwischenablage, Zielpfad, Datei_hps, Dateiname_Dokument)
187.
    
188.
    'HPS und DOC kopieren
189.
    FileCopy Zwischenablage & Datei_hps, Zielpfad & Datei_hps
190.
    FileCopy Zwischenablage & Dateiname_Dokument, Zielpfad & Dateiname_Dokument
191.
    
192.
    'HPS und DOC aus Zwischenablageordner löschen (nur geöffnetes DOC ist noch da!)
193.
    Kill Zwischenablage & Datei_hps
194.
    Kill Zwischenablage & Dateiname_Dokument
195.
End Function
verbesserungsvorschläge??
ist natürlich ein bissel umständlich 2 mal was zu speichern und es nach dem kopieren wieder zu löschen, aber immerhin klappt es! ;)

die restlichen "leichen" aus dem zwischenablagenordner kanni ich ja nachts (wenn hoffentlich kein mitarbeiter mehr ein dok offen hat) per task löschen lassen...

;)
Bitte warten ..
Ähnliche Inhalte
VB for Applications

Zugriff auf Datei auf Sambalaufwerk mit VBA(Execl)

gelöst Frage von qwertz1VB for Applications3 Kommentare

Hallo, ich habe ein Problem mit vba unter Excel und Samba. Ein Vba-Skript soll auf eine Vorlage zugreifen. Die ...

Microsoft Office

VBA Import Datei nicht gefunden

gelöst Frage von Latex78Microsoft Office3 Kommentare

Hi Leute, ich bekomme mehrere Textdatei von einer Software auf den Rechner geschrieben. Dazu habe ich mir einen TXT-Import ...

Linux

SELinux Zugriff auf Datei

Frage von EinLehrlingLinux1 Kommentar

Hallo zusammen, seit kurzem beschäftige ich mich mit SELinux und den dazugehörigen Berechtigungen und bin dabei auf ein Problem ...

Windows Server

Zugriff auf exe Datei überwachen

gelöst Frage von sardldbWindows Server2 Kommentare

Hallo Zusammen Ich habe lange gegoogelt und mir auch ProcessMonitor heruntergeladen und ausprobiert. Leider komme ich nicht auf mein ...

Neue Wissensbeiträge
iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 8 StundeniOS1 Kommentar

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 2 TagenOff Topic1 Kommentar

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 2 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Sicherheit

MikroTik: Sicherheitslücke wird ausgenutzt obwohl ein Update seit langem verfügbar ist

Information von sabines vor 2 TagenSicherheit

Obwohl ein Update, dass die nun massenhaft ausgenutzte Lücke schließt, seit langem (März 2018) verfügbar ist, wird es offensichtlich ...

Heiß diskutierte Inhalte
Exchange Server
Exchange Server 2010: Keine Eingehenden E-MAils
Frage von gabeBUExchange Server15 Kommentare

Hallo Zusammen Ich habe das kurzen auf dem Exchange 2010 Server das Problem, dass ich keine externen E-Mails mehr ...

Rechtliche Fragen
Systemhaus auf Abwegen
Frage von rocco61Rechtliche Fragen13 Kommentare

Hallo zusammen, bin derzeit ratlos bei dem folgenden Scenario: In einen Seniorenheim wurde beschlossen, die IT an eine andere ...

Router & Routing
MikroTik - Routing, Bridging, Switching
gelöst Frage von Alex29Router & Routing9 Kommentare

Hallo in die Runde, als Hobby-Admin würde ich bitte mal wieder Eure Hilfe benötigen. Seit der Umstellung auf RouterOS ...

Outlook & Mail
Kalendersync mit Android und Outlook
Frage von Stefan007Outlook & Mail8 Kommentare

Hi Leute, kennt jemand eine Möglichkeit um Termine zwischen installiertem Outlook auf dem PC und dem Kalender auf einem ...