Gå till innehåll

MH_

Medlem
  • Innehållsantal

    178
  • Gick med

  • Dagar vunna

    20

Allt postat av MH_

  1. Typ samma sak hur man än gör. Villkordsstyrd formatering kräver något slags uppdatering. Och för att Slippa "överfärgningen" måste du se till att "ingen färg" INTE är vald i villkoret.
  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.
  3. jag testade ditt dokument och det funkar att markera alla dokument om du gör det via Ctrl+G Ctrl+G+[special...] objekt->[Ok] 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?
  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? ********************************************************
  5. Fritt ur minnet. Snabbkommandot för "gå till" Ctrl+g eller [F5] Någon "merknapp" - > objekt. Då markeras alla objekt>delete
  6. 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.
  7. Men markera alla kolumner med tgb då? Ctrl+A? i värsta fall 2 ggr om den bara markerar aktuellt område (nytt hyss i excel, men på det stora hela smart)
  8. 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
  9. 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.
  10. 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?
  11. Jag slarvade när jag skrev det på telefonen utan att kunna kolla formeln. Jag menade naturligtvis: =DELATEXT(FORMELTEXT(A1);"+")
  12. 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)
  13. Jag använder av princip tangentbordet [Alt]+[F11] Samma som i excel
  14. 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
  15. Jag antar att de användes när de körde Sök/ersätt? I din kod ser jag ingen användning för det eftersom du kör "ActiveDocument" . Eller?
  16. Se upp när du kör "dir". Jag har för mig att den är för generös så att *.doc även hittar .docx. Du kanske får lägga in en extra koll där du manuellt kollar om If right(filnamn,4)<>".doc" then Kör så det ryker End if Typ, ungefær
  17. När jag går till sidan så petas det in ett /sv/ i adressen och jag drabbas av maskinöersättningen. Men om jag ändrar det till /en/ så respekteras det och jag får originalkoden.
  18. Tag bort alla mellanslag i replace. Och lägg till punkt. Annars lär den missa de flesta. Replace(strFile, ".doc", ".docx")
  19. '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
  20. 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/ ********************
  21. 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)
  22. 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
  23. Har inte testat själv. men du kan väl kolla det här? https://learn.microsoft.com/sv-se/office/vba/api/excel.workbook.fileformat Konstanter: https://learn.microsoft.com/en-us/office/vba/api/excel.xlfileformat Vill du ha ett "vanligt" modernt excelformat så är du är alltså ute efter: xlOpenXMLWorkbook 51 Så i microsoftexemplet bör "save as" raden ändras till ActiveWorkbook.SaveAs fileFormat:=xlOpenXMLWorkbook Och om du kollar konstant-sidan så är det en massa format som har ändelsen .XLS (16,27,29,33,39,39,56,43,-4143). Så för "IF-raden" måste du kolla hela gänget Sub PutinSugerOtvättadBjörnK() Dim iX As Integer iX = ActiveWorkbook.FileFormat 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 FileFormat:=xlOpenXMLWorkbook End If End Sub Man borde kunna kolla filändelsen med "ActiveWorkbook.Name". Men Om du har dolt filändelser i utforskaren så skall VBA tydligen respektera det (av någon fullständigt obegriplig anledning).
  24. Först måste du plocka ut själva formeltexten (annars förutsätter Excel att du vill jobba med värdet av beräkningen i A1) =FORMELTEXT(A1) Om vi tar bort "=" tecknet så får vi något trevligt att jobba med. Det kan du exempelvis åstadkomma genom att byta ut "=" mot ingenting "". =BYT.UT(FORMELTEXT(A1);"=";"") Sen delat du din text med "+" som skiljetecken (de hamnar i olika celler) =DELATEXT(BYT.UT(FORMELTEXT(A1);"=";"");"+") se till att texten tolkas som siffror genom att muliplicera med 1: =DELATEXT(BYT.UT(FORMELTEXT(A1);"=";"");"+")*1 Sen beräknar du medelvärdet på de utplockade siffrorna (hamnar i en cell) =MEDEL(DELATEXT(BYT.UT(FORMELTEXT(A1);"=";"");"+")*1) ************************************************************ Eller räkna hur många delar det blir när man delar vid "+" tecknet: =ANTALV(DELATEXT(FORMELTEXT(A1);"+")) och räkna ut medlet genom att dividera summan med den siffran =A1/ANTALV(DELATEXT(FORMELTEXT(A1);"+")) Lite kortare, men jag tycker personligen bättre om föregående metod. Välj det du tror att du förstår enklast om 6 månader när du försöker lista ut vad tusan du gjorde (och använd Granska->anteckningar: ofta och mycket.).
×
×
  • Skapa nytt...