Gå till innehåll

MH_

Medlem
  • Innehållsantal

    180
  • Gick med

  • Dagar vunna

    20

Inlägg postade av MH_

  1. I kalkylbladet

    Är datumen ”exceldatum”? Det är svårt att se eftersom du centrerat data.

    Om du markerar en cell och trycker ctrl+0 för att visa data  oformaterat, står det fortfarande ett textdatum eller blir det en lång siffra (som ligger bakom ett datum)?

    Om du vill ha en axel med "datumavstånd" så måste underliggande data vara i datumformat.

    Om det är textdatum så kan du testa:

    • skriva in en etta (1) i en cell.
    • Kopiera cellen med etta
    • markera datumkolumnen och gå till "klistra in special" -> multiplicera
    • Formatera kolumnen som datum

    När du gör diagram från det här datasettet så bör du få fram alternativet att hantera axeln som datum. I nyare Excel gäller det även med vanliga linjediagram. I äldre Excel bara på plotterdiagram

    • Like 1
  2.  

    Hej. "Private Sub Worksheet_SelectionChange(...." ligger i boken. Inte i din excel (om du högerklickar på fliken och begär "visa kod" så ser du att den hör till fliken).

    Jag antar att du hämtar akuell rad via något i stil med:

    =RAD()=RAD(INDIREKT(CELL("adress")))

    Och den triggas ju bara av att du verkligen går in och redigerar något i en cell eller uppdaterar. Det är väl därför de gjorde "Application.Calculate".

    Så jag tror faktiskt att det är lite kört om du vill behålla Undo (om du inte vill skriva egna hanterare med hjälp av Application.OnUndo/Application.Undo).

    En variant för att lösa ditt problem är att radera dina villkor och skapa dom med ett makro så att du har kontroll. Typ (inspelat):

    Sub Makro1()
        Cells.Select
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=RAD()=RAD(INDIREKT(CELL(""adress"")))"
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        
        
        With Selection.FormatConditions(1).Borders(xlTop)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.FormatConditions(1).Borders(xlBottom)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
            .Weight = xlThin
        End With
    End Sub

    Som du ser berörs inte "Interior" överhuvudtaget. Men om du hade kört manuellt och gått in i fliken fyllnadsfärg så är risken uppenbar att "Mönster= inget" skulle ingå i villkoret. På VBA'ska något i stil med:

        With Selection.FormatConditions(1).Interior
            .Pattern = xlNone
            .TintAndShade = 0
        End With

    (test att spela in så ser du hur känslig excel är)

     

    Om du skall köra en händelsehanterare så kan du även fundera på om du inte skall dumpa aktuellt radvärde någonstans på bladet. typ "A1" och skippa CELL() formeln helt

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Application.CutCopyMode = False Then
        Range("A1").Value = Target.Row
    End If
    End Sub

     

    och låta villkoret du skapar hänvisa dit istället:

    Sub Makro1()
        Cells.Select
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=RAD()=$A$1"
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Borders(xlTop)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
            .Weight = xlThin
        End With
        With Selection.FormatConditions(1).Borders(xlBottom)
            .LineStyle = xlContinuous
            .Color = -16776961
            .TintAndShade = 0
            .Weight = xlThin
        End With
    End Sub

     

    Fast någon annan cell än A1 naturligtvis. 

    Det borde gå att skapa en "public funktion" och hänvisa dit. Men vem orkar.

     

    • Thanks 1
  3. jag testade ditt dokument och det funkar att markera alla dokument om du gör det via Ctrl+G

    Ctrl+G+[special...]

    image.png.8fc05935903dffb8993190f355539229.png

    objekt->[Ok]

    image.png.6b9fcadda9956c10b36f5a344a16193b.png

    Då blir alla dina dolda rutor markerade och du kan trycka [Del] eller [Backspace] eller högerklicka och välj "klipp ut"

    Har ingen aning om hur de skapades.  Är det en mall du fått av någon? Autoshapes känns gammalmodigt. Kan det vara något som har skapats när du försökt spara  ett dokument i kompabilitetsläge?

    • Thanks 1
  4. Blir det överhuvudtaget något markerat när du går till:
    Ctrl+G+[special...]->objekt->[Ok]

    Eller får du meddelandet "Hittar inga objekt"?

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

    Om det skapas objekt ur "tomma intet" så måste det nästan ligga händelseaktiverad kod. Vad ser du om du:

    Högerklickar på fliknamnet (längs ner på fliken) och begär "visa kod"

    Är det ett helt tomt kodfönster eller ligger det kod däri?

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

    • Like 1
  5. Kolla Youtuben från 8:08 ungefär

    https://youtu.be/OS7BPjTy3H0?t=487

    I VBA-editorn

    Verktyg->referenser

    Bläddra ner till, och välj, MicrosoftVBscriptRegularexp...

    Sen kan du använda regexp för att se om cellen passar mönstret. Tyvärr blir jag inte klok på hur du bygger delar som i word om du skulle vilja köra replace. Men du kan använda vanliga vänster/extext och helt enkelt byta ut det 24:e tecknet mot en radbrytning (chr(10) - jag kommer inte ihåg om en radbrytning har koden 10 eller 13, testa)

    Sub MönsterMatch()
    
    ' hämtar regexp till ett eget objekt regex (eller vad det heter, se Youtuben)
    Dim regEx As New regexp
    regEx.Global = True
    
    Dim rCell As Range
    
    ' Sökmönstret = radstart (^), 23 tecken, mellanslag, 13 tecken, radslut ($)
    ' i engelsk regexp så avänds "." istället för "?" för att ange "vilket tecken som helst"
    regEx.Pattern = "^.{23} .{13}$"
    
    ' gå igenom alla celler i det markerade området
    For Each rCell In Selection.Cells
        ' OM cellen passar mönstret så hämtar du de vänstraste 23 tecknen, skriver en  radbrytning och hämtar tecken 25+13
        If regEx.Test(rCell.Value) = True Then
            sOld = rCell.Value
            rCell.Value = Left(sOld, 23) & Chr(10) & Mid(sOld, 25, 13)
        End If
    Next rCell
    End Sub

    Du får anpassa mönstret 23 mellanslag 13 så att det passar det du faktiskt har.

    Om du vet att det alltids skall starta/sluta på samma sätt så kan du göra sökningen säkrare gemom att ändra söksträngen.

    • Thanks 1
  6. Excel kan söka med jokertecken. Men så vitt jag vet kan du inte föra över det till ersätt med.

    Word har "mönstermatchning" som är en en variant av "Regular Expression" (På svenska heter det något annat än mönstermatchning utanför Microsoft, men det är blankt i skallen)

    https://support.microsoft.com/sv-se/topic/exempel-på-jokertecken-939e153f-bd30-47e4-a763-61897c87b3f4

    Då kan du bygga delar där varje parantes är ett uttryck. T.ex (börja med 23 valfria tecken) (mellanslag) (13 valfria tecken)

    (<?{23})( )(?{13})

    och sedan ersätter du med Sökuttryck1, radbrytning, Sökuttryck3

    \1^l\3

    ***************************** Ok, det var Word...************

    Det finns tillägg som ger excel RegEx. Men det känns jobbigt.... Kolla här t.ex:

    https://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops

    https://www.youtube.com/watch?v=OS7BPjTy3H0

    • Thanks 1
  7. Har aldrig sett något snabbkommando så du får nog köra ett [ALT]-paket

    Start->celler->format->autoanpassa kolumnbredd.
    Som bonus är det inte en enda begynnelsebokstav du kan hänga upp det på: 
    [ALT]+w, o, f, u

    Eller, I Australien har de vänstertrafik, så där bör du nog köra automatväxlat för att få en sak mindre att tänka på. Och en australiensisk hund som skäller kanske transkriberas till Wofu? 

    Nehej, det var inte till någon hjälp. Bahhh, otacksamma värld.

    • Haha 1
  8. Jag är 67,521% säker på att outlook bara bjuder på färgmarkerignarna i Arkiv->alternativ->kalender: arbetstider.

    Då börjar i alla fall kalendern på rätt tid.

    + formateringarna i Mikaels dialogruta

    En snabbgoogling tyder på att det är ett gammalt önskemål att zooma in, eller bara visa arbetstimmarna så jag skulle inte sätta champagne på kylning (inte ens en gång om jag hade gillat bubbel)...

    Men samtidigt känns det du önskar bekant. Kan det vara någon Android-kalender som hade den funktionen?

     

     

    • Like 1
  9. Min dator struntar i gemener/versaler. 

    MEN! när jag kollar så verkar 

    ActiveWorkbook.SaveAs

    Inte använda ActiveWorkbook.path utan någonting i stil med systemets aktuella mapp (CurDir - ish)

    Så dina fel kan bero på att excel försöker skriva i mappar den inte skall skriva i.  Bahhh

    Och Det verkar inte som att man kan ändra enbart sökvägen för  "ActiveWorkbook.SaveAs

    https://learn.microsoft.com/sv-se/office/vba/api/excel.workbook.saveas

    FileName: "A string that indicates the name of the file to be saved. You can include a full path; if you don't, Microsoft Excel saves the file in the current folder."

     

    Så du får nog köra word-koden och klistra ihop det nya namnet/sökvägen här också

     

    Sub PutinÄrEnSfinkterprotes()
    Dim iX As Integer
    Dim strFilnamn As String
    
    iX = ActiveWorkbook.FileFormat
    strFilnamn = ActiveWorkbook.Path & "\" & _
    Replace(ActiveWorkbook.Name, ".xls", ".xlsx", , , vbTextCompare)
    
    If (iX = 16) Or (iX = 27) Or (iX = 29) Or (iX = 33) Or (iX = 39) Or (iX = 39) Or (iX = 56) Or (iX = 43) Or (iX = -4143) Then
        ActiveWorkbook.SaveAs Filename:=strFilnamn, FileFormat:=xlOpenXMLWorkbook
    End If
        
        ActiveWorkbook.Close
    End Sub
    

    (vbTextCompare gör sökningen okänslig för stora/små bokstäver)

    • Thanks 1
  10. Excel ändrade matrishanteringen för ett tag sen och jag TROR inte att excel 19 och 365 körs på samma sätt.

    I nyare excel hanteras alla formler som matriser och du måste berätta för excel när du vill hantera det som en-svarsformler (med @-tecknet).

    I äldre excel var det helt tvärs om. Som standard levererade formler bara ett svar och du måste berätta om du ville hantera den som en matris

    https://support.microsoft.com/sv-se/office/riktlinjer-för-och-exempel-på-matrisformler-7d94a64e-3ff3-4686-9372-ecfd5caa57c7

     

    Vi börjar med din vanliga summering i A1.

    Testa att skriva in den här formeln någonstans:

    =DELATEXT(FORMELTEXT(A1))

    Hamnar svaret en, eller tre, celler?

    Om det bara blir en cell. Skriv in formeln, ställ dig i cellen och tryck ner tangenterna [Ctrl]+[Shift]+[Enter]

    Då borde svaret hamna i tre celler. (Och formeln får "måsvingar")

    {=DELATEXT(FORMELTEXT(A1))}

    Gör samma sak med dina medel-formler.

    Men jag är INTE helt säker eftersom jag aldrig kört FORMELTEXT eller DELATEXT i äldre Excel.

    PS:
    Visst är det knäckande att Excel 2019 redan ses som gammalt? Jag körde Office 2010 i ca 10 år innan den började kännas gammal. 😞
    /Ds

    • Like 1
  11. 'senaste mappen du jobbade i/sparade i, eller default (tror jag)
    Sub tst()
        strFolder  = CurDir()
        MsgBox strFolder 
    End Sub
    
    'Om aktuellt dolument är sparat, filens mapp
    Sub tst2()
        strFolder  = ActiveDocument.Path
        MsgBox strFolder 
    End Sub
    
    'eller visa "öppna med" -dialogen
    Sub tst3()
        With Application.FileDialog(msoFileDialogFolderPicker)
            .AllowMultiSelect = False
            .Show
            strFolder  = .SelectedItems(1)
        End With
        
        MsgBox strFolder 
    End Sub

     

    • Thanks 1
  12. har du kollat makrot drygt halvvägs ner på den här sidan (How to batch convert doc to docx😞

    https://www.pdnob.com/document/doc-to-docx.html

    Jag har inte testat. Men det ser rätt ut.

    Tyvärr en bild istället för kod så du får bygga lite manuellt.

    Kan vara värt att testa i alla fall 

    (Och jag antar att Fileformat skall bytast ut mot SaveFormat?)

     

    ***********ed*********

    och här har finns koden i textformat. 

    https://www.datanumen.com/blogs/3-quick-ways-to-batch-convert-word-doc-to-docx-files-and-vice-versa/

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

    • Thanks 1
  13. Du måste använda 2 celler (vet inte om jag missförstod frågan).

    I cell A1 skriver du in din summering

    =7+10+20

    I någon annan cell skriver du

    =A1/ANTALV(DELATEXT(FORMELTEXT(A1);"+"))

    FORMELTEXT() kom med excel 2019 och DELATEXT() kräver excel 365.

    Det går inte att göra det du vill utan FORMELTEXT(). Men du kan räkna antal "+" tecken (+1) med äldre metoder:

    =A1/(LÄNGD(FORMELTEXT(A1))-LÄNGD(BYT.UT(FORMELTEXT(A1);"+";""))+1)

     

    • Like 1
  14. I word får du tydligen tag i dokumentets filformat genom "SaveFormat" (när man tänker efter är "wdsaveformat" en ganska tydlig ledtråd...)
    iX = ActiveDocument.SaveFormat

    Egentligen ganska logiskt att hämta ut egenskapen på det sättet, även om jag tycker att Excels variant är snällare mot hjärnan. Alla dokumentegenskaper man inte viste att man behövde:

    https://learn.microsoft.com/sv-se/office/vba/api/word.document#properties

×
×
  • Skapa nytt...