Du kan sagtens køre en makro, hver gang et dokument åbnes, og du kan få makroen til at lukke dokumentet igen, men jeg ved til gengæld ikke lige, hvordan du får dokumentet åbnet, hver gang der kommeer et nyt dokument i mappen.
Din makro skal hedde autoopen og vil gælde for alle dokumenter, du åbner, altså også dokumenter, du selv åbner i Word. Derfor må din egen kode nok indeholde et check for om der skal afsluttes på en eller anden måde.
Sub autoopen()
'din kode her...
ActiveDocument.Close 'Hvis du vil lukke dokumentet Application.Quit 'Hvis du vil afslutte Word
End Sub
Synes godt om
Slettet bruger
04. oktober 2004 - 11:14#3
se nu begynder det at virke interesant ;) kan man så flette ind i koden at det kun skal være på dokumenter fra en bestemt mappe? Lukker ActiveDocument.Close uden at gemme ændringer?
Denne kode ser på, hvor dokumentet ligger gemt. Kun hvis det ligger i c:\test udføres resten af koden, ellers åbnes dokumentet normalt.
Hvis dokumentet ligger i c:\test udføres koden, dokumentet gemmes og lukkes.
Sub autoopen() If UCase(ActiveDocument.Path) = UCase("c:\test") Then 'Din kode.... Else Exit Sub End If ActiveDocument.Save ActiveDocument.Close End Sub
dim myFolderP 'stien til mappen som skal undersøges myFolderP="C:\test"
sub openWord1(fname) dim oShell Set oShell = WScript.CreateObject("WScript.shell") oShell.run("winword "&myFolderP&"\"&fname) set oShell = nothing end sub
sub openWord(fname) dim app Set app = Wscript.CreateObject("Word.Application") app.Visible = false app.Documents.Open(myFolderP&"\"&fname) 'navnet på den makro som skal køres app.run("Makro1") app.Quit set app = nothing end sub function chkFolder() chkFolder=true Dim objFSO dim folder,fileCol,fil
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") set folder = objFSO.getFolder(myFolderP) set fileCol = folder.Files
For Each fil in filecol if right(fil.name,3)="doc" then openWord(fil.name) end if if left(fil.name,4)="term" then chkFolder=false end if Next Set objFSO = Nothing end function
dim a
while chkFolder() WScript.sleep(10000) wend
Scriptet kører hvert 10 sek, og undersøger en mappe for worddocumenter. Hvis der findes et worddocument i mappen kører den en makro på dokumentet og lukker dokumentet igen. Scriptet kører i en uendelighed ind til der lægges en fil som starter med "term" i mappen.
Det eneste problem som jeg ser det med ovenstående script er, at den jo bliver ved med at køre hvert 10 sek, sålænge dokumentet er i mappen. Men jeg ved ikke helt hvad du har tænkt på der.
tofte-> Som jeg læser det oprindelige spørgsmål ligger der hele tiden word-dokumenter i mappen, og koden skal derfor undersøge om der er kommet nye dokumenter siden den blev kørt sidst. Og så skal den åbne de nye dokumenter.
Og hvor lægger du din kode? Hvis det er i word kræver det jo at word er startet hele tiden.
nej det er bare et vbs. Du gemmer bare ovenstående kode som en .vbs fil. som så kører som et alm job på maskinen. Så den bruger kun word til at køre macroen på dokumentet. Jeg skal lige tænke over, hvordan jeg klarer det andet.
Synes godt om
Slettet bruger
04. oktober 2004 - 14:04#9
Der ligger hele tiden dokumenter i mappen med almindelig tekst. Som i et txt dokument, filnavnsendelses hedder bare rpt.. Der kan godt blive lagt to dokumenter ind med meget kort mellemrum. (samtidigt) Jeg vælger at bruge din kode, jkrons (04/10-2004 12:24:37) Og så kører jeg overvågningen og selve åbningen af dokumenterne fra c++. Jeg opretter et nyt spm mht overvågning og åbning. Tak for hjælpen begge to. Jkrons, du får point.. (hvis du da lægger et svar ;) )
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.