Avatar billede snowball Novice
08. september 2004 - 14:52 Der er 13 kommentarer og
1 løsning

VBA: Luk xla fil efter reference er fjernet

Ja så er jeg her lige igen ;)

Jeg har mine macroer liggende i en selvstændig xla fil som inkluderes når mit Excel dokument åbnes (se nedenstående kode). Problemet er så at jeg gerne vil ha' denne xla fil lukket når jeg lukker mit Excel dokument. Her tænker jeg på når man bare lukket selve det dokument man har åben i Excel, mens selve Excel stadig er åben. Jeg kan sagtens få fjernet referencen til xla filen, men har som skrevet, problemer med at lukke selve filen. En xla fil ligger som jo ikke oppe under menuen "Windows" ligesom en alm. xla fil, så derfor kan man jo ikke bare lave en f.eks. Application.Windows(1).Close

Jeg bruger pt. nedenstående kode:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  RemoveMacroReference
End Sub

Private Sub Workbook_Open()
  AddMacroReference "C:\Macro.xla"
End Sub

Public Sub AddMacroReference(pFile As String)
  On Error Resume Next
  If FileExists(pFile) Then
    Application.VBE.ActiveVBProject.References.AddFromFile pFile
  Else
    MsgBox "Macro file not found. This document will NOT work correctly" & Chr(10) & Chr(10) & "Please correct the path and try again", vbCritical, "Macro file not found"
  End If
  On Error GoTo 0
End Sub

Public Sub RemoveMacroReference()
  On Error Resume Next
  Set vbProj = Application.VBE.ActiveVBProject
  For Each chkRef In vbProj.References
    If chkRef.Name = "NavnPåMinMacro" Then
      vbProj.References.Remove chkRef
      'Her vil jeg så gerne lukke selve xla filen!!!
    End If
  Next
End Sub

Nogen forslag? :)

På forhånd tak.
08. september 2004 - 15:08 #1
xla filen er vel tilføjet/loaded som et Add-in....... under Funktioner / Tiløjelsesprogrammer.....

Jeg kan ikke i hovedet huske hvordan du unloader dit tilføjelsesprogram (add-in), men får du xla'en unloaded (og dermed ikke tilgængelig for andre excel workbooks...
Avatar billede snowball Novice
08. september 2004 - 15:19 #2
flemmingdahl: Xla'en er rigtig nok tilføjet som Add-In, men ikke via menuen Funktioner osv. da det så er for besværligt at lave om hvis xla filen bliver omdøbt eller flyttet. Derfor tilføjer jeg xla filen via kode som du kan se i mit spørgsmål.
Avatar billede stewen Praktikant
08. september 2004 - 16:09 #3
kan du bruge>

AddIns("Din Xla'er").Installed = False
Avatar billede snowball Novice
08. september 2004 - 16:52 #4
stewen: Nej. Den fjerner i bedste fald også bare referencen :)
Avatar billede bak Forsker
08. september 2004 - 17:46 #5
Prøv med
Workbooks("Macro.xla").Close False

Det lukker en alm xla fil også
Avatar billede snowball Novice
09. september 2004 - 09:06 #6
bak: Synes ikke det virker!? Har prøvet både at skrive bare filnavnet og også hele stien, men filen bliver ikke lukket.
Avatar billede snowball Novice
09. september 2004 - 09:19 #7
Prøvede lige at udskrive alle navnene på de åbne Workbooks, og der er min xla fil ikke imellem, så det er nok derfor der ikke sker så meget når jeg forsøger at lukke den ;)
Avatar billede bak Forsker
09. september 2004 - 09:25 #8
Prøv at gå om i vba-editoren.
I project-explorer kan du se om din xla-fil er åben.
I intermidiate-vinduet skriver du
Workbooks("Macro.xla").Close False

Så skulle du meget gerne se at den lukker.
Jeg tror iøvrigt ikke at du kan se detn når du udskriver en liste med alle åbne workbooks
Avatar billede snowball Novice
09. september 2004 - 09:37 #9
Underligt. Jeg må ha' skrevet forkert første gang.

Tak for hjælpen. Laver du lige et svar? :)
Avatar billede bak Forsker
09. september 2004 - 09:44 #10
jeps. :-)
Avatar billede snowball Novice
09. september 2004 - 09:58 #11
Et hurtigt tillægsspørgsmål som jeg håber du lige kan give et bud på.

Kan man lave noget fejlhåndtering sådan så Excel er "ligeglad" med at en Sub eller Function ikke findes? I mit tilfælde har jeg jo alle mine macroer i en xla fil, og i min Workbook_BeforeSave kalder jeg f.eks. en macro i den xla fil. Men hvis jeg så lukker dokumentet og dermed fjerner referencen som vist i ovenstående, og der så er sket ændringer i dokumentet som man svarer ja til at gemme, så kan den jo ikke kalde den funktion fordi xla dokumentet ikke længere er åben. Håber du forstår hvad jeg mener.

Har prøvet med både On Error GoTo 0 og On Error Resume Next og sådan, men det virker ikke rigtigt.
09. september 2004 - 11:42 #12
On Error GoTo 0 - nulstiller din egen håndtering af fejl, som du feks har lavet ved at sætte On Error Resume Next
Det vil sige "GoTo 0" altid kommer senere i en sub hvor du f.eks. har lavet "Resume Next" eller "Goto xxxx"

Hvis en Sub eller en Function ikke findes.... så er det ikke en Error, men en Compile fejl......
Der findes en måde at teste om et specifikt module findes og om det indeholder en given Sub eller Function... men den skal du finde på nettet...
måske her: http://www.j-walk.com/ss/excel/index.htm
Avatar billede snowball Novice
09. september 2004 - 12:22 #13
http://www.j-walk.com/ss/excel/tips/tip70.htm er umiddelbart det der kommer nærmest, men jeg synes ikke rigtig det hjælper mig nærmere en løsning på problemet.

For selvom man laver en WorkbookHasVBACode, så skal du jo stadig angive den Sub/Function som man vil køre hvis alt går godt, og så er det jo compiler fejlen kommer igen!?
Avatar billede snowball Novice
09. september 2004 - 12:38 #14
Har oprettet et nyt spørgsmål om det - http://www.eksperten.dk/spm/537888
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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