Gå till innehåll

Behöver hjälp att modifiera ett makro


Gå till lösning Löst av MH_,

Recommended Posts

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 ;)

Länk till kommentar
Dela på andra webbplatser

Kan själv, ibland.. :rolleyes:

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

 

  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

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 av MH_
  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

  • 1 månad senare...

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

 

Länk till kommentar
Dela på andra webbplatser

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.

  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

  • Lösning
Postad (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 av MH_
  • Thanks 1
Länk till kommentar
Dela på andra webbplatser

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.

Gäst
Svara i detta ämne...

×   Du har klistrat in innehåll med formatering.   Ta bort formatering

  Only 75 emoji are allowed.

×   Din länk har automatiskt bäddats in.   Visa som länk istället

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Skapa nytt...