Avatar billede Mathias- Nybegynder
12. juli 2011 - 20:02 Der er 25 kommentarer og
1 løsning

rettelse i macro

Hej

Jeg har lavet nogle macroer. Er det muligt at sammenkæde disse macroer? (se nedenfor)
Den sidste macro afspiller bare de 2 første, og så låser den også arket op, og låser det igen.

Når jeg kører macroen, er der celler som bliver markeret. Kan jeg skrive noget om, så jeg slipper for at se dem blive markeret, men at macroen stadig ender med samme resultat?



Sub TælSammen()
Dim A As Integer, B As Integer, Data As Variant, Res As Variant
B = Range("B65536").End(xlUp).Row ' finder sidste række med data
Data = Range("A1:B" & B) ' Dublerende kolonne A og Antal kolonne B
Res = Range("C1:D" & B) ' Skriver resultatet i Kolonne C og D

For T = 1 To UBound(Data)
For i = 1 To UBound(Res)
If Res(i, 1) = Data(T, 1) Then
Res(i, 2) = Res(i, 2) + Data(T, 2)
GoTo Næste
End If
If Res(i, 1) = "" Then
Res(i, 1) = Data(T, 1)
Res(i, 2) = Res(i, 2) + Data(T, 2)
GoTo Næste
End If
Next
Næste:
Next
Range("C1:D" & B) = Res 'Skriver i C og D kolonnen
'Range("A1:B" & B) = Res ' byttes med ovenstående OVERSKRIVES  A og B kolonnen
End Sub
Sub slet_celler()
'
' slet_celler Makro
'

'
    Range("C1:D1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
End Sub
Sub Opdater()
'
' opdater Makro
'

'
    ActiveSheet.Unprotect
    Application.Run "&[Fane]!slet_celler"
    Application.Run "&[Fane]!TælSammen"
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Avatar billede martin_moth Mester
12. juli 2011 - 20:43 #1
hvis du ikke vil se på celler der markeres/afmarkeres, så sæt application.screenupdate = False i starten af din kode og =true i bunden. Det vil også få din kode til at blive afviklet meget hurtigere...

Mht. at sammenkæde, hvad mener du? Du har jo allerede den ene macro til at kalde de andre (=sammenkæde).

ALternativt, skriv alt koden i den samme, ene macro (kopier koden fra de macroer du kalder over i "hovedmacroen, der hvor du ellers ville kalde "undermacroen".
Avatar billede store-morten Ekspert
12. juli 2011 - 20:46 #2
Prøv denne i et test ark, for en sikkerheds skyld ;-)
Sub Opdater()
Application.ScreenUpdating = False
home = ActiveCell.Address
homeArk = ActiveSheet.Name

    ActiveSheet.Unprotect
        ' slet_celler Makro
        Range("C1:D1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.ClearContents
   
            Dim A As Integer, B As Integer, Data As Variant, Res As Variant
            B = Range("B65536").End(xlUp).Row ' finder sidste række med data
            Data = Range("A1:B" & B) ' Dublerende kolonne A og Antal kolonne B
            Res = Range("C1:D" & B) ' Skriver resultatet i Kolonne C og D
           
            For T = 1 To UBound(Data)
            For i = 1 To UBound(Res)
            If Res(i, 1) = Data(T, 1) Then
            Res(i, 2) = Res(i, 2) + Data(T, 2)
            GoTo Næste
            End If
            If Res(i, 1) = "" Then
            Res(i, 1) = Data(T, 1)
            Res(i, 2) = Res(i, 2) + Data(T, 2)
            GoTo Næste
            End If
            Next
Næste:
            Next
            Range("C1:D" & B) = Res 'Skriver i C og D kolonnen
            'Range("A1:B" & B) = Res ' byttes med ovenstående OVERSKRIVES  A og B kolonnen
           
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
   
    Sheets(homeArk).Select
    Range(home).Select
   
Application.ScreenUpdating = True
End Sub
Avatar billede store-morten Ekspert
12. juli 2011 - 20:55 #3
Med kommentarer:
Sub Opdater()
Application.ScreenUpdating = False 'skærm opdatering fra
home = ActiveCell.Address 'husker active celle
homeArk = ActiveSheet.Name 'husker active ark

    ActiveSheet.Unprotect 'fjerner arkbeskyttelse

    'slet_celler Makro
        Range("C1:D1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.ClearContents
       
    'TælSammen Makro
            Dim A As Integer, B As Integer, Data As Variant, Res As Variant
            B = Range("B65536").End(xlUp).Row ' finder sidste række med data
            Data = Range("A1:B" & B) ' Dublerende kolonne A og Antal kolonne B
            Res = Range("C1:D" & B) ' Skriver resultatet i Kolonne C og D
           
            For T = 1 To UBound(Data)
            For i = 1 To UBound(Res)
            If Res(i, 1) = Data(T, 1) Then
            Res(i, 2) = Res(i, 2) + Data(T, 2)
            GoTo Næste
            End If
            If Res(i, 1) = "" Then
            Res(i, 1) = Data(T, 1)
            Res(i, 2) = Res(i, 2) + Data(T, 2)
            GoTo Næste
            End If
            Next
Næste:
            Next
            Range("C1:D" & B) = Res 'Skriver i C og D kolonnen
            'Range("A1:B" & B) = Res ' byttes med ovenstående OVERSKRIVES  A og B kolonnen
           
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'sætter arkbeskyttelse
   
    Sheets(homeArk).Select 'vælger ark før makro kørsel
    Range(home).Select 'vælger celle før makro kørsel
   
Application.ScreenUpdating = True 'skærm opdatering til
End Sub
Avatar billede Mathias- Nybegynder
12. juli 2011 - 21:08 #4
perfekt. smid et svar.

Er det forresten muligt at køre denne macro idet jeg åbner arket, hveri macroen skal køres? arket hedder: 'Indkøbsliste'
Avatar billede store-morten Ekspert
12. juli 2011 - 21:18 #5
Vil du køre makroen når du åbner Excel filen der hedder 'Indkøbsliste' ?
Avatar billede Mathias- Nybegynder
12. juli 2011 - 21:20 #6
nej, jeg vil køre macroen når jeg åbner arket som hedder 'indkøbsliste' :)
Avatar billede store-morten Ekspert
12. juli 2011 - 21:29 #7
Det er eks. Ark1 der omdøbt til 'Indkøbsliste' og du ønsker så at når arket som hedder 'indkøbsliste' bliver aktiveret, med et klik på fanen, denne makro kører?
Avatar billede Mathias- Nybegynder
12. juli 2011 - 21:27 #8
altså i stedet for at klikke på knappen 'opdater' som kører macroen, så skal macroen bare køre automatisk, når jeg går ind i arket
Avatar billede store-morten Ekspert
12. juli 2011 - 21:33 #9
Prøv:
Sub Opdater()
Application.ScreenUpdating = False 'skærm opdatering fra
home = ActiveCell.Address 'husker active celle
homeArk = ActiveSheet.Name 'husker active ark

    ActiveSheet.Unprotect 'fjerner arkbeskyttelse

    'slet_celler Makro
        Range("C1:D1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.ClearContents
       
    'TælSammen Makro
            Dim A As Integer, B As Integer, Data As Variant, Res As Variant
            B = Range("B65536").End(xlUp).Row ' finder sidste række med data
            Data = Range("A1:B" & B) ' Dublerende kolonne A og Antal kolonne B
            Res = Range("C1:D" & B) ' Skriver resultatet i Kolonne C og D
           
            For T = 1 To UBound(Data)
            For i = 1 To UBound(Res)
            If Res(i, 1) = Data(T, 1) Then
            Res(i, 2) = Res(i, 2) + Data(T, 2)
            GoTo Næste
            End If
            If Res(i, 1) = "" Then
            Res(i, 1) = Data(T, 1)
            Res(i, 2) = Res(i, 2) + Data(T, 2)
            GoTo Næste
            End If
            Next
Næste:
            Next
            Range("C1:D" & B) = Res 'Skriver i C og D kolonnen
            'Range("A1:B" & B) = Res ' byttes med ovenstående OVERSKRIVES  A og B kolonnen
           
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'sætter arkbeskyttelse
   
    Sheets(homeArk).Select 'vælger ark før makro kørsel
    Range(home).Select 'vælger celle før makro kørsel
   
Application.ScreenUpdating = True 'skærm opdatering til
End Sub

Private Sub Worksheet_Activate()
Application.Run "'Filnavn.xls'!Ark1.Opdater"
End Sub


Filnavn udskiftes med aktuelle navn.
Avatar billede Mathias- Nybegynder
12. juli 2011 - 21:52 #10
Jeg vil gerne have at den kører macroen når jeg går fra eksempelvis ark1 til ark2.

navnet på filen varierer.
Avatar billede store-morten Ekspert
12. juli 2011 - 22:04 #11
Jeg er ikke helt sikker på hvad du mener  ;-)
Men prøv at kopier "Opdater" koden ned i Private Sub Worksheet_Activate
Avatar billede store-morten Ekspert
12. juli 2011 - 22:11 #12
Sub Opdater()
Application.ScreenUpdating = False 'skærm opdatering fra
home = ActiveCell.Address 'husker active celle
homeArk = ActiveSheet.Name 'husker active ark

    ActiveSheet.Unprotect 'fjerner arkbeskyttelse

    'slet_celler Makro
        Range("C1:D1").Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.ClearContents
       
    'TælSammen Makro
            Dim A As Integer, B As Integer, Data As Variant, Res As Variant
            B = Range("B65536").End(xlUp).Row ' finder sidste række med data
            Data = Range("A1:B" & B) ' Dublerende kolonne A og Antal kolonne B
            Res = Range("C1:D" & B) ' Skriver resultatet i Kolonne C og D
           
            For T = 1 To UBound(Data)
            For i = 1 To UBound(Res)
            If Res(i, 1) = Data(T, 1) Then
            Res(i, 2) = Res(i, 2) + Data(T, 2)
            GoTo Næste
            End If
            If Res(i, 1) = "" Then
            Res(i, 1) = Data(T, 1)
            Res(i, 2) = Res(i, 2) + Data(T, 2)
            GoTo Næste
            End If
            Next
Næste:
            Next
            Range("C1:D" & B) = Res 'Skriver i C og D kolonnen
            'Range("A1:B" & B) = Res ' byttes med ovenstående OVERSKRIVES  A og B kolonnen
           
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'sætter arkbeskyttelse
   
    Sheets(homeArk).Select 'vælger ark før makro kørsel
    Range(home).Select 'vælger celle før makro kørsel
   
Application.ScreenUpdating = True 'skærm opdatering til
End Sub

Private Sub Worksheet_Activate()
Call Opdater
End Sub

Det burde virke med: Call Opdater
Avatar billede Mathias- Nybegynder
12. juli 2011 - 22:14 #13
Okay jeg prøver lige med et eksempel.

Min fil hedder kostberegner_2D.xlsm

Inde i den fil har jeg en masse ark. for en nemhedsskyld:
'Ark 1', 'Ark 2', 'Ark 3'.

På 'Ark 3' har jeg på nuværende tidspunkt en knap som hedder 'Opdater'.
Denne knap kører overstående macro.

macroen opdater nogle data, som jeg har på 'Ark 1' og 'Ark 2'.

Jeg kunne godt tænke mig, hvis det kunne lade sig gøre, at fjerne knappen 'Opdater', så macroen i stedet afspilles automatisk, når 'Ark 3' åbnes.
Avatar billede store-morten Ekspert
12. juli 2011 - 22:25 #14
Du siger at #3 er perfekt :-)
Så må #12 være det du søger.
Koden lagt ind på Ark3. Så når Ark3 aktiveres kaldes makroen 'Opdater'
Avatar billede Mathias- Nybegynder
12. juli 2011 - 22:35 #15
Ja, den virker også! Jeg skrev dette indlæg til #11. Du var bare hurtig med et nyt svar, inden jeg nåede at svare.

Tak. :-)
Avatar billede store-morten Ekspert
12. juli 2011 - 22:42 #16
Velbekomme :-)
Husk at bytte om på hjemme siden ;-)
Tjek om ikke:
Æble .xlsx = Zip fil
Æble .zip = xlsx fil
Avatar billede Mathias- Nybegynder
12. juli 2011 - 22:50 #17
Hos mig ser det rigtig nok ud..
prøv evt. Ctrl+F5 og se om det går i orden..
Avatar billede store-morten Ekspert
12. juli 2011 - 23:02 #18
Nop... De er stadig bytte om ;-)
Avatar billede store-morten Ekspert
12. juli 2011 - 23:07 #19
Æble .zip giver godt nok en zip-mappe,
men den indeholder 'Regneark' og en 'Read me' fil.
Avatar billede Mathias- Nybegynder
12. juli 2011 - 23:10 #20
det skal den også?
Avatar billede store-morten Ekspert
12. juli 2011 - 23:26 #21
Ikke til mig.... ;-)
Æble .zip burde give en masse zip filer som skal pakkes ud!!!
lige som hvis man henter Æble .xlsx hvor der ingen 'regneark' er?
Eller er der noget jeg har misforstået ;-)

Se: http://www.eksperten.dk/spm/942707
Indlæg #3
Avatar billede Mathias- Nybegynder
12. juli 2011 - 23:50 #22
Jeg forstår dig ikke helt...

Når du klikker på æble .zip, så skal du få en zipfil, som indeholder regnearket.

Når du klikker på æble .excel, så skal du hente excelfilen direkte.

er vi enige? :-)
Avatar billede store-morten Ekspert
12. juli 2011 - 23:57 #23
Ja, vi er enige :-)

Men sådan er det ikke.

Når jeg klikker på æble .zip, så hentes excelfilen direkte.

Når jeg klikker på æble .excel, så hentes en zipfil.

Begge i en mappe med zip.ikon (Type: ZIP-komprimeret mappe)
Avatar billede Mathias- Nybegynder
13. juli 2011 - 00:21 #24
det var mærkeligt .. sådan ser det ikke ud hos mig
Avatar billede store-morten Ekspert
13. juli 2011 - 04:10 #25
windows XP. Excel 2003:
Når jeg klikker på æble .zip, så hentes excelfilen + Read me  direkte.
Når jeg klikker på æble .excel, så hentes en zipfil.
Begge i en mappe med zip.ikon (Type: ZIP-komprimeret mappe)

windows 7. Excel 2010:
Når jeg klikker på æble .zip, så hentes en zipfil i en mappe med zip.ikon (Type: ZIP-komprimeret mappe)
Når jeg klikker på æble .excel, så hentes excelfilen direkte.
Så er det OK.
Avatar billede Mathias- Nybegynder
13. juli 2011 - 13:01 #26
Okay - så skyldes det, at 2003 ikke understøtter .xlsm filer..
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