08. juni 2006 - 02:37Der er
16 kommentarer og 1 løsning
Åbne Excel fra Wordmakro
Jeg har en Word fil med en Document_Open-makro der indstiller filplaceringer i indstillinger. En variabel der får sin værdi fra en inputboks indstiller den nederste mappe i default stien til standard Dokument placering. I excel har jeg en lignende makro (men uden variabel). også denne makro er en automatisk selkørende makro. Her hedder det bare en Workbook_Open() makro. Variablen i Word makroen er der fordi man skal kunne indstille standard Dokument placering til 1 af 3 forskellige mapper for ca. 30 brugere. Kan man fra word makroen åbne Excel filen med indstillingsmakroen, indstille standard Dokument placering i Excel til den værdi variablen i Word har og derefter køre den? Jeg lægger en kommentar med koden fra de 2 makroer her nedenunder.
Excel makroen: Placeret i VBAProject (Filnavn) → Microsoft Excel Objects → ThisWorkbook
Private Sub Workbook_Open() With Application .DefaultFilePath = "G:\INST\PSF\Hoejsletten\B-huset" Application.AutoRecover.Path = "W:\" End With End Sub
Public Sub AutoOpen() Dim xlsApp As Excel.Application Set xlsApp = CreateObject("Excel.Application") xlsApp.Workbooks.Add "C:\Temp\ExcelTestOpen.xls" 'Ret til egen sti+navn xlsApp.Visible = True xlsApp.Run "ThisWorkbook.RunWorkBookOpen", "Ferie:\Nu", "Feriepenge" End Sub
'Under Tools, References skal du tilføje "Microsoft Excel 11.0 Object Library" (eller hvilken version af Excel du nu har)
[Excel] ThisWorkbook: Option Explicit
Private Sub Workbook_Open() 'Undlad at bruge den her hvis du bare vil lave indstillingerne MsgBox "Workbook_Open" End Sub
Public Sub RunWorkBookOpen(xDefaultFilePath As String, xAutoRecoverPath As String) MsgBox "Sub RunWorkBookOpen" MsgBox "Defaultfilepath " & xDefaultFilePath & vbNewLine & "AutorecoverPath: " & xAutoRecoverPath End Sub
Hos mig giver det flg. reaktionerne når jeg åbner Word-dokumentet
Jeg tvivler på at du kan nå at overføre parametre til Workbook_Open da den bliver eksekveret når xls-filen loades, så dette er desværre ikke den løsning du gerne ville have, men den kommer derhenad :-)
Hmm, du kan også gå vejen via Registry. Word opretter værdier i Registry, Excel læser og sletter.
[Word] Option Explicit
Sub Document_Open() Dim I As String Dim xlsApp As Object 'Spørg brugeren osv. I = "HusI" System.PrivateProfileString("", "HKEY_Current_User\Software\VB and VBA Program Settings\Brugerhuset\InfoFromWord", "DefaultFilePath") = "G:\INST\PSF\Hoejsletten\" & I System.PrivateProfileString("", "HKEY_Current_User\Software\VB and VBA Program Settings\Brugerhuset\InfoFromWord", "DefaultRecoverPath") = "W:\"
Set xlsApp = CreateObject("Excel.Application") xlsApp.Workbooks.Add "C:\Temp\ExcelTestOpen.xls" 'Ret til egen sti+navn xlsApp.Visible = True End Sub
'Det er ikke nødvendigt at have Excel som Reference 'OBS: Det er "VB and VBA Program Settings", mellemrum kan jo forsvinde ;-)
[Excel] Option Explicit
Private Sub Workbook_Open() MsgBox "DefaultFilePath: " & GetSetting("Brugerhuset", "InfoFromWord", "DefaultFilePath") _ & vbNewLine & _ "DefRecoverPath: " & GetSetting("Brugerhuset", "InfoFromWord", "DefaultRecoverPath") 'OBS: DeleteSetting giver fejl hvis der ikke er noget at slette. On Error Resume Next DeleteSetting "Brugerhuset", "InfoFromWord", "DefaultFilePath" DeleteSetting "Brugerhuset", "InfoFromWord", "DefaultRecoverPath" On Error GoTo 0 End Sub
Hvis Excel havde haft samme nemme adgang til INI-filer som Word, så kunne den løsning også have været brugt. (Du kan også bruge en "dum" tekstfil, hvor hver linie har den betydning du ønsker.)
Denne løsning kommer lidt tættere på dit ønske om at få værdierne hældt ind i Excel når Workbook_Open bliver udført.
Jeg prøver. Den 'Registry' du henviser til, er det registreringsdatabasen? Vores IT administratorer har fornuftigt nok spærret adgangen til registreringsdatabasen, desuden foregår alt arbejde i en virtuel PC under Citrix. Det er faktisk det der, sammen med administratorernes glimrende evner for at administrere systemerne, ofte gør det nødvendigt at indstille standard filplaceringer i programmerne. Og der er godt 30 brugere der hver skal have foretaget indstillingerne hver gang det er gået galt.
Ups, Nu virker det sørme. Jeg har lavet lidt om, det betyder at jeg skal indtaste bogstav for huset i 2 input-bokse. Koden ser nu sådan ud Word Makroen: Placeret i Project (Filnavn) Microsoft Word Objects ThisDocument
Sub Document_Open() Dim hus As String
BrugerHus = InputBox("Hvilket hus skal Word indstilles til? (A,B eller C)")
Tilføj: Set xlsApp = Nothing End lige før "End Sub" i Word-delen.
Selvom jeres IT-adminstratorer har lukket for adgang til Registry via Regedit.exe, så kan der godt være adgang via Word/Excel, aht. dine brugere (de slipper for at svare een gang til :-) ), så bør du prøve om det kan lade sig gøre, IMHO.
Nap bare pointene tilbage, for det var kun anvisninger på en løsning, ikke løsningen :-)
Har nu en løsning der virker. Prøver senere dit forslag. Venter med at lukke til det er afprøvet. Jeg vender tilbage med en beretning senere, får først afprøvet det engang i nat.
Har prøvet en del gange at få det til at virke efter dine anvisninger. Trods alt ville det være bedre om det kun var 1 inputboks jeg skulle angive hus i. Men det er ikke lykkedes. Det virker med nedenstående kode, men jeg skal som sagt taste hus-bogstav i 2 inputbokse.
Word makro:
Option Explicit
Sub Document_Open() Dim BrugerHus As String Dim xlsApp As Object
BrugerHus = InputBox("Hvilket hus skal Word indstilles til? (A,B eller C)")
Set xlsApp = CreateObject("Excel.Application") xlsApp.Workbooks.Open "G:\INST\PSF\Hoejsletten\IT mappen\Indstillinger.xls" xlsApp.Visible = True
Set xlsApp = Nothing End
End Sub
Excel makro:
Option Explicit
Private Sub Workbook_Open() Dim BrugerHus As String
BrugerHus = InputBox("Hvilket hus skal Excel indstilles til? (A,B eller C)")
BrugerHus = BrugerHus & "-huset\" With Application .DefaultFilePath = "G:\INST\PSF\Hoejsletten\" & BrugerHus Application.AutoRecover.Path = "W:\" End With End Sub
Tror du at det kan lade sig gøre at få overført variablen BrugerHus fra Word til Excel?
Jeps. I det første eksempel blev Workbook_Open reelt ikke brugt, derimod blev RunWorkBookOpen brugt til at modtage værdier fra Word. Med udgangspunkt i din kommentar "09/06-2006 00:07:01", så prøv det her:
[Word] Module1 Option Explicit
Sub Document_Open() Dim BrugerHus As String Dim xlsApp As Object
BrugerHus = InputBox("Hvilket hus skal Word indstilles til? (A,B eller C)")
Set xlsApp = CreateObject("Excel.Application") xlsApp.Workbooks.Add "C:\Temp\ExcelTestOpen.xls" 'Ret til egen sti+navn 'xlsApp.Workbooks.Open "G:\INST\PSF\Hoejsletten\IT mappen\Indstillinger.xls" xlsApp.Visible = True xlsApp.Run "ThisWorkbook.SubToBeCalledFromWord", BrugerHus, "W:\"
Set xlsApp = Nothing End End Sub
PS: Til forskel fra mit første eksempel er reference til Excel overflødig her. PPS: Brugerinput valideres ikke, så tastefejl slår igennem på stierne.
[Excel] ThisWorkbook
Option Explicit
Private Sub Workbook_Open() 'Intet. Excel skal bare åbne og være stille. 'Indstillingerne foregår i den næste sub. End Sub
Public Sub SubToBeCalledFromWord(Optional Brugerhus, Optional AutoRecoverPath) With Application MsgBox "DefaultFilePath: " & Brugerhus & vbNewLine & _ "AutoRecoverPath: " & AutoRecoverPath, , "Stier fra Word" 'MsgBox anvendt aht. debug/synlighed. 'Rem linien ud, og fjern ' foran de næste 2 linier '.DefaultFilePath = Brugerhus '.AutoRecover.Path = AutoRecoverPath End With End Sub
Public Sub SubToBeCalledFromWord(Optional Brugerhus, Optional AutoRecoverPath) With Application .DefaultFilePath = Brugerhus .AutoRecover.Path = AutoRecoverPath
MsgBox "Dokumentmappe er indstillet til: " & Brugerhus & vbNewLine & _ "Filer til automatisk gendannelse gemmes i: " & AutoRecoverPath, , "Stier i Word og Excel"
VBA-udtryk. Det nemmeste er at bruge den eventuelt installerede hjælp til hhv. Word & Excel ;-). Dvs. i VBA-"miljøet", vælg Help/Hjælp på menulinien, i hjælpen kig under bl.a. "Microsoft Visual Basic Documentation" (Word). Microsoft har en 1 år gl. KB-artikel med nogle få links/henvisninger http://support.microsoft.com/kb/226118/EN-US/ http://mvps.org/ er også et godt sted at kigge efter "inspiration" :-)
Gode tilføjelser, du kan også vælge ikke at gøre Excel synlig, så slipper brugerne for at se hvad du foretager dig ;-)
Tak for hjælpen. Det fungerer lige som jeg havde tænkt mig nu.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.