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

Köra nytt makro efter Print/ skapad PDF

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   

 

  

Dela detta inlägg


Länk till inlägg
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.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ä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?

Dela detta inlägg


Länk till inlägg
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

Dela detta inlägg


Länk till inlägg
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.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



  • Liknande Innehåll

    • Av MvS
      Jag har en medlemsmatrikel på ett Excel-ark där jag behöver en funktion (ett Makro) som kan exportera medlemmars namn tillsammans med respektive epost-adress till en text-fil. 
      Har kollat runt men inga exempel jag stött på verkar fungera så jag undrar nu om det finns någon vänlig själ som kan hjälpa mig?
      Jag vill kunna exportera innehållet i kolumn "A" (Namn) och kolumn "J" (E-postadress) men bara från de rader där medlemmen har en epostadress. Utdata på textfilen bör vara tabbavgränsat men det  är inget absolut måste...
      Pls help...
       
    • Av berikolssson
      Någon som har koll, jag har ett dokument som när jag öppnar det får en gul rand längst upp med texten Säkerhetsvarning Makron har inaktiverats. Bredvid detta meddelande finns en knapp med texten Aktivera innehåll. Jag kan dock inte se att det finns något makro i dokumentet. Finns det någon som har koll på vad som kan trigga detta meddelande och finns det något enkelt sätt identifiera den specifika källan? Är det riskfritt att aktivera innehåll?
       
      Jag har skannat filen med antivirus utan att något hittades.
      Wordversionen är Word 2010

    • Av VSI7
      Hej!
       
      Jag har skrivit ett makro som tar data från ett "uträkningsdata blad" flyttar och tar bort värdena i en kolumn där och lägger dem i ett "beräknings blad" och skulle vilja att de upprepades tills kolumnen i bladet "uträkningsdata" är tom på data. då vill jag att upprepningen avslutas.
       
      sen undrar jag även om de går att städa något i makrot. jag är självlärd på detta och vill gärna lära mig mer!
      Sub område13() ' ' område13 Makro ' ' Range("C1").Select Sheets("13").Select Columns("E:E").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("E1").Select ActiveCell.FormulaR1C1 = "=Formler!R[1]C[-3]" Range("E89").Select ActiveCell.FormulaR1C1 = "=Formler!R[-87]C[13]" Range("E90").Select ActiveCell.FormulaR1C1 = "=Formler!R[-87]C[13]" Range("E94").Select ActiveCell.FormulaR1C1 = "=Formler!R[-83]C[6]" Range("E96").Select ActiveCell.FormulaR1C1 = "=Formler!R[-85]C[8]" Range("E98").Select ActiveCell.FormulaR1C1 = "=Formler!R[-87]C[10]" Range("E101").Select ActiveCell.FormulaR1C1 = "=Formler!R[-78]C[3]" Range("E110").Select ActiveCell.FormulaR1C1 = "=Formler!R[-86]C[3]" Range("E111").Select ActiveCell.FormulaR1C1 = "=Formler!R[-86]C[3]" Range("E112").Select ActiveCell.FormulaR1C1 = "=Formler!R[-92]C[3]" Range("E115").Select ActiveCell.FormulaR1C1 = "=Formler!R[-91]C[6]" Range("E116").Select ActiveCell.FormulaR1C1 = "=Formler!R[-91]C[6]" Range("E117").Select ActiveCell.FormulaR1C1 = "=Formler!R[-91]C[6]" Range("E120").Select ActiveCell.FormulaR1C1 = "=Formler!R[-110]C[10]" Range("E127").Select ActiveCell.FormulaR1C1 = "=Formler!R[-119]C[3]" Range("E129").Select ActiveCell.FormulaR1C1 = "=Formler!R[-117]C[6]" Range("E131").Select ActiveCell.FormulaR1C1 = "=Formler!R[-123]C[8]" Range("E134").Select ActiveCell.FormulaR1C1 = "=Formler!R[-126]C[10]" Range("E138").Select ActiveCell.FormulaR1C1 = "=Formler!R[-125]C[3]" Range("E141").Select ActiveCell.FormulaR1C1 = "=Formler!R[-128]C[6]" Range("E145").Select ActiveCell.FormulaR1C1 = "=Formler!R[-132]C[8]" Range("E148").Select ActiveCell.FormulaR1C1 = "=Formler!R[-135]C[10]" Range("E151").Select ActiveCell.FormulaR1C1 = "=Formler!R[-137]C[3]" Range("E152").Select ActiveCell.FormulaR1C1 = "=Formler!R[-137]C[3]" Range("E155").Select ActiveCell.FormulaR1C1 = "=Formler!R[-141]C[6]" Range("E163").Select ActiveCell.FormulaR1C1 = "=Formler!R[-136]C[3]" Range("E167").Select ActiveCell.FormulaR1C1 = "=Formler!R[-151]C[3]" Range("E170").Select ActiveCell.FormulaR1C1 = "=Formler!R[-153]C[3]" Range("E172").Select ActiveCell.FormulaR1C1 = "=Formler!R[-144]C[3]" Range("E175").Select ActiveCell.FormulaR1C1 = "=Formler!R[-144]C[3]" Range("E176").Select ActiveCell.FormulaR1C1 = "=Formler!R[-144]C[3]" Range("E189").Select ActiveCell.FormulaR1C1 = "=Formler!R[-156]C[3]" Range("E190").Select ActiveCell.FormulaR1C1 = "=Formler!R[-156]C[3]" Range("E191").Select ActiveCell.FormulaR1C1 = "=Formler!R[-156]C[3]" Range("E192").Select ActiveCell.FormulaR1C1 = "=Formler!R[-156]C[3]" Range("E193").Select ActiveCell.FormulaR1C1 = "=Formler!R[-156]C[3]" Range("E194").Select ActiveCell.FormulaR1C1 = "=Formler!R[-156]C[3]" Range("E195").Select ActiveCell.FormulaR1C1 = "=Formler!R[-156]C[3]" Range("E196").Select ActiveCell.FormulaR1C1 = "=Formler!R[-156]C[3]" Range("E199").Select ActiveCell.FormulaR1C1 = "=Formler!R[-158]C[3]" Range("E200").Select ActiveCell.FormulaR1C1 = "=Formler!R[-158]C[3]" Range("E201").Select ActiveCell.FormulaR1C1 = "=Formler!R[-158]C[3]" Range("E203").Select ActiveCell.FormulaR1C1 = "=Formler!R[-175]C[6]" Range("E206").Select ActiveCell.FormulaR1C1 = "=Formler!R[-187]C[8]" Range("E227").Select ActiveCell.FormulaR1C1 = "=Formler!R[-182]C[3]" Range("E229").Select ActiveCell.FormulaR1C1 = "=Formler!R[-183]C[3]" Range("E235").Select ActiveCell.FormulaR1C1 = "=Formler!R[-186]C[3]" Range("E236").Select ActiveCell.FormulaR1C1 = "=Formler!R[-186]C[3]" Range("E237").Select ActiveCell.FormulaR1C1 = "=Formler!R[-186]C[3]" Range("E238").Select ActiveCell.FormulaR1C1 = "=Formler!R[-186]C[3]" Range("E239").Select ActiveCell.FormulaR1C1 = "=Formler!R[-186]C[3]" Range("E241").Select ActiveCell.FormulaR1C1 = "=Formler!R[-188]C[3]" Range("E249").Select ActiveCell.FormulaR1C1 = "=Formler!R[-232]C[10]" Range("E252").Select ActiveCell.FormulaR1C1 = "=Formler!R[-234]C[10]" Range("E255").Select ActiveCell.FormulaR1C1 = "=Formler!R[-236]C[10]" Range("E256").Select ActiveCell.FormulaR1C1 = "=Formler!R[-236]C[10]" Range("E257").Select ActiveCell.FormulaR1C1 = "=Formler!R[-236]C[10]" Range("E258").Select ActiveCell.FormulaR1C1 = "=Formler!R[-236]C[10]" Range("E264").Select ActiveCell.FormulaR1C1 = "=Formler!R[-247]C[10]" Columns("e:e").Select Selection.Copy Columns("f:f").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("e:e").Select Application.CutCopyMode = False Selection.ClearContents Columns("C:C").Select Selection.Copy Columns("E:E").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Range("C88").Select ActiveCell.FormulaR1C1 = "=SUM(RC[3]:RC[620])" Range("C88").Select Selection.AutoFill Destination:=Range("C88:C177"), Type:=xlFillDefault Range("C88:C177").Select Range("C187").Select ActiveCell.FormulaR1C1 = "=SUM(RC[3]:RC[620])" Range("C187").Select Selection.AutoFill Destination:=Range("C187:C299"), Type:=xlFillDefault Range("C187:C299").Select Range("C1").Select Sheets("Beräkning").Select Range("C1").Select Sheets("Uträkningsdata").Select Range("D1:D49").Select Selection.Copy Sheets("Beräkning").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Uträkningsdata").Select Columns("C:C").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Sheets("Beräkning").Select Range("C1").Select End Sub
    • Av Tom Düring
      Hej,
      Mitt problem är att skapa en textfil från ett Excel-ark där man först har en "öppningsrad" med visst innehåll och därefter 3 st rader rader som hänger samman, där data hämtas från en tabell och läggs in i respektive rad i en viss förutbestämd position ("fält"). I vissa fall skall "fältet" fyllas ut med nollor framför värdet. Varje rad är alltid 180 tecken lång och blanktecken förekommer  för att fälten skall komma i rätt position.
       
      När en post är behandlad går man till nästa (=rad) och gör om proceduren.
       
      Filen avslutas med en "stängningsrad" med visst innehåll.
       
      Ut skall komma en TXT-fil med ASCII-tecken som sedan skall kunna skickas till banken.,
       
      Allt bygger på Sparbankernas SUS-format på betalfiler.
       
      Är det någon som vet om ovanstående går att göra, eller måste jag gå någon annan väg än Excel ? Köpa ett löneprogram är ingen utväg....
       
      Tacksam för svar.
       
      //Tom
    • Av @L@
      Hej! Har "vissa" problem och hoppas att någon kan hjälpa mig!
       
      I blad 1 ska användaren via en inputbox kunna ange en siffra mellan 1-31. Beroende på vilken siffra som anges ska ytterligare X+3 rader skapas nedanför den aktiva cellen. Till Dessa ska sedan data/formler från blad 2 klistras in.
       
      Förslag 1:
      1. X antal rader infogas + 3 för rubrik och beräkningar
      2. raden innehållande data och formler hämtas från blad2
      3. raden innehållande data och formler i blad 2 kopieras till de rader som skapats i blad1.
      4. Beräkningarna hämtas från blad2
       
      Förslag 2:
      1. X antal rader infogas + 3 för rubriker och beräkningar
      2 Beroende på det antal rader som användaren angett i inputbox:en hämtas data från blad2, tex; 1=A2:L5, 2=A7:L11 osv.
       
      se bifogad fil.
       
      Någon som har lösning på dessa problem???  tack!
      Exempel.xlsx
  • Senaste som Tittar

    Inga registrerade medlemmar är inne på denna sida.

  • Obesvarade ämnen

  • Nya ämnen

×
×
  • Skapa nytt...