Mikael63 Posted June 28, 2022 Posted June 28, 2022 (edited) Önskar en funktion där jag kan markera rader i två valfria kolumner och få dessa sparade som en tab-separerad textfil. Ska bli som A 21 B 22 C 23 (fast här i editorn är det mellanslag i texten ovan) Har hittat denna https://github.com/bskinn/excel-csvexporter/releases/tag/v1.2.2 men den kan inte hantera icke-intilliggande kolumner och inte heller TAB (tror jag) Edited June 28, 2022 by Mikael63 Quote
Venoms Posted June 28, 2022 Posted June 28, 2022 Klurigt .. Är det en fast array av data som du ska spara, även om datan i sig varierar? Quote
Mikael63 Posted June 28, 2022 Author Posted June 28, 2022 Det är alltid kolumn A som ingår. Det är alltid endast en till kolumn som ska ingå. Antal rader kan variera men det är alltid lika många rader för A och den andra kolumnen. Jag kan nu välja att dölja B. Markera de båda kvarvarande. Ctrl+C och sedan klistra in i anteckningar. Med många kolumner blir det lite stök, men det går. Markering gör jag manuellt och om man hade en makroknapp som typ "selection save as" kanske? Quote
MH_ Posted June 29, 2022 Posted June 29, 2022 https://docs.microsoft.com/en-us/office/vba/api/excel.range.areas Kan användas för att växla mellan områdena Selection.Areas(1) Selection.Areas(2) Då borde du kunna skapa en tabbseparerad textvariabel som du sen kan spara undan eller pipa till en text-fil Sub tjo() Dim str As String Dim i As Integer If Selection.Areas(1).Cells.Count <> Selection.Areas(2).Cells.Count Then MsgBox "falektig markering, gör om, gör rätt" Exit Sub End If For i = 1 To Selection.Areas(1).Cells.Count str = str & Selection.Areas(1).Cells(i, 1).Value str = str & vbTab str = str & Selection.Areas(2).Cells(i, 1).Value str = str & vbCrLf Next i MsgBox str 'Open "C:\tmp\Tjoho.txt" For Output As #1 End Sub Jag surnade till och raderade min profil på det andra forumet så jag hittar inte gamla inlägg. Men visst hade vi en tråd där du fick en en sån där "Open for Output" att fungera? Behövs det inte en End of file t.ex... Här är en tråd du borde kunna sno låna ifrån https://stackoverflow.com/questions/43655288/vba-code-to-save-excel-sheet-as-tab-delimited-text-file 1 Quote
Mikael63 Posted June 29, 2022 Author Posted June 29, 2022 Jag gillar din kod där jag får markera enbart det jag önskar få som utdata. Det är denna du tänker på antar jag: https://eforum.idg.se/topic/362854-snabbt-söka-och-ersätta-radbrytning-med-text/#comment-1742113 Och lägger jag till motsvarande open så skapas textfilen med önskat innehåll men det blir tomma rader på slutet och det är en av anledningarna till att jag började kolla på alternativ till att spara som tabb-separerad textfil. (Tomma celler som i raderade data i celler kommer med i textfilen.) Quote
Mikael63 Posted June 30, 2022 Author Posted June 30, 2022 13 timmar sedan, Mikael63 sade: men det blir tomma rader på slutet hittade https://stackoverflow.com/questions/4017968/excel-vba-puts-extra-blank-line-at-end-of-text-file-when-exporting Lade till ett ; på slutet Print #1, str; 1 Quote
MH_ Posted June 30, 2022 Posted June 30, 2022 Lägg på ett villkor så att den inte skapas någon radbrytning på sista raden så borde du vara hemma: For i = 1 To Selection.Areas(1).Cells.Count str = str & Selection.Areas(1).Cells(i, 1).Value & vbTab str = str & Selection.Areas(2).Cells(i, 1).Value If Not (i = Selection.Areas(1).Cells.Count) Then str = str & vbNewLine Next i Open "C:\tmp\Tjoho.txt" For Output As #1 Print #1, str; Close #1 1 Quote
MH_ Posted June 30, 2022 Posted June 30, 2022 Tänkte ge en tumme för att du postade lösningen men det var tydligen IDG-specifikt. Quote
Mikael63 Posted June 30, 2022 Author Posted June 30, 2022 Det visade sig att det inte gjorde något om det fanns en(1) extra radbrytning på slutet. ** Jag saknar "Markera som bästa lösning" eftersom det förutom att påpeka just det även ger möjlighet att kunna navigera till det inlägget. Att ändra rubriken till [löst]* är jobbigare och visar inte VAR lösningen finns. @Andreas Stenhall? Quote
Mikael63 Posted June 30, 2022 Author Posted June 30, 2022 (edited) Meeen Å!? Vad tusan har jag fibblat till nu? Varje gång jag öppnar en Excelbok öppnas även textfilen, i Excel? ** Oj.. hrm. jag hade visst fått in textfilen i XLSTART-mappen. (Testade med Open ThisWorkbook.Path & "\far.txt" For Output As #1 i en "lös" fil och när jag flyttade koden till EgnaMakron behövde jag ändra till Open ActiveWorkbook.Path & "\far.txt" For Output As #1) Edited June 30, 2022 by Mikael63 hittat Quote
Mikael63 Posted July 1, 2022 Author Posted July 1, 2022 Hm.. grundtanken var att man skulle kunna markera värden från två "icke-intilliggande kolumner" och det fungerar ju. Om det visar sig att värden finns i intilliggande kolumner gör man, naturligt, markeringen på annat sätt och då får man körfel. Skulle man kunna inkludera detta i felmeddelandet i den "egna" MsgBox? Quote
MH_ Posted July 1, 2022 Posted July 1, 2022 (edited) ***ed*** Ändrade: Selection.Cells.Count Till Selection.rows.Count i tredje IF-satsen **/ed** Du får väl helt enkelt göra en massa IF och hantera fel efter fel Har bara kört koden med msgbox på slutet och vet inte om outputfilen blir rätt (när jag skriver det här inser jag att den dessutom kommer att släppa igenom en enkolumnsmarkering utan felmeddelande) Sub tjo() Dim str As String Dim i As Integer If Selection.Areas.Count > 2 Then MsgBox "du får bara välja två kolumner" Exit Sub End If 'Om exakt 2 områden If Selection.Areas.Count = 2 Then 'Kolla att områdena har lika många rader. If Selection.Areas(1).Cells.Count <> Selection.Areas(2).Cells.Count Then MsgBox "Olika antal rader i markeringarna, gör om" Exit Sub End If ' Kör koden för två områden: For i = 1 To Selection.Areas(1).Cells.Count str = str & Selection.Areas(1).Cells(i, 1).Value & vbTab str = str & Selection.Areas(2).Cells(i, 1).Value If Not (i = Selection.Areas(1).Cells.Count) Then str = str & vbNewLine Next i End If 'Om ett område med två kolumner If ((Selection.Areas.Count = 1) And (Selection.Columns.Count = 2)) Then For i = 1 To Selection.Rows.Count str = str & Selection.Cells(i, 1).Value & vbTab str = str & Selection.Cells(i, 2).Value If Not (i = Selection.rows.Count) Then str = str & vbNewLine Next i End If Open "C:\tmp\Tjoho.txt" For Output As #1 Print #1, str; Close #1 End Sub Edited July 1, 2022 by MH_ 1 Quote
Mikael63 Posted July 1, 2022 Author Posted July 1, 2022 1 timme sedan, MH_ sade: Har bara kört koden med msgbox på slutet och vet inte om outputfilen blir rätt Jodå den blir bra! 1 timme sedan, MH_ sade: dessutom kommer att släppa igenom en enkolumnsmarkering utan felmeddelande Ja, men nåt får man ju försöka hålla koll på själv med.. Återigen tack! 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.