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

Köra nytt makro efter Print/ skapad PDF


Mhagstrom

Rekommendera Poster

Hej, 

 

Har en Excelfil för finansiell rapportering som körs på ett stort antal enheter månatligen. I denna fil nyttjar vi ett makro som ställer skalan på diagrammen. När vi kört makrot skapar vi en pdf-rapport via Adobes-add in.

 

När vi väl tagit fram en rapport och vill köra en ny rapport på en ny enhet (väljs från en drop-downlista) fungerar inte makrot att köra längre utan man måste stänga ner hela Excel och start upp på nytt igen för att makrot skall kunna köras.

 

Har något ett svar på varför makrot slutar fungera och hur skulle man kunna åtgärda det? Samma sak sker om man nyttjar den vanliga print to PDF funktionen.

 

post-138578-0-21738000-1464619762_thumb.jpg

 

Tacksam för svar. 

 

 

Vänliga hälsningar

Marcus   

 

  

Länk till kommentar
Dela på andra webbplatser

Måste nog se koden/boken för att kunna säga något.

Låter kanske iofs som en bugg i Excel eller kanske en minnesläcka tillochmed.

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Är inne på att det är kodningsfel. Ett vanligt fel som är lätt att göra är att koden inte tar hänsyn till vilket blad/arbetsbok som är aktivt. Jag tänker mig t.ex. att felet kan uppstå där det skapas en rapport (egen arbetsbok eller blad?) och när ni kör koden igen så är ni kvar i rapporten eller något liknande och felet uppstår?

Länk till kommentar
Dela på andra webbplatser

Måste nog se koden/boken för att kunna säga något.

Låter kanske iofs som en bugg i Excel eller kanske en minnesläcka tillochmed.

 

Måste nog se koden/boken för att kunna säga något.

Låter kanske iofs som en bugg i Excel eller kanske en minnesläcka tillochmed.

Hej, 

 

 

Kör två makro som är sammansatta via en run all makro funktion: Makrona ser ut på följande vis: 

 

Makro1:

Declare Function HypRetrieve Lib "HsAddin" (ByVal vtSheetName As Variant) As Long





Sub RefreshAll()
'
Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        ws.Activate
        
        sts = HypRetrieve(ActiveSheet)


    Next
End Sub
 
Makro2:


Sub UpdateScale()
    
' UpdateScale Code


Sheets("03.Sales").Select
ActiveSheet.ChartObjects("Chart 1").Activate
With ActiveChart.Axes(xlValue, xlSecondary)
    .MinimumScale = Range("Selection!C28").Value
'   .MaximumScale = Range("F42").Value
End With


Sheets("05.Orders&Sales").Select
ActiveSheet.ChartObjects("Chart 1").Activate
With ActiveChart.Axes(xlValue)
    .MinimumScale = Range("Selection!B49").Value
    .MaximumScale = Range("Selection!B48").Value
'   .MajorUnit = Range("Selection!B47").Value
End With


Sheets("08.Material Cost").Select
ActiveSheet.ChartObjects("Chart 1").Activate
With ActiveChart.Axes(xlValue)
    .MinimumScale = Range("Selection!B77").Value
    .MaximumScale = Range("Selection!B76").Value
    .MajorUnit = 0.01
End With


Sheets("10.Contribution Margin").Select
ActiveSheet.ChartObjects("Chart 1").Activate
With ActiveChart.Axes(xlValue)
    .MinimumScale = Range("Selection!B99").Value
    .MaximumScale = Range("Selection!B98").Value
    .MajorUnit = 0.01
End With


Sheets("11.Fixed Production").Select
ActiveSheet.ChartObjects("SGA Chart").Activate
With ActiveChart.Axes(xlValue)
    .MinimumScale = Range("Selection!B111").Value
    .MaximumScale = Range("Selection!B110").Value
    .MajorUnit = 0.01
End With


Sheets("12.Gross Margin").Select
ActiveSheet.ChartObjects("Gross Margin Chart").Activate
With ActiveChart.Axes(xlValue)
    .MinimumScale = Range("Selection!B125").Value
    .MaximumScale = Range("Selection!B124").Value
    .MajorUnit = 0.01
End With


Sheets("14.SGA Cost").Select
ActiveSheet.ChartObjects("SGA Chart").Activate
With ActiveChart.Axes(xlValue)
    .MinimumScale = Range("Selection!B143").Value
    .MaximumScale = Range("Selection!B142").Value
    .MajorUnit = 0.01
End With


Sheets("15.EBIT").Select
ActiveSheet.ChartObjects("EBIT Chart").Activate
With ActiveChart.Axes(xlValue)
    .MinimumScale = Range("Selection!B183").Value
    .MaximumScale = Range("Selection!B182").Value
    .MajorUnit = 0.01
End With


Sheets("17.Cash Flow").Select
ActiveSheet.ChartObjects("Chart 1").Activate
With ActiveChart.Axes(xlValue, xlSecondary)
    '.MinimumScale = Range("Selection!D262").Value
    .MaximumScale = Range("Selection!D261").Value
    '.MajorUnit = 0.1
End With


Sheets("18.DSO").Select
ActiveSheet.ChartObjects("Chart 1").Activate
With ActiveChart.Axes(xlValue, xlSecondary)
    .MinimumScale = Range("Selection!B214").Value
    .MaximumScale = Range("Selection!B213").Value
    '.MajorUnit = 10
End With


Sheets("20.DPO").Select
ActiveSheet.ChartObjects("Chart 1").Activate
With ActiveChart.Axes(xlValue, xlSecondary)
    .MinimumScale = Range("Selection!B227").Value
    .MaximumScale = Range("Selection!B226").Value
    '.MajorUnit = 10
End With


Sheets("19.MTPT").Select
ActiveSheet.ChartObjects("Chart 1").Activate
With ActiveChart.Axes(xlValue, xlSecondary)
    .MinimumScale = Range("Selection!B247").Value
    .MaximumScale = Range("Selection!B246").Value
    .MajorUnit = 1
End With


Application.ScreenUpdating = False
Sheets("01.P&L").Select
    Range("C1").Select
    ActiveSheet.Next.Select
    Sheets("01.P&L").Select
    Range("C2").Select
    'Sheets("Product Groups").Select
    'Range("C1").Select
    Sheets("03.Sales").Select
    Range("A1").Select
    Sheets("04.Organic").Select
    Range("A1").Select
    Sheets("05.Orders&Sales").Select
    Range("A1").Select
    Sheets("06.Employees").Select
    Range("C1").Select
    Sheets("07.Material").Select
    Range("A1").Select
    Sheets("08.Material Cost").Select
    Range("A1").Select
    Sheets("09.Conversion").Select
    Range("A1").Select
    Sheets("10.Contribution Margin").Select
    Range("A1").Select
    Sheets("11.Fixed Production").Select
    Range("A1").Select
    Sheets("12.Gross Margin").Select
    Range("A1").Select
    Sheets("13.SGA").Select
    Range("A1").Select
    Sheets("14.SGA Cost").Select
    Range("A1").Select
    'Sheets("Cost Spec_New").Select
    'Range("B1").Select
    Sheets("15.EBIT").Select
    Range("A1").Select
    Sheets("17.Cash Flow").Select
    Range("A1").Select
    Sheets("18.DSO").Select
    Range("A1").Select
    Sheets("19.MTPT").Select
    Range("A1").Select
    Sheets("20.DPO").Select
    Range("A1").Select
 Sheets("Val").Select
Application.ScreenUpdating = True


End Sub


Sltlugen har vi detta makro för att båda skall köras samtidigt:


Sub RunAllMacros()
    RefreshAll
    UpdateScale


End Sub
Länk till kommentar
Dela på andra webbplatser

Ough, ett första steg helt klart att städa koden!

 

Bort med alla onödiga select och activate. Lite för lång kod för att jag ska orka gå igenom hela utan pekar dig till denna nålade tråd:

//eforum.idg.se/topic/220943-riktlinjer-f%C3%B6r-bra-vba-kod/

 

men första satsen

Sub RefreshAll()

'
Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets
        ws.Activate
        
        sts = HypRetrieve(ActiveSheet)


    Next
End Sub

Kan med fördel skrivas som

Sub RefreshAll()

'
Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Worksheets        
          sts = HypRetrieve(ws)
    Next
End Sub

exempelvis.

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...