Avatar billede mira96ac Novice
09. april 2006 - 10:20 Der er 13 kommentarer og
1 løsning

Ekstern makrofil

Hej

Jeg prøver lige igen, da jeg ikke kan finde ud af det.

Jeg har følgende problemstilling/spørgsmål:

1. Jeg har en skabelon.xlt
2. Jeg har 6 makroer i denne skabelon med tilhørende knapper

Jeg vil gerne at denne skabelon henter makroer og knapper fra en ekstern fil, således at hvis jeg retter i makroerne, tilføjer makroer eller knapper, at det så altid er det nyeste der bliver hentet ind i skabelon.xlt eller den fil man nu har gemt skabelon.xlt som.

Kan man det ?

Her er mine makroer:

Sub Skjul()
Application.ScreenUpdating = False
Dim iLoop As Integer
Dim rNa As Range
Dim i As Integer
Dim rX As Range
svalue = 0          'søgeværdi
scolumn = 13            'søgekolonne
iLoop = WorksheetFunction.CountIf(Columns(scolumn), svalue)
Set rNa = Cells(1, scolumn)
Set rX = Columns(scolumn).Find(What:=searchvalue, After:=rNa, _
            LookIn:=xlValues, LookAt:=xlWhole, _
            SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=True)

For i = 1 To iLoop
  Set rNa = Columns(scolumn).Find(What:=svalue, After:=rNa, _
            LookIn:=xlValues, LookAt:=xlWhole, _
            SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=True)
  Set rX = Union(rNa, rX)
Next i
rX.EntireRow.Hidden = True
Application.ScreenUpdating = True
ActiveSheet.Cells(1, 3).Select
End Sub

Sub Vis()
  Application.ScreenUpdating = False
  Cells.Select
  Selection.EntireRow.Hidden = False
  Application.ScreenUpdating = True
  ActiveSheet.Cells(1, 3).Select
  End Sub
 
Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("SR").Delete
End Sub
Sub Linie()
JaNej = MsgBox("Denne funktion indsætter en ny linie. Linien indsættes under den linie du står på nu. Vil du fortsætte ?", vbYesNo + vbQuestion, "Indsæt ny linie")
Select Case JaNej
Case vbYes
ActiveCell.Offset(1, 0).Select
Selection.EntireRow.Insert
Worksheets("Stamdata").Range("200:200").EntireRow.Copy Destination:=ActiveCell.Offset(0, 0).EntireRow
Case vbNo
End Select
End Sub
Sub Note()
JaNej = MsgBox("Denne funktion indsætter en ny note. Du skal stå på linien lige under en allerede eksisterende note. Vil du fortsætte ?", vbYesNo + vbQuestion, "Indsæt ny note")
Select Case JaNej
Case vbYes
If ActiveSheet.Name = "Noter spec." Then
Dim i
ActiveCell.Offset(0, 0).Select
For i = 1 To 10
Selection.EntireRow.Insert
Next

Worksheets("Stamdata").Range("202:212").EntireRow.Copy Destination:=ActiveCell.Offset(0, 0).EntireRow
Else
End If
If ActiveSheet.Name = "Noter" Then
ActiveCell.Offset(0, 0).Select
For i = 1 To 10
Selection.EntireRow.Insert
Next

Worksheets("Stamdata").Range("188:198").EntireRow.Copy Destination:=ActiveCell.Offset(0, 0).EntireRow
Else
End If
Case vbNo
End Select
End Sub
Sub Overskrift()
JaNej = MsgBox("Denne funktion indsætter en overskrift. Du skal stå på en noteoverskrift. Vil du fortsætte ?", vbYesNo + vbQuestion, "Indsæt overskrift")
Select Case JaNej
Case vbYes
If ActiveSheet.Name = "Noter" Then
JaNej = MsgBox("Skal der kun stå 'Noter' uden årstal ?", vbYesNo + vbQuestion, "Indsæt overskrift")
Select Case JaNej
Case vbYes
ActiveCell.Offset(0, 0).Select
For i = 1 To 2
Selection.EntireRow.Insert
Next

Worksheets("Stamdata").Range("232:233").EntireRow.Copy Destination:=ActiveCell.Offset(0, 0).EntireRow
Case vbNo
ActiveCell.Offset(0, 0).Select
For i = 1 To 4
Selection.EntireRow.Insert
Next

Worksheets("Stamdata").Range("215:218").EntireRow.Copy Destination:=ActiveCell.Offset(0, 0).EntireRow
End Select
Else
MsgBox "Du står ikke på arket 'Noter' !"
End If
Case vbNo
End Select
End Sub

Sub Sidetal()
Dim pn As Variant
JaNej = MsgBox("Skal sidetallet sættes til 'Auto' ?", vbYesNo + vbQuestion, "Ret sidetal")
Select Case JaNej
Case vbYes
With ActiveSheet.PageSetup
            .FirstPageNumber = xlAutomatic
         
        End With
Case vbNo
        pn = Application.InputBox("Indtast sidetal på arket", "Ret sidetal")
       
        If pn = False Then Exit Sub
       
        With ActiveSheet.PageSetup
            .FirstPageNumber = pn
           
        End With
 
End Select
End Sub
Avatar billede x-lars Novice
09. april 2006 - 10:41 #1
Var det en idé at lade dine knapper om at udføre en makro i et helt andet ark? Altså at kopiere dine makroer i en speciel workbook, som kan sættes til at være skjult og så lade knappen kalde dem med denne kode:


    Application.Run "c:\mine_regneark\test_1.xls!Makro1"

Hvis denne makroworkbook altid ligger på denne position, kan du rette i den, så vildt du lyster, uden at det påvirker din skabelon (selvfølgelig sålænge filer bevarer sit navn og indeholder makroer med de navne, som der henvises til i skabelonen).
Avatar billede mira96ac Novice
09. april 2006 - 11:05 #2
Hvad nu hvis jeg har skabelon.xlt

Så laver jeg makro.xla med alle makroer i

1. Hvis jeg tilføjer en ny makro til makro.xla, så bliver den jo ikke hentet automatisk ind i skabelon.xlt

Pointen var, at brugeren skulle åbne skabelon.xlt og så gemme den som f.eks. excelark.xls (eller noget andet). I dette regneark skulle altid være tilgængeligt de nyeste makroer f.eks. fra makro.xla og de dertil hørende knapper.

Så at når du åbner skabelon.xlt/excelark.xls så står der nærmest en kode som siger

  tilføj makro.xla

Og så kan man bruge disse funktioner.
Avatar billede x-lars Novice
09. april 2006 - 12:08 #3
Jeg er ikke helt med på, hvorfor du vil have makroerne til at køre i en .XLA

Resten: I makromodulet, der hedder "This Workbook" kan du lægge følgende:

sub workbook_Open()
Workbooks.open filename:="c:\mine_regneark\test_1.xls"
End sub

Denne bliver afviklet, hver gang din skabelon åbnes. Hvis test_1.xls så også er skjult, burde brugeren alene se den ved, at der kommer et skilt op om, at den ønskede fil indeholder makroer, som man skal acceptere.
Avatar billede mira96ac Novice
09. april 2006 - 12:12 #4
Det er nok bare mig som ikke helt forstår hvad jeg skal gøre:

1. Jeg laver en tom test_1.xls med alle makroer og knapper i
2. Jeg henter denne test_1.xls via den kode du har skrevet ovenfor

Hvad hvis jeg så tilføjer knapper o.l. i min xls, så virker de også i min skabelon ?

Hvordan skjuler jeg denne test_1.xls

Jeg troede bare at man gjorde sådan noget via en xla
Avatar billede x-lars Novice
09. april 2006 - 12:23 #5
Om de virker i din skabelon, afhænger jo af, om du kalder dem - altså skriver et eller andet i skabelonen, der gør, at den nye makro skal aktiveres.

Hvis du laver en ny knap i "fjernarket", kommer denne ikke med i skabelonen, men hvis du lægger knapperne i skabelonen, kalder de jo den makro i fjernarket, som de er sat til, uanset om der er ændret i denne.

Mit oprindelige forslag var, at du lod knapperne i din skabelon "fjernkalde" makroer, der så ligger i et andet regneark, som kunne være skjult (Vindue > Skjul, hvorefter du gemmer det (luk Excel helt og svar "ja" til at gemme ændringerne i denne mappe).
Avatar billede mira96ac Novice
09. april 2006 - 12:35 #6
Såvidt jeg så lige kan forstå, så opnår jeg ikke den fordel jeg egentlig var ude efter.

Nemlig at jeg kan ændre makroer m.v. og at det så får effekt i skablonen. Jeg skal ændre skabelonen også...
Avatar billede x-lars Novice
09. april 2006 - 12:41 #7
Nej, du skal bare skelne skarpt mellem knappen og den makro, som den kalder. Makroen kan sagtens ligge et andet sted og du kan ændre frit i den. Men din skabelon kan ikke "se", at du måske har tilføjet en helt ny makro eller opfundet en ny knap.

Men det, at du ændrer i makroens indhold, det påvirker ikke skabelonen.
Avatar billede johs_j Novice
09. april 2006 - 18:47 #8
Jeg har lavet et almindeligt regneark med mine makroer. Det er gemt som Mappe1.xls i Mappen XLStart.
Når den ligger i denne mappe bliver den automatisk indlæst når man starter Excel - hvad enten man starter Excel via Start-menuen eller ved at dobbeltklikke på en anden excel-fil.
Det fungerer fint.
Avatar billede x-lars Novice
10. april 2006 - 08:28 #9
Enig, det ville have været mit sidste løsningsforslag. Det eneste problem med denne løsning er, at den ikke kan bruges af andre end dig selv. Som jeg forstod dit spørgsmål, var der andre brugere, som du lavede regnearket for.

Her kan du så gøre det, at du lægger makrofilen på et fællesdrev, feks. P:\Makroer. Hvis du så hos den enkelte bruger går ind i Funktioner > Indstillinger > Fanebladet "Standard". I boksen  "Ved start åbnes alle filer i:" skriver du stien til den fælles makrofil NB! Kun stien, ikke også filnavnet. Det har samme funktion som XLstart.

Makrofilen bør være skjult og delt. Skjult er beskrevet tidligere. Delt: Funktioner > Delt projektmappe > Sæt flueben i "Tillad, at flere brugere ksn foretage ændringer samtidigt".
Avatar billede x-lars Novice
24. april 2006 - 21:29 #10
Er du kommet videre?
Avatar billede mira96ac Novice
25. april 2006 - 08:22 #11
Jeg har prøvet at lege lidt med det, men jeg synes ikke rigtig at der er noget som vil virke.

Min excel fil fylder til gengæld ca. 3,5 MB nu ???? Der er ellers kun 7 knapper i en værktøjslinien og 7 makroer og ca. 10 ark.
Avatar billede x-lars Novice
25. april 2006 - 09:12 #12
Ok, hvilke fejlmeldinger får du?

Størrelsen: Ja, Excel har sine nykker! Af og til hjælper det at markere samtlige ark, kopiere dem og indsætte det i en ny projektmappe. Du må ikke spørge mig hvorfor, jeg ved bare, at det hjælper - nogen gange!
Avatar billede mira96ac Novice
25. april 2006 - 09:25 #13
Jeg har prøvet at lave en xla-fil og køre mine makroer derfra, men den kommer med nogle fejlmeldinger også selvom den så udfører makroen bagefter.

Men jeg tror ikke dette er løsningen for mig, da jeg alligevel ikke kan opnå det jeg gerne vil, nemlig at jeg kan tilrettet makroer m.v. og det så har effekt på alle brugere som bruger den skabelon jeg har lavet.
Avatar billede mira96ac Novice
18. marts 2007 - 13:22 #14
Lukker spørgsmål
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

IT-JOB

Politiets Efterretningstjeneste

AI/ML udvikler i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Driftsstærk IT-profil til Forsvarsministeriets Materiel- og Indkøbsstyrelse

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer