Gå till innehåll

MH_

Medlem
  • Innehållsantal

    180
  • Gick med

  • Dagar vunna

    20

Inlägg postade av MH_

  1. Sub tjoflöjt()
    Dim WS As Worksheet
    Dim namn As Name
    Dim adress As String
    For Each WS In ActiveWorkbook.Worksheets
        For Each namn In WS.Names
        
                If ((InStr(namn.Name, "Print_Area") > 0) Or (InStr(namn.Name, "Print_Titles") > 0)) Then
                    adress = namn.RefersTo
                        If (InStr(namn.Name, "Print_Area") > 0) Then
                            namn.Delete
                            WS.PageSetup.PrintArea = adress
                        ElseIf (InStr(namn.Name, "Print_Titles") > 0) Then
                            namn.Delete
                            WS.PageSetup.PrintTitleRows = adress
                        End If
                End If
        Next namn
    Next WS
    End Sub

    då kommer Utskriftsområde och Utskriftsrubriker finnas kvar medan de namngivna "Print_Area" och "Print_Titles" försvinner (omvandlas till Utskriftsområde/Utskriftsrubriker på svenska).

    Kolla de här paren med svenska/VBA namn före/efter rensningen

    Sub namn()
    Dim namn As Name
        For Each namn In ActiveWorkbook.Names
            Debug.Print (namn.NameLocal & Chr(10) & namn.Name & Chr(10))
        Next namn
    End Sub

     

    ****ED***

    Dvs de kvarvarande områdena kommer att ha namnpar som ser ut så här: 

    Ändringshistorik!Utskriftsområde
    Ändringshistorik!Print_Area

    Ändringshistorik!Utskriftsrubriker
    Ändringshistorik!Print_Titles

    • Thanks 1
  2. japp.

    kolla med

    Sub test()
    MsgBox ActiveSheet.PageSetup.PrintArea
    MsgBox ActiveSheet.PageSetup.PrintTitleRows
    End Sub

    Så ser du att det område som heter  Print_Area  när du kör .NameLocal inte är ett Print_Area "på riktigt". det andra känns inte igen som en "riktig"  PrintArea

    Dvs den som skapade utskriftsområdet har bara gett ett område namnet "Print_Area". Inte skapat det med hjälp av PageSetup

     

    Testa så här (bara print_title)

    • Gå igenom varje blad.
    • Kolla om ett namn innehåller "Print_Titles".  Om så:
      • spara adressen
      • ta bort området
      • skapa printTitle genom att sätta PageSetup.PrintTitleRows=adressen
    • Nästa blad
    Sub tjoflöjt()
    Dim WS As Worksheet
    Dim namn As Name
    Dim adress As String
    For Each WS In ActiveWorkbook.Worksheets
        For Each namn In WS.Names
                If (InStr(namn.Name, "Print_Titles") > 0) Then
                    adress = namn.RefersTo
                    namn.Delete
                    WS.PageSetup.PrintTitleRows = adress
                End If
        Next namn
    Next WS
    End Sub

    Då kommer du bara att ha ett "Print_Title" för varje blad. Och det känns igen av excel så det borde inte skapas några nya om du jobbar manuellt

     

    Lägg in en IF för "Print_Area" också

    Sub tjoflöjt()
    Dim WS As Worksheet
    Dim namn As Name
    Dim adress As String
    For Each WS In ActiveWorkbook.Worksheets
        For Each namn In WS.Names
        
                If (InStr(namn.Name, "Print_Titles") > 0) Then
                    adress = namn.RefersTo
                    namn.Delete
                    WS.PageSetup.PrintTitleRows = adress
                End If
        
                If (InStr(namn.Name, "Print_Area") > 0) Then
                    adress = namn.RefersTo
                    namn.Delete
                    WS.PageSetup.PrintArea = adress
                End If
        Next namn
        
    Next WS
    End Sub

     

    Peta in det i någon snurra som letar efter rätt workbooks

    • Thanks 1
  3. Då får du väl köra en snurra som räknar antalet "Print_Titles" och radera det som heter "Utskriftsrubriker" när man kör lokala namn:

     

    Sub radera_Utskriftsrubriker()
    Dim namn As Name
    Dim PTcount As Integer
    PTcount = 0
        For Each namn In ActiveWorkbook.Names
            If (InStr(namn.Name, "Print_Titles") > 0) Then
                PTcount = PTcount + 1
            End If
        Next namn
    If PTcount > 1 Then
        For Each namn In ActiveWorkbook.Names
            If (InStr(namn.NameLocal, "Utskriftsrubriker") > 0) Then
                namn.Delete
            End If
        Next namn
    End If
    
    End Sub

     

    MEN. i rimlighetens namn är det det område som döps om till det lokala namnet som är "Riktigt". Det område som kallas "Print_Titles" oavsett språk borde vara något som excel inte känner igen som "Print_Titles"

     

    + du behöver eventuellt köra det här för varje enskilt blad eftersom du faktiskt kan ha en "Print_Titles" i varje blad

  4. Öppnade filen du hade lagt i den andra tråden. Jag får inga fel så jag vet inte riktigt vad som blir stökigt.

    Men:

    Alla utskriftområden (oavsett språk) får en begränsad räckvidd (bladet). Om du vill radera ett sånt område tror jag att du måste ställa dig i det bladet först. Typ:

        Sheets("UCA001").Select
        ActiveWorkbook.Names("Print_Area").Delete

    Eller, det verkar även funka att hänvisa till 'UCA001'!Print_Area

    ActiveWorkbook.Names("'UCA001'!Print_Area").Delete

    Hmm, eller inte. i din exempelfil så har du två print titles.  I excel ger Ctrl+F3 två områden: utskriftsrubriker och Print_Titles. 

    Men om du kör den här loopen så "ser" VBA båda områdena som "'UCA001'!Print_Titles"  (lista i direktfönstret)

    Sub xxx()
    Dim namn As Name
        For Each namn In ActiveWorkbook.Names
            Debug.Print (namn.Name)
        Next namn
    End Sub

    Men, koden:

    ActiveWorkbook.Names("'UCA001'!Print_Titles").Delete

    tar bara bort den ena...

     

    *****************************************************************************************************************************

    Ähh, testa något i den här stilen. Letar igenom alla namn. Om namnet innehåller ordet "Print_Area" så raderas det : 

    Sub test()
    Dim namn As Name
        For Each namn In ActiveWorkbook.Names
            If InStr(namn.Name, "Print_Area") > 0 Then
                namn.Delete
            End If
        Next namn
    End Sub

    Det borde funka även om det finns "Print_Area" i olika blad. VBA sköter ju adresseringen själv så du behöver inte bry dig.

     

    Och om du vill radera både area och Titles:

    Sub test2()
    Dim namn As Name
        For Each namn In ActiveWorkbook.Names
            If ((InStr(namn.Name, "Print_Area") > 0) Or (InStr(namn.Name, "Print_Titles") > 0)) Then
                namn.Delete
            End If
        Next namn
    End Sub

    Inspirerat av:

    excel - Delete specific name ranges using vba - Stack Overflow

    • Thanks 1
  5. Nej. vid närmare eftertanke så används samma DIR för att söka efter undermappar. Och då skiter sig den delen.

     

    Du redan en separat funktion (isExcelFile) som kollar om de filer (inte mappar) som hittas är excelfiler.  Du får väl modifiera den istället

    Börja med att ta bort sökvägen ur anropet så att

    If isExcelFile(folderPath & filename) Then
    blir:

    If isExcelFile(filename) Then

    Sen får du modifiera funktionen

    Function isExcelFile(filename As String) As Boolean
      isExcelFile = (InStr(1, filename, ".xl") > 0)
    End Function

     

    till

    Function isExcelFile(filename As String) As Boolean
      isExcelFile = ((InStr(1, filename, ".xls") > 0) AND (InStr(1, filename, "ABC") = 1))
    End Function

     

    raden 

    isExcelFile = (InStr(1, filename, ".xl") > 0)

    kollar redan om det är en excelfil. 

    Men den klarar inte ABC*.XLS*  eftersom det bara är en strängsökning. Då får du dela upp det på två delar med AND, typ 

    Dvs .XLS någonstans och  ABC på första positionen

    • Thanks 1
  6. Kan man ana att någon har varit lite för mån om att vara inkluderande? "Tredje man" är ju ett etablerat begrepp. Men "Tredje person"  känns som om någon har gått lite för många chefskurser.

  7. Utan att testa. Dra ner startsubben till:

    Sub StartSub()
        Dim folder As String
        folder = GetFolder
        If folder = "" Then Exit Sub
        Application.ScreenUpdating = False
            LoopAllSubFolders folder
        Application.ScreenUpdating = True
    End Sub


    så kan du lägga en "yttre loop" så att du kör alla sök/ersättpar innan du går till nästa bok

    Sub LoopWorkbook(wb As Workbook)
    Dim SökTextBok As Workbook
    Dim rMinStartCell As Range
    Set SökTextBok = Workbooks.Open("C:\temp\sökpar.txt")
    Set rMinStartCell = SökTextBok.Sheets(1).Range("A1")
    Dim ws As Worksheet
    
    Do Until rMinStartCell.Value = ""
        globalSearchFor = rMinStartCell.Value
        globalReplacewith = rMinStartCell.Offset(0, 1).Value
        If globalReplacewith = "" Then Exit Sub
            For Each ws In wb.Worksheets
                SearchReplace globalSearchFor, globalReplacewith, ws
            Next ws
        Set rMinStartCell = rMinStartCell.Offset(1, 0)
    Loop
    SökTextBok.Close
    
    End Sub

     

    Där du kanske vill deklarera "SökTextBok" globalt och läsa in /stänga från StartSub

    Medan globalSearchFor och globalReplacewith kan göras lokala.

     

    Dvs om du har tråkigt. 

    • Like 1
  8. i  "startSub" kan du istället för "InputBox:arna" öppna din textfil som en arbetsbok och hämta sök/ersätt paren från A/B kolumnen. sen loppa rad för rad tills du stöter på en tom cell (do...loop i exemplet)

    '...
    'befintlig kod för att hämta sökväg
    Dim folder As String
    folder = GetFolder
    If folder = "" Then Exit Sub
    
    'ny kod för att hämta sök/ersätt från textfil
    
    Dim SökTextBok As Workbook
    Dim rMinStartCell As Range
    Set SökTextBok = Workbooks.Open("C:\temp\sökpar.txt")
    Set rMinStartCell = SökTextBok.Sheets(1).Range("A1")
    
    ' Loopa igenom raderna i textfilen
    Do Until rMinStartCell.Value = ""
        globalSearchFor = rMinStartCell.Value
        'Och "ersätt med" från  B-kolumnen
        globalReplacewith = rMinStartCell.Offset(0, 1).Value
        'kör koden du redan har för att kolla om det finns tomma värden
        If globalSearchFor = "" Then Exit Sub
        If globalReplacewith = "" Then Exit Sub
        
        ' anropa LoopAllSubFolders
        Application.ScreenUpdating = False
        	LoopAllSubFolders folder
        Application.ScreenUpdating = True
    
    	'sist i loopen flytta du ner "rMinStartCell" en rad
        Set rMinStartCell = rMinStartCell.Offset(1, 0)
    'och loopa
    Loop
    
    'och stäng textfilen när loopen är färdig
    SökTextBok.Close
    

    Se bara till att ändra ordningen så att getfolder osv ligger före i koden.

     

    Det här exemplet är förmodligen väldigt långsamt.  Du kör ett par med sök/ersätt , loppar igenom alla filar osv. Sen tar du nästa par och kör sök/ersätt. 

    Det borde vara mycket snabbare att vända på det - sök upp en fil, kör samtliga sök/ersätt. Sök upp nästa fil osv.  Men då måste du ändra din fungerande struktur, och sånt suger.

     

    Här har du text om hur man läser textfiler med VBA

    https://www.automateexcel.com/vba/read-import-text-file/

    https://www.automateexcel.com/vba/read-import-text-file/

    • Thanks 1
  9. Jag använder aldrig Powerpoint själv. Så se det som killgissningar...

    Testa: 

    Bildspel->eget bildspel ->anpassade bildspel->nytt

    Där kan du skapa ett bildspel (bildordning) för en utbildning genom att "skicka dom till höger"

    Ge ett bra namn och klicka OK

    börja om från

    ->nytt

    och skapa ett ny bildordning för nästa utbildning

    osv.

     

    När du har skapat bildspelen så kan du starta dom från "eget bildspel"

    eller skapa genvägar på ditt sammanställningsblad

    På ditt sammanställningsblad måste du först skriva en text som skall bli klickbar och markera den. T.ex 

    Utbildning 1

    sen infogar du länken via 

    Infoga->hyperlänk (eller ctrl+i)

    "Plats i det här dokumentet". Längst ner till höger har du "anpassade bildspel" .

    Tada!!!!

    https://support.microsoft.com/sv-se/office/skapa-och-visa-ett-anpassat-bildspel-09d4d340-3c47-4125-b177-0de3be462c5d

     

    **************************************************************************************************************************

    Övrigt att leka med. Jag skrev det innan jag kom ihåg anpassade bildspel, så du får läsa det vare sig du vill eller inte :-). Värdelöst för det du vill göra men powerpint-Zoom är extremt användbart om du t.ex vill lägga länkar till utvikningar som du kanske vill köra om publiken kräver det.

    **************************************************************************************************************************

    Kolla om

    Infoga->Zoom

    kan göra saker du vill.

    https://support.microsoft.com/sv-se/office/använd-zoom-för-powerpoint-för-att-ge-din-presentation-liv-9d6c58cd-2125-4d29-86b1-0097c7dc47d7

    Jag tror inte att du kan göra exakt det du vill

    På förstasidan så kan du infoga en avsnittst-zoom (genvägar till varje utbildning).

    Men du måste gör 3 olika avsnitt där bilderna (kopior) kommer i den ordning du vill. Så du vinner inte jättemycket. det blir som att ha 3 powerpointfiler i en bara

    Tyvärr verkar inte Powerpoint ha något sätt att klona en bild (så att kopian ändras när originalet ändras). Det hade ju varit en variant annars.

    Ahhh. se anpassade bildspel ovan

  10. Så fort du skriver in något i stil med 2023-06-30 så försöker excel att översätta det till ett datumvärde (45097 dagar sedan 1900-talets start) Men beroende av visningsformat och så visas det som 45097 eller ett datum (det är fortfarande 45097 som ligger i bakgrunden). Det är bara för att excel skall kunna räkna på datum osv. Den automatiken är svår att "döda".  

    Om det visas som 45097 så kan du alltid ändra visningsformatet 
    (ctrl+1, datum), eller Ctrl+Shift+3 för (engelskt) datumformat

    Även om det underliggande formatet är 45097 så kommer det att visas som 2023-06-20, eller 20-jun-23 om du kör Ctrl+shift+3

    ******************************************************************

    Men jag förstå inte vad du menar med att :

    =TEXT(A1;"ÅÅÅÅ-MM-DD")

    Inte funkar. Den skapar en (vänsterställd) kopia i rent  textformat. Vad är det som blir fel???

    Om man kopierar en sån cell och kör "klistra in som värde" så blir det också en (vänsterställd) textcell.

    Så fort du går in och redigerar omvandlas det visserligen till (högerställt) datumformat. Är det du får problem med??? Då kan du markera den nya kolumnen och göra om den till textformat. Då respekteras formatet (i nyare excel i alla fall).

     

    Och vad menar du med "import"

    Om du använder "hämta och transformera" så kan du bestämma hur du vill importera. Exempel när du hämtar från en befintlig tabell (likadant om du t.ex hämtar från extern excelbok)

    DATA->hämta och transformera->från tabell/intervall

    i Editorn kan du markera den vänstra delen av kolumnhuvudet (där det står "datum"). Ändra till det datumformat du vill ha (om du vill slippa tiderna ändrar du till "Datum" -> byt ut steg).

    När datumet ser ut som du vill så gör du samma sak, men väljer formatet "text" och->"Lägg till nytt steg"

    image.png.5c26f967ae955509a5adc8d87d91cccd.png

    Upprepa för de kolumner som behöver fixas. 

     

  11. Nja, du är nog tvungen att göra en flerstegsraket med tre filer inblandade.

    Original.xlsx
    Old.xlsx
    New.xlsx

     

    1. En fråga som hämtar dina originaldata till filen Old. Det är en powerQuery som du bara kör en gång.

    Jag skapade en snabbfråga som hämtar Tabell1 i C:\tmp\Original.xlsx. Exempelfrågan blir så här: 

    HämtaOriginal (läs in som tabell)

    let
        Källa = Excel.Workbook(File.Contents("C:\tmp\Original.xlsx"), null, true),
        HämtaOriginal_tabell = Källa{[Item="Tabell1",Kind="Table"]}[Data],
        #"Ändrad typ" = Table.TransformColumnTypes(HämtaOriginal_tabell,{{"Datum", Int64.Type}, {"B", Int64.Type}, {"C", Int64.Type}})
    in
        #"Ändrad typ"

    Stäng din Query och markera den skapade tabellen. Döp om tabellen till t.ex  "tabell_old" (menyn Tabelldesign->längst till vänster)

    Sen skapar du en fråga som hämtar det sista datumet från Tabell_old

    MaxDatum (Endast anslutning)

    let
       Källa = Excel.CurrentWorkbook(){[Name="tabell_old"]}[Content],
        #"Beräknat senast" = List.Max(Källa[Datum])
    in
        #"Beräknat senast"

    Som du ser är det Tabell_old i "CurrentWorkbook" som används som källa. dvs den tabell som skapades när vi hämtade "original"

    Sen hämtar du den nya tabellen och filtrerar den med hjälp av MaxDatum.

    HämtaNew  (Endast anslutning)

    let
        Källa = Excel.Workbook(File.Contents("C:\tmp\New.xlsx"), null, true),
        HämtaNew_Table = Källa{[Item="Tabell1",Kind="Table"]}[Data],
        #"Ändrad typ" = Table.TransformColumnTypes(HämtaNew_Table,{{"Datum", Int64.Type}, {"B", Int64.Type}, {"C", Int64.Type}}),
        #"Filtrerade rader" = Table.SelectRows(#"Ändrad typ", each [Datum] > MaxDatum)
    in
        #"Filtrerade rader"

    Eller något annan av Ed's förslag

     

    Slutligen slår du ihop frågan HämtaNew  och Tabell_old i "CurrentWorkbook". Ställ dig i "tabell_old" och gör en 

    Data->hämta och transformera->från tabell/intervall

    Fixa till koden så att det blir något i den här stilen: 

    uppdatera_nytt

        Källa = Excel.CurrentWorkbook(){[Name="tabell_old"]}[Content],
        #"Tillagd fråga" = Table.Combine({Källa, HämtaNew})
    in
        #"Tillagd fråga"

     

     

    ********* ed, glömde det viktigaste***********

    Stäng editorn.  Dina data har lagts ihop i en ny tabell.  Radera den gamla "tabell_old"  och döp om din nya tabell till "tabell_old" (menyn Tabelldesign->längst till vänster)

    Nu hämtas gamla data från Tabell_old och nya data läggs till Tabell_old. Dvs Tabell_old växer varje gång du läser in en ny rapport 

    ********************************************

     

    Det är alltså frågan "uppdatera_nytt" som du kör när du vill lägga på nya data.

    Testa på ett mindre material och se om det blir som du vill. 

     

    Sen får du försöka optimera lite. Jag har kört på ett pyttexempel så jag vet inre riktigt om/vad som tar tid. Men "hämtaNew" och MaxDatum behöver inte synas som tabeller så du borde kunna köra dem som "endast anslutning":

    image.png.334b02323ba58ad9bf54be12ac37f84d.png

    Sen kan du högerklicka på varje fråga och kolla inställningar för anslutning osv.

    Hämtningen av Original-tabellen behöver t.ex bara köras en gång (manuellt). så där kan du se till att alla uppdateringar är avstängda.

    image.png.29422b0a991c824b93aad5940458e10c.png

     

    Eller- När du har kört Original-hämtningen så kan du ta bort den frågan om du vill

    Ähhh. Testa med lite mindre filer som sagt var. Du vill väl framför allt vara säker på att du inte sätter igång en rundgång när tabellen uppdateras. 

    Och så kanske du vill sortera efter datum osv 

    /tjolavipp

    • Like 1
  12. Något är fortfarande knas. Jag skulle uppfatta 30 sekunder som för mycket. 30 minuter är nonsens. 

    *******************

    Vet inte om jag fattar frågan. Om du inte har samkört "April" och skriver över filen så försvinner ju data?

    *******************

     

    > lägga in alla nya datum som inte redan finns i "old" i rapporten.

    Du kan testa den här varianten från Ed Hansberry

    https://www.ehansalytics.com/blog/2019/3/17/create-a-dynamic-date-table-in-power-query

    gå ner till "So how do we make this dynamic? " för att se hans variant.

    Förkortat:

    I query editorn: Högerklicka på fråga1/old -whatever: Frågan som läser in "old"

    Välj "referens"

    Då skapas det en länk till fråga 1 (som heter Tabell1 i mitt påhittade exempel). Klickar du på "avancerad editor" ser du att koden är jättekort. Det är bara en länk till första frågan

    let
        Källa = Tabell1
    in
        Källa

     Döp om den nya frågan till "SistaDatum"

    I den nya frågan Markerar du datumkolumnen och går till

    Transformera->datum->Senaste

    Den nya länk-frågan resultera då i en tabell med ett enda värde: det sista datumet i "OLD". Med en marginellt längre kod:

    let
        Källa = Tabell1,
        #"Beräknat senast" = List.Max(Källa[Datum])
    in
        #"Beräknat senast"

     

    Sen behöver du "bara" filtrera bort gamla datum i tabell2 innan den skickas vidare till sammanslagning

    Ed föreslår att du helt enkelt filtrerar tabell2 med ett godtyckligt datum och sedan ändrar koden

    Gå till tabell2-frågan och klicka på "filterpilen" i kolumnhuvudet. Datumfilter, datum efter -> välj ett datum, vilket som

    då får jag in en filterkod i stil med:

    #"Filtrerade rader" = Table.SelectRows(#"Ändrad typ", each [Datum] > #date(2023, 6, 14))

    Sen använder Ed frågan "SistaDatum" som en parameter och ersätter det "hårdkodade" datumet

        #"Filtrerade rader" = Table.SelectRows(#"Ändrad typ", each [Datum] > SistaDatum)

    Sen använder du den filtrerade tabell2 när du slår ihop tabellerna.

     

    *******************************************************************************

    Du i princip skippa hjälptabellen och köra all kod i Fråga2. Men det var mycket svårare att få till en fungerande kod då (för mig). Men det här verkar funka.

    #"Filtrerade rader" = Table.SelectRows(#"Ändrad typ", each [Datum] > List.Max(Tabell1[Datum]))

    *******************************************************************************

    *************
    Tips
    *************

    Är du lika dålig som jag på att bestämma var tabellerna skall hamna?

    I excelbladet, så syns frågorna till höger. Exempelvis behöver vi inte se tabellen "SistaDatum".

    Högerklicka på frågan och välj "Läs in till"  och ändra till "skapa endast anslutning" (sen kan du ta bort det bladet också)

    Du kan eventuellt göra samma sak för tabell2. Du behöver ju inte se den tabellen

    Btw. Kör du "datamodellen"? Enligt min erfarenhet är det lite segare än klassisk excel. Om du inte behöver förmågan att hantera gigagantiska data så kanske du kan strunta i det.

    **************************

  13. Tidsåtgången är obegriplig. Kan inte hjälpa där. Läser du in tabell2 ordentligt innan du börjar joina?

     

    Om du kollar länken

    https://learn.microsoft.com/sv-se/powerquery-m/table-distinct

    så hänvisar de till buffring som en lösning på vissa problem:

    https://learn.microsoft.com/sv-se/powerquery-m/table-buffer

    Men reservationen är talande

    "om du använder den här funktionen kan det hända att dina frågor körs snabbare eller inte"

    Men det kanske är värt att leka med i alla fall?

     

    "Jag kan inte ta bort dubletter på kolumnen ordernummer heller"

    Men om du rensar dubbletterna på alla kolumner borde det blir rätt. Eller?

    dvs att du kör något i stil med

    Table.Distinct(#"Tillagd fråga")
    istället för 
    Table.Distinct(#"Tillagd fråga", {"Ordernummer"})

    Eller att du i alla fall lägger på både datum och produkt som filterkolumner

     

     

    Testa att köra med formler istället?

    Det här ger en rå sammanslagning av tabell1 och datadelen av tabell2

    =VSTACK(Tabell1[#Alla];Tabell2)

    Ta bort dubbletter (utan att ange någon kolumn= alla kolumner jämförs)

    =UNIK(VSTACK(Tabell1[#Alla];Tabell2))

    Eller så här om du bara vill ha ut data från tabell2 som är inlagt efter den sist inlagda i tabell1 (datum, ännu bättre om du har med tid. annars måste du vänta tills en dag är "färdig")

    =VSTACK(Tabell1[#Alla];FILTER(Tabell2;Tabell2[Datum]>MAX(Tabell1[Datum])))

    Problemet är naturligtvis att det sammanslagna hamnar i en ny tabell. Tabell1 är oförändrad. Så du måste en gång om dagen (ish) manuellt/script hämta hela den sammanslagna tabellen till tabell1 så att den innehåller allt gammalt innan du lägger på nya data.

     

    Annat:

    Jag är tyvärr inte inläst på "power automat" (menyn Automat i Din excel). Men jag tror att det finns färdiga funktioner för att göra precis det du vill. Eftersom "automat" inte har samma säkerhetsbegränsnngar som VBA så borde vem som helst få köra  det i din organisation.

    Kolla om det finns något här- jag är som sagt var inte inläst och kan inte riktigt bedöma:

    https://learn.microsoft.com/en-us/office/dev/scripts/resources/samples/combine-worksheets-into-single-workbook

    I exemplet handlar det nog (?) om att skapa ett automatiskt flöde i en onedrive -mapp ("automat" kan ställas in så att det körs automatiskt så fort något läggs till i en mapp, t.ex din rapport). Men även om dina filer ligger utanför onedrive så borde du kunna skapa en knapp så att du kan starta jobbet manuellt.

     

    DAX 

    distinct (union(bla bla, bla bla))

  14. Kan du inte slå ihop 

    https://learn.microsoft.com/sv-se/power-query/append-queries

    och sedan ta bort dubbletter?

    Markera alla kolumner i förhandsgranskningsläget. Högerklicka och väl "ta bort dubbletter"

    Men det förutsätter förstås att du inte kan ha dubbletter inom samma ordernummer (typ 2 skor med samma ordernummer)

    Går man in på 

    Start->avancerad redigerare

    blir den automatgenererade sammanslaging / dubblettrensningskoden någonting i stil med

    let
        Källa = Excel.CurrentWorkbook(){[Name="Tabell1"]}[Content],
        #"Ändrad typ" = Table.TransformColumnTypes(Källa,{{"ID", Int64.Type}, {"b", Int64.Type}, {"c", Int64.Type}, {"d", Int64.Type}}),
        #"Tillagd fråga" = Table.Combine({#"Ändrad typ", Sheet1}),
        #"Borttagna dubbletter" = Table.Distinct(#"Tillagd fråga")
    
    in
        #"Borttagna dubbletter"

    Där tabell1 är den ursprungliga huvudtabellen och "Sheet1" är frågan som hämtar dina uppdaterade data (t.ex från en mapp)

     

    Se upp med "Table.Distinct" och kolla att den blir rätt

    https://learn.microsoft.com/sv-se/powerquery-m/table-distinct

    När jag körde först så kollade den bara dubbletter i min ID-kolumn. Typ:

    #"Borttagna dubbletter" = Table.Distinct(#"Tillagd fråga", {"ID"})

     

    Om man snabbläser "learn" länken så kan det vara så att du kan nöja dig med att kolla dubbletter det senaste dygnet. Men jag är inte säker.

  15. För att visa tid över 24 timmar så kan du ändra visningsformatet (Ctrl+1)

    image.png.7635f5ea6f5218ca79585d6dac3c9f3a.png

    Gå till Anpassat för att ta bort sekunder om du vill. Det är hakparanteserna runt [t] som gör att du kan visa mer än 24 timmar. Så här blir den enklaste koden för timmar och minuter:

    [t]:mm

    För att visa negativa tider måste du använda Macintosh datumsystem i dokumentet

    Arkiv>alternativ>avancerat>använd Macintosh datumsystem (långt ner)

    Men excels "Macintosh datumsystem" utgår ifrån 1904 istället för 1900 så datum blir 4 år och en dag fel om du kopierar mellan dokument med olika datumsystem.

     

    • Like 1
    • Thanks 1
  16. https://support.microsoft.com/sv-se/office/specifikationer-och-begränsningar-i-excel-1672b34d-7043-467e-8e27-269d656771c3#ID0EDBD=Office_2007

    Blad i en arbetsbok: Begränsas av tillgängligt minne

     

    ************************

    för att skapa bladen "automatiskt" kan du köra ett VBA-makro. Typ:

    [Alt]+[F11] för att öppna VBA editorn

    infoga->modul

    Klistra in något i den här stilen:

    Sub veckoblad()
    Dim i As Integer
        For i = 1 To 52
            Sheets.Add After:=ActiveSheet
            Sheets(i).Name = "V" & i
        Next i
    End Sub
    

    kör koden [F5]

    Sen kan du radera modulen innan du stänger VBA-editorn

    • Like 1
  17. Jag uppskattade inte Höglund så mycket när han var aktiv. Men karln hade en hel del pärlor.

    Kul att minst en yngre förmåga (Ellen Sundberg) gjorde en hel coverplatta för flera år se:

     

    • Like 1
  18. Jag antar att du jobbar i ett Windowsprogram? inte word online? 

    Då finns Zoomen längst ner till höger på sidan. @Mikael ringade in det på sina bilder.

    Det finns även under menyn: 

    VISA->zooma

    Där har du bl.a 100%, sidbredd osv. 

    Personligen brukar jag trycka in [Ctrl] och använda rullknappen på musen (om du har en sån)

     

    När det gäller skrivaren brukar det vara enklast att fixa standardinställningar via windows

    Startknappen->kugghjulet->Enheter->din skrivare

    Ändra standardpapper osv. 

    • Like 1
×
×
  • Skapa nytt...