Just nu i M3-nätverket
Gå till innehåll

Köra makro i Workbook_open - "anropa" modul?


bonjati

Rekommendera Poster

Hej!

För att underlätta på jobbet försöker jag skapa ett makro som ska visa dolda blad, rader och kolumner den ska även ta bort filter men inte ta bort filtermode. Dvs den svarta knappen ska vara kvar. Detta makro vill jag köra varje gång excel öppnar.

 

Så skrev en makro i en modul och sen försökte jag i PERSONAL.xls/This workbook be excel köra modulen varje gång arbetsboken öppnas. Testade först med

Run ([Modul3]) 

det gick inte. jag fick "Kompileringsfel: En variabel eller procedur förväntades.Inte en modul" så testade med

Call ("Modul3") 

Det gick inte heller. Då fick jag svaret "Kompileringsfel: En identifierare"

 

Vad gjorde jag fel här? Vill helst slippa ha makrot i PERSONAL.XLS eftersom det ju snabbt blir rörigt.

 

Testade dock att lägga all kod "direkt" under Workbook_open (). Gick inte heller.

 

Koden ifråga ser ut så här

Sub Synliggöra_allt()
'
' Makro3 Makro

For Each Worksheet In ActiveWorkbook.Worksheets
If Worksheet.Visible = False Then
    Worksheet.Visible = True
 End If
Next Workheet

For Each Column In ActiveWorkbook.Worksheets
If Column.Visible = False Then
    Column.Visible = True
 End If
Next Column

For Each Row In ActiveWorkbook.Worksheets
If Row.Visible = False Then
    Row.Visible = True
 End If

ActiveworkSheet.Select
ActiveSheet.ShowAllData

End Sub

Vad ska göra jag för att få det att funka? Har jag tänkt helt tokigt?

Länk till kommentar
Dela på andra webbplatser

primära problemet är att du lägger den i personal.xls, en bok som öppnas med Excel. Inte när dina böcker öppnas. Dvs den reagerar inte på det event du lägger koden under.

Testa bara med att lägga kod som poppar upp en alert av något slag och du kan se när koden körs.

 

Börja där.

Men jag tror inte du kan skapa något i personal.xlsb som körs varje gång en bok öppnas.

Länk till kommentar
Dela på andra webbplatser

primära problemet är att du lägger den i personal.xls, en bok som öppnas med Excel. Inte när dina böcker öppnas. Dvs den reagerar inte på det event du lägger koden under.

Testa bara med att lägga kod som poppar upp en alert av något slag och du kan se när koden körs.

 

Börja där.

Men jag tror inte du kan skapa något i personal.xlsb som körs varje gång en bok öppnas.

 

Ganska säker på att jag lyckats se till att personal arbetsboken startas när excel gör det. Fast om jag tolkar dig rätt så spelar det ingen roll? Makrot skulle iaf inte utföras i den arbetsbok där innehållet fanns. Korrekt? 

 

Isf, om jag lägger koden Sub Synliggöra_allt antigen under This woorkbook_Open () på de viktigaste filer eller som egen modul som jag kopplar till menyfält/kortkommande. Borde det funka bättre?

Länk till kommentar
Dela på andra webbplatser

Testa precis att lägga in

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    MsgBox "Personal stängs!", vbInformation
End Sub

Private Sub Workbook_Open()
    MsgBox "Personal öppnad!", vbInformation
    
End Sub

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
MsgBox "Personal tappade fokus!", vbInformation
End Sub

i Personal.xlsb och den enda jag får upp är att personal öppnas när Excel startas.

När en annan arbetsbok öppnas händer inget.

 

Det du kan göra är att lägga ditt generella makro i Personal.xlsb och anropa det från de böcker du önskar när du öppnar dem.

 

Notera bara att iochmed att koden ligger i personal kommer denna inte följa med om du kopierar arbetsböckerna till annan dator.

 

Ett exempel, personal.xlsb, i en modul:

Public Sub Makro1()
    ActiveWorkbook.Sheets(1).Cells(1, 1) = ActiveWorkbook.Sheets(1).Cells(1, 1) + 1
End Sub

I din arbetsbok:

Sub test()
   Application.Run "Personal.xlsb!Makro1"
End Sub

Men se till att kapsla med On error av något slag så att du slipper att Excel stannar och spottar ur sig fel om personal.xlsb saknas.

 

 

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Får fortfarande inte koden att funka. Nu har jag struntat i att den måste ligga just i PERSONAL. och har lagt den i en 

 

Sub Synliggöra_allt()
' Makro3 Makro


For Each Worksheet In ActiveWorkbook.Worksheets
If Worksheet.Visible = False Then
    Worksheet.Visible = True
 End If
Next Worksheet


For Each Column In ActiveWorkbook.Worksheets
If Column.Visible = False Then
    Column.Visible = True
 End If
Next Column


For Each Row In ActiveWorkbook.Worksheets
If Row.Visible = False Then
    Row.Visible = True
 End If


ActiveworkSheet.Select
ActiveSheet.ShowAllData


End Sub

Får felet "For utan next"

 

Vad beror det på? 

 

Grundtanken är alltså att makrot ska

  • visa dolda arbetsblad, kolumner och rader
  • ta bort aktuell sortering men inte ta bort filter läge. 

Kanske finns något enklare sätt att göra det på? 

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

I slutet av modulen där du har texten:

For Each Row In ActiveWorkbook.Worksheets
If Row.Visible = False Then
    Row.Visible = True
 End If

 Behöver du lägga till raden:

Next Row

For Each Row In ActiveWorkbook.Worksheets
If Row.Visible = False Then
    Row.Visible = True
 End If
Next Row
Länk till kommentar
Dela på andra webbplatser

Dina for-satser är underliga.

Vad stegar du egentligen igenom i

For Each Column In ActiveWorkbook.Worksheets

 

Några fel:

Deklarerar alltid dina variabler (en inställning VBA, lägger till rader Option Explicit i alla kodmoduler.

Column är ett olämpligt namn på en variabel

Putsat lite på koden men den gör nog inte det du vill:

Sub Synliggöra_allt()
' Makro3 Makro
    Dim ws As Worksheet
    Dim myCol As Range
    Dim myRow As Range
    For Each ws In ActiveWorkbook.Worksheets
    If ws.Visible = False Then
        ws.Visible = True
     End If
    Next ws

    
    For Each myCol In ActiveWorkbook.Worksheets(1).Columns
        If myCol.Visible = False Then
            myCol.Visible = True
         End If
    Next myCol


    For Each myRow In ActiveWorkbook.Worksheets(1).Columns
        If myRow.Visible = False Then
            myRow.Visible = True
         End If
    Next myRow
    

ActiveworkSheet.Select
ActiveSheet.ShowAllData


End Sub

men den borde göra något...

Att stega igenom alla rader, alla kolumner, är i sig onödigt, räcker att skriva

Worksheets("mitt blad").Columns.Hidden = false

Länk till kommentar
Dela på andra webbplatser

Dina for-satser är underliga.

Vad stegar du egentligen igenom i

For Each Column In ActiveWorkbook.Worksheets

 

Några fel:

Deklarerar alltid dina variabler (en inställning VBA, lägger till rader Option Explicit i alla kodmoduler.

Column är ett olämpligt namn på en variabel

Putsat lite på koden men den gör nog inte det du vill:

Sub Synliggöra_allt()
' Makro3 Makro
    Dim ws As Worksheet
    Dim myCol As Range
    Dim myRow As Range
    For Each ws In ActiveWorkbook.Worksheets
    If ws.Visible = False Then
        ws.Visible = True
     End If
    Next ws

    
    For Each myCol In ActiveWorkbook.Worksheets(1).Columns
        If myCol.Visible = False Then
            myCol.Visible = True
         End If
    Next myCol


    For Each myRow In ActiveWorkbook.Worksheets(1).Columns
        If myRow.Visible = False Then
            myRow.Visible = True
         End If
    Next myRow
    

ActiveworkSheet.Select
ActiveSheet.ShowAllData


End Sub

men den borde göra något...

Att stega igenom alla rader, alla kolumner, är i sig onödigt, räcker att skriva

Worksheets("mitt blad").Columns.Hidden = false

 

 

 

så  kanske då följande borde bli bättre istället 

sub Makro ()
ActiveWorksheet.Columns.Hidden = false
ActiveWorksheet.Rows.Hidden = false
ActiveworkSheet.ShowAllData
End sub

Använder ActiveWorksheet. för att jag vill slippa anpassa makrot till varje arbetsbok där det kan tänkas användas. Det bör passar oavsett vad arbetsbladet heter. Är det dumt tänkt?

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...