Byggahus.se

Excel VBA problem

  1. E
    Medlem Nivå 6
    Hej,

    Någon som är duktig på Excel och kan hjälpa mig med ett problem?

    Jag får en prognos på artiklar ifrån en kund i ett visst format medan affärssystemet kräver ett annat format för att läsa in siffrorna.

    Någon som kan snickra ihop lite VBA kod som löser mitt problem?

    Bifogar ett exempel på vad jag menar.
     
  2. Janus82
    Medlem · Nivå 10
    Nu var det så många år sedan jag skapade VBA-makron i Excel så jag vill inte riktigt ge mig på det. Dock så är det ju ganska enkelt att lösa omstruktureringen av datamaterialet med hjälp av pivot-tabeller. Det kräver ju lite handpåläggning vilket inte är särskilt effektivt men det är ju ändå bättre än att sitta och flytta varje rad för hand, om det nu ens är så du gör idag.

    Personligen så hade jag valt att fixa problemet med inläsningen i det program som ska läsa in datamaterialet. Men då jobbar jag främst med SAS och ibland lite SQL och de är ju båda mycket enklare att använda för att flytta runt data-material.
     
  3. E
    Medlem Nivå 6
    Vi får prognoser i alla möjliga format och då fungerar Excel relativt bra och man slipper köpa anpassningar för varje kund, har gjort ett makro som hämtar upp kundens filer och skapar en ny csv i ett format som jag sedan läser in.

    Skall testa bygga vidare på ditt förslag, man löser ju en del av problematiken iaf , behöver bara få till så det fungerar med automatik och anpassar sig efter filens längd som kan variera och även få till datumraden, kunden ger alltid 12mån prognos med start månaden efter så i exemplet skall Mån1 skall vara lika med oktober, Mån2 = november osv...

    Någon som har en alternativ lösning att tipsa om?
     
  4. P
    Medlem Nivå 1
    Slängde ihop ett script som formaterat det aktiva bladet och skapar ett nytt blad för formaterad data. Kanske kan du bygga vidare på detta.

     
    • Laddar…
  5. E
    Medlem Nivå 6
    Tack Janus och Pär,

    Nu har jag ett par lovande varianter att testa, kvällen är räddad!! (y)
     
  6. E
    Medlem Nivå 6
    Pär: Testade ditt script och det är oerhört nära att göra precis det jag söker :D

    Edit: Det gör ju exakt som jag önskade, var nog lite trött när jag testade först....

    Klockrent!! Stort tack!!
     
    Redigerat 23 sep 2015 19:17
  7. E
    Medlem Nivå 6
    Nu kommer nästa dilemma, makrot fungerar nu perfekt men skulle vilja att makrot kördes direkt när man öppnade Excel om filen har ett visst namn.

    Lägger jag in koden nedan i Excelboken så fungerar det perfekt och det startar så fort jag öppnar boken men eftersom prognosen mailas ifrån kunden så kan ju inte makrot finnas i den boken, lägger jag in samma kod i personal.xslb så får jag istället ett felmeddelande...

    Sub auto_open()

    If ActiveWorkbook.Name Like "Prognos*" Then

    Prognos

    Else

    End If

    End Sub

    Kan givetvis ha ett "inläsningsark " med alla makro som hämtar in datan ifrån kundens fil men skulle vilja slippa att jobba med flera filer då de som skall hantera prognoserna har begränsade kunskaper i Excel.
     
  8. B
    Medlem · Nivå 9
    Kan man ha makro i standardmallen?

    Edit: Finns tydligen Personal Macro Workbook, http://wheatblog.com/2011/08/where-is-the-excel-personal-macro-workbook-located/
     
    Redigerat 24 sep 2015 20:03
  9. Mikael_L
    Medlem · Nivå 25
    Hehe
    Jag hade skrivit:

    int x = 1000
    do {
    printf( "Tack\n" );
    } while ( x > 1 );

    Fast kanske i VBA-språk då, nu avslöjade jag mig som C-hackare ... :surprised:
     
  10. E
    Medlem Nivå 6
    Ja absolut kan man det, du kan skapa ett antal standardmakron som du ofta använder och som ligger med redo att användas när du öppnar vilken bok som helst och även koppla dessa makron till egna knappar i menyerna så man lätt kommer åt dom.
    Saker man alltid vill skall hända när man öppnar Excel kan man lägga automatik på men jag lyckas inte få till villkorsstyrd automatik baserat på filnamnet... frågan är om det går och i så fall hur...
     
  11. Bo.Siltberg
    Hobbyelektriker · Nivå 25
    Kör inte detta på en Windowsdator bara, den kommer att hänga ;)

    Är förresten inte Microsoft biztalk precis till för det problem TS har ;) Jag har använt det en gång...
     
  12. N
    Medlem Nivå 14
    Jag tror att det även går att ha separata filer med makron som ligger som "resurser" (i Word går det i alla fall). Fast jag vet inte var man hittar det numera... Hatar Office 2010, man hittar ju ingenting längre.
     
  13. E
    Medlem Nivå 6
    Känns som det mest är folk med andra programmeringskunskaper än i just VBA men gör ett försök iaf. :)

    Någon som har en teori varför koden som Pär skrivit nedan fungerar perfekt om man sparar den som ett makro i en vanlig arbetsbok men så fort jag lägger den i den personliga makroboken så hoppar man istället direkt till slutet efter raden For inputArticleRow = 3...
    (Någon som är skarpare kanske kan testa att klippa in koden i sitt Excel och se om ni får samma resultat)


    ' reads from active sheet and creates a new sheet with formated data
    Sub FormatPrediction()

    'indexes
    Dim inputArticleRow As Integer
    Dim inputPredictionColumn As Integer
    Dim outputArticleRow As Integer

    'sheets
    Dim outputSheet As Worksheet
    Dim inputSheet As Worksheet

    Set inputSheet = ActiveSheet
    Set outputSheet = Sheets.Add

    ' do the formating
    outputArticleRow = 1 ' start output at first row
    For inputArticleRow = 3 To Blad1.Cells(Rows.count, "a").End(xlUp).Row 'start input at third row and read to last row that contains anything
    For inputPredictionColumn = 2 To 6 ' read columns 2 to 6
    outputSheet.Cells(outputArticleRow, 1).Value = inputSheet.Cells(inputArticleRow, 1).Value
    outputSheet.Cells(outputArticleRow, 2).Value = Format(DateAdd("m", inputPredictionColumn - 1, Date), "YYYYMM") 'next month from current date as first prediction
    outputSheet.Cells(outputArticleRow, 3).Value = inputSheet.Cells(inputArticleRow, inputPredictionColumn).Value

    outputArticleRow = outputArticleRow + 1 ' adjust index for output
    Next
    Next

    End Sub
     
  14. N
    Medlem Nivå 14
    Du måste väl peka ut vilket objekt (d.v.s. vilken fil) som makrot ska jobba på?

    D.v.s. det där ActiveSheet behöver även innehålla identiteten på den Workbook som gäller?
     
  15. E
    Medlem Nivå 6
    Jag har testat med: Set inputSheet = ActiveWorkbook.ActiveSheet vilket inte gjorde någon skillnad, raden: Set outputSheet = Sheets.Add lägger till ett nytt blad i boken precis som den skall så i det fallet fungerar det ju ändå.

    Detta gör mig galen... så nära men ändå inte...