Mikael63 Posted January 27, 2023 Posted January 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 Quote
Mikael63 Posted January 27, 2023 Author Posted January 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 Quote
MH_ Posted January 27, 2023 Posted January 27, 2023 (edited) 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 ... Edited January 27, 2023 by MH_ 1 Quote
Mikael63 Posted March 23, 2023 Author Posted March 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 Quote
MH_ Posted March 24, 2023 Posted March 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 Quote
Mikael63 Posted March 24, 2023 Author Posted March 24, 2023 Får körfel 424 på denna rad: Set f = fs.OpenTextFile("C:\temp\filldown.ahk", ForAppending, TristateTrue) Quote
Solution MH_ Posted March 24, 2023 Solution Posted March 24, 2023 (edited) 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 Edited March 24, 2023 by MH_ 1 Quote
Mikael63 Posted March 24, 2023 Author Posted March 24, 2023 Stort TACK! Behövde bara byta ut ForAppending till ForWriting. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.