Avatar billede perhol Seniormester
08. juni 2006 - 02:37 Der 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.
Avatar billede perhol Seniormester
08. juni 2006 - 02:38 #1
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)")
   
    I = BrugerHus & "-huset\"
   
    Options.DefaultFilePath(Path:=wdDocumentsPath) = _
        "G:\INST\PSF\Hoejsletten\" & I
        Options.DefaultFilePath(Path:=wdUserTemplatesPath) = _
        "G:\INST\PSF\Hoejsletten\Lokale Skabeloner\"
    Options.DefaultFilePath(Path:=wdWorkgroupTemplatesPath) = _
        "S:\Forvaltning\PSF\"
    Options.DefaultFilePath(Path:=wdAutoRecoverPath) = "W:\"
    Options.DefaultFilePath(Path:=wdStartupPath) = _
        "W:\Application Data\Microsoft\Word\STARTUP\"

End Sub


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
Avatar billede perhol Seniormester
08. juni 2006 - 02:39 #2
Teksterne [→ ] er en pil der peger til højre
Avatar billede learningvba Nybegynder
08. juni 2006 - 09:34 #3
Prøv med

[Word]
Module1:
Option Explicit

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

1) Msgbox: [Microsoft Excel] Workbook_Open

2) Excel bliver synligt, lagt forrest

3) Msgbox: [Microsoft Excel] Sub RunWorkBookOpen

4) Msgbox: [Microsoft Excel] DefaultFilePath Ferie:\Nu
                            AutorecoverPath: Feriepenge

5) Excel forbliver i fokus (forreste applikation)


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 :-)
Avatar billede learningvba Nybegynder
08. juni 2006 - 11:21 #4
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.
Avatar billede perhol Seniormester
08. juni 2006 - 12:05 #5
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.
Avatar billede perhol Seniormester
08. juni 2006 - 13:35 #6
Det virker ikke endnu, og nu skal jeg på arbejde.
Vender tilbage i morgen.
Avatar billede perhol Seniormester
08. juni 2006 - 13:51 #7
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)")
   
    I = BrugerHus & "-huset\"
   
    Options.DefaultFilePath(Path:=wdDocumentsPath) = _
        "G:\INST\PSF\Hoejsletten\" & I
        Options.DefaultFilePath(Path:=wdUserTemplatesPath) = _
        "G:\INST\PSF\Hoejsletten\Lokale Skabeloner\"
    Options.DefaultFilePath(Path:=wdWorkgroupTemplatesPath) = _
        "S:\Forvaltning\PSF\"
    Options.DefaultFilePath(Path:=wdAutoRecoverPath) = "W:\"
    Options.DefaultFilePath(Path:=wdStartupPath) = _
        "W:\Application Data\Microsoft\Word\STARTUP\"
       
        Set xlsApp = CreateObject("Excel.Application")
  xlsApp.Workbooks.Open "G:\INST\PSF\Hoejsletten\IT\TestIndstillinger.xls"
  xlsApp.Visible = True

End Sub


Excel makroen:
Placeret i VBAProject (Filnavn)
Microsoft Excel Objects
ThisWorkbook

Private Sub Workbook_Open()
Dim hus As String

BrugerHus = InputBox("Hvilket hus skal Excel indstilles til? (A,B eller C)")
   
    I = BrugerHus & "-huset\"
    With Application
        .DefaultFilePath = "G:\INST\PSF\Hoejsletten\" & I
        Application.AutoRecover.Path = "W:\"
    End With
End Sub

> learningvba læg et svar, noget af koden har du vist mig :-)
Avatar billede learningvba Nybegynder
08. juni 2006 - 14:23 #8
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 :-)
Avatar billede perhol Seniormester
08. juni 2006 - 14:32 #9
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.
Avatar billede perhol Seniormester
09. juni 2006 - 00:07 #10
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)")
   
    BrugerHus = BrugerHus & "-huset\"
   
    Options.DefaultFilePath(Path:=wdDocumentsPath) = _
        "G:\INST\PSF\Hoejsletten\" & BrugerHus
        Options.DefaultFilePath(Path:=wdUserTemplatesPath) = _
        "G:\INST\PSF\Hoejsletten\Lokale Skabeloner\"
    Options.DefaultFilePath(Path:=wdWorkgroupTemplatesPath) = _
        "S:\Forvaltning\PSF\"
    Options.DefaultFilePath(Path:=wdAutoRecoverPath) = "W:\"
    Options.DefaultFilePath(Path:=wdStartupPath) = _
        "W:\Application Data\Microsoft\Word\STARTUP\"
       
        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?
Avatar billede learningvba Nybegynder
09. juni 2006 - 08:12 #11
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)")

  BrugerHus = "G:\INST\PSF\Hoejsletten\" & BrugerHus & "-huset\"
  Options.DefaultFilePath(Path:=wdDocumentsPath) = Brugerhus
  Options.DefaultFilePath(Path:=wdUserTemplatesPath) = _
      "G:\INST\PSF\Hoejsletten\Lokale Skabeloner\"
  Options.DefaultFilePath(Path:=wdWorkgroupTemplatesPath) = _
      "S:\Forvaltning\PSF\"
  Options.DefaultFilePath(Path:=wdAutoRecoverPath) = "W:\"
  Options.DefaultFilePath(Path:=wdStartupPath) = _
      "W:\Application Data\Microsoft\Word\STARTUP\"
     
  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
Avatar billede perhol Seniormester
09. juni 2006 - 09:20 #12
Det virker næsten perfekt ;-)
Jeg bruger xlsApp.Workbooks.Open i stedet for xlsApp.Workbooks.Add og MsgBox er ændret.

Kan du også tilføje kode så både Word og Excel lukkes når der bliver trykket på "OK" i MsgBox?

Jeg lægger lige den komplette kode ind her igen.

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)")

  BrugerHus = "G:\INST\PSF\Hoejsletten\" & BrugerHus & "-huset\"
  Options.DefaultFilePath(Path:=wdDocumentsPath) = BrugerHus
  Options.DefaultFilePath(Path:=wdUserTemplatesPath) = _
      "G:\INST\PSF\Hoejsletten\Lokale Skabeloner\"
  Options.DefaultFilePath(Path:=wdWorkgroupTemplatesPath) = _
      "S:\Forvaltning\PSF\"
  Options.DefaultFilePath(Path:=wdAutoRecoverPath) = "W:\"
  Options.DefaultFilePath(Path:=wdStartupPath) = _
      "W:\Application Data\Microsoft\Word\STARTUP\"
   
  Set xlsApp = CreateObject("Excel.Application")
  xlsApp.Workbooks.Open "G:\INST\PSF\Hoejsletten\IT mappen\TestIndstillinger.xls"
  xlsApp.Visible = True
  xlsApp.Run "ThisWorkbook.SubToBeCalledFromWord", BrugerHus, "W:\"

  Set xlsApp = Nothing
  End
End Sub

Excel Makro:

Option Explicit

Private Sub Workbook_Open()

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"

  End With
End Sub
Avatar billede perhol Seniormester
09. juni 2006 - 09:22 #13
Tillægs spørgsmål:

Jeg har ledt efter en fortegnelse over de udtryk der kan anvendes i VBA.
Findes det? Og gerne på nettet ;-)
Avatar billede perhol Seniormester
10. juni 2006 - 00:34 #14
Fandt selv noget til det sidste.

Tilføjede følgende mellem End With og End Sub i Excel filen
 
    Application.DisplayAlerts = False
    Application.Quit

Og det samme i Word filen før End og End Sub
Avatar billede perhol Seniormester
10. juni 2006 - 00:37 #15
>learningvba

Du gav mig jo løsningen på mit oprindelige spørgsmål.
Læg et svar, du har fuldt ud fortjent point.

;-)
Avatar billede learningvba Nybegynder
12. juni 2006 - 08:07 #16
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 ;-)


Points, pyt, behold dem bare :-)
Avatar billede perhol Seniormester
12. juni 2006 - 11:12 #17
Tak for hjælpen.
Det fungerer lige som jeg havde tænkt mig nu.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester