Mikael63 Postad Januari 27, 2023 Dela Postad Januari 27, 2023 I denna tråd..Snabbt söka och ersätta radbrytning med text? - Kalkylprogram - Excel m fl - Eforum (idg.se) fick jag hjälp med ett makro, i Excel. Nu med en ny version av Autohotkey behöver koden ändras något. Min kod ser ut så här: Sub EditAhk() Dim MinText As String Dim rMittOmråde As Range Dim rAktuellCell As Range Set rMittOmråde = Selection.SpecialCells(xlCellTypeVisible) MinText = "!^F6::Reload" & vbNewLine & "!^F5::Send," For Each rAktuellCell In rMittOmråde MinText = MinText & rAktuellCell.Value & "{down}" Next rAktuellCell Open "C:\temp\filldown.ahk" For Output As #1 Print #1, MinText Close #1 End Sub Nu ska "!^F6::Reload" vara "!^F6::Reload()" och "!^F5::Send," ska vara "!^F5::Send("" Det kan jag ju ändra själv men jag ser att "!^F5::Send("" ändras till att vara "!^F5::Send(""" när jag sparar, alltså en extra " Det verkar dock inte påverka slutresultatet. Nu till den del jag behöver hjälp med: Den sista {down} ska avslutas med ") och hur lägger jag in det snyggast? Jag tänkte pröva själv men garderar mig med denna frågeställning Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Januari 27, 2023 Författare Dela Postad Januari 27, 2023 Kan själv, ibland.. Blev lite extra stökigt för mig när det var just " som skulle petas in.. (en förklaring varför det krävs så många sådana snuffar önskas) Sub EditAhk() Dim MinText As String Dim rMittOmråde As Range Dim rAktuellCell As Range Set rMittOmråde = Selection.SpecialCells(xlCellTypeVisible) MinText = "!^F6::Reload()" & vbNewLine & "!^F5::Send(""" For Each rAktuellCell In rMittOmråde MinText = MinText & rAktuellCell.Value & "{down}" Next rAktuellCell MinText = MinText & """)" Open "C:\temp\filldown.ahk" For Output As #1 Print #1, MinText Close #1 End Sub 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
MH_ Postad Januari 27, 2023 Dela Postad Januari 27, 2023 (redigerade) 46 minuter sedan, Mikael63 sade: (en förklaring varför det krävs så många sådana snuffar önskas) Eftersom " är en textavgränsare (som inte skall synas) så blir det väldigt knepigt att få in ett synligt " i en textsträng. I en del program skiljer på " och '. Fast inte... i t.ex SPSS skulle: MinText & """)" Blir 'MinText' & '")' Med reservation för att jag inte minns om man använder & i SPSS-skript. I excel skriver man in två "" inom citattecknen för att få ut ett synligt ". Typ " "" " men sammanskrivet """"" Och om det står i ena änden av strängen blir det 3 st ", typ: """ xxx" =SAMMANFOGA("Här skall det synas ett: ";"""-tecken") Ett ensamt "-tecken blir det 4 """" på rad (läs som " "" ") =SAMMANFOGA("Här skall det synas ett: ";"""";"-tecken") eller om det är en enda textsträng =SAMMANFOGA("Här skall det synas ett: ""-tecken") Typ samma sak i VBA. Det där är lite extra förvirrande eftersom "" normalt sett betyder tom sträng/tomt värde. Men mellan två Citattecken betyder det uppenbarligen ett citattecken ... Redigerad Januari 27, 2023 av MH_ 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Mars 23, 2023 Författare Dela Postad Mars 23, 2023 Ny version av Office tror jag det är som stökar till detta ytterligare, eller så har jag inte haft texter med ÅÄÖ tidigare. Jag behöver spara filen filldown.ahk som UTF8 och det kan jag enkelt göra med NoteTab Light men det hade varit bra om filen sparades med den kodningen direkt från Excel. Går det att lösa? Koden ser ut så här: Sub EditAhk() Dim MinText As String Dim rMittOmråde As Range Dim rAktuellCell As Range Set rMittOmråde = Selection.SpecialCells(xlCellTypeVisible) MinText = "#SingleInstance Force" & vbNewLine & "SendMode 'Event'" & vbNewLine & "!^F6::Reload()" & vbNewLine & "!^F5::Send(""" For Each rAktuellCell In rMittOmråde MinText = MinText & rAktuellCell.Value & "{down}" Next rAktuellCell MinText = MinText & """)" Open "C:\temp\filldown.ahk" For Output As #1 Print #1, MinText Close #1 End Sub Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
MH_ Postad Mars 24, 2023 Dela Postad Mars 24, 2023 Här diskuterar dom olika metoder: https://stackoverflow.com/questions/2524703/save-text-file-utf-8-encoded-with-vba Där jag tycker att svaret som hänvisar till https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-basic-6/aa265347(v=vs.60) verkar lättast att köra. Dvs du skippar "Print #1" helt och lägger till någonting i stil med (ombyggt från exemplet längst ner på microsoftsidan): '... MinText = MinText & """)" Const ForReading = 1, ForWriting = 2, ForAppending = 3 Dim fs, f Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile("C:\temp\filldown.ahk", ForAppending,TristateTrue) f.Write MinText f.Close End SUB Jag har inte testat men det ser ju smidigt ut. Du får väl kör en testomgång på låtsasdata. 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Mars 24, 2023 Författare Dela Postad Mars 24, 2023 Får körfel 424 på denna rad: Set f = fs.OpenTextFile("C:\temp\filldown.ahk", ForAppending, TristateTrue) Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Lösning MH_ Postad Mars 24, 2023 Lösning Dela Postad Mars 24, 2023 (redigerade) Min länk gick ju inte till excel VBA utan någon gammal visual basic. Wooops!🙈 Kollar du excels riktiga dokumentation här: OpenTextFile method (Visual Basic for Applications) | Microsoft Learn Så är det helt andra värden för konstanterna och parametrarna skall in i en annan ordning '... MinText = MinText & """)" Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim fs As Object, f As Variant Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile(Filename:="C:\temp\filldown.ahk", iomode:=ForAppending, Create:=True, Format:=TristateTrue) f.Write MinText f.Close End sub eller så här om du vill ha det kompaktare (men svårbegripligare) '... MinText = MinText & """)" Dim fs As Object, f As Variant Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile("C:\temp\filldown.ahk", 8, True, -1) f.Write MinText f.Close End Sub Redigerad Mars 24, 2023 av MH_ 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Mars 24, 2023 Författare Dela Postad Mars 24, 2023 Stort TACK! Behövde bara byta ut ForAppending till ForWriting. Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Recommended Posts
Delta i dialogen
Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.