Just nu i M3-nätverket
Gå till innehåll
MvS

Excel exportera separata kolumner till txt-fil

Rekommendera Poster

Jag har en medlemsmatrikel på ett Excel-ark där jag behöver en funktion (ett Makro) som kan exportera medlemmars namn tillsammans med respektive epost-adress till en text-fil. 

Har kollat runt men inga exempel jag stött på verkar fungera så jag undrar nu om det finns någon vänlig själ som kan hjälpa mig?
Jag vill kunna exportera innehållet i kolumn "A" (Namn) och kolumn "J" (E-postadress) men bara från de rader där medlemmen har en epostadress. Utdata på textfilen bör vara tabbavgränsat men det  är inget absolut måste...

Pls help...

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Behöver det ske automatisk eller räcker det med några handgrepp? I praktiken räcker det med

1: Lägg på ett filer på din tabell

2: Filtrera ut enbart de som har epostadress.

3: Kopiera resultatet, de kolumner du vill ha, till ett nytt blad, i en ny bok.

4: Spara som CSV.

 

Det är så enkla steg att om det bara sker sällan gör det manuellt men om det nu ska ske ofta, återkommande, kanske att makro (som gör i princip) samma sak som ovan knåpas ihop.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Hej och tack för svar!

Mja, självklart har jag tänkt tanken men jag har designat det hela för andra användare som är "IT-imbeciller" så min tanke var att ha ett makro som sköter det hela utan att användarna ska behöva göra mer än klicka på en knapp...

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Enklast att ge en hel fil med lite kod i då.

 

Zippad eftersom Eforum inte gillas makoraktiverade dokument.

Fungerar som så

  1. Skapar ett nytt tomt blad
  2. Kopierar in värdena som ska exporteras dit (från en liten tabell)
  3. Flyttar bladet till en ny bok
  4. Sparar som unicode-text i en fil.

har en räknare på bladet för att räkna upp så att samma filnamn inte skrivs två gånger. Av någon anledning kraschar Excel andra gången man exporterar om den måste skriva till samma filnamn/skriva över fil som finns.

Det finns en del att anpassa i koden

  1. Filnamnet
  2. Vilka värden som kopieras. Nu har jag använt en tabell vilket rekommenderas.

 

textExport.zip

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Hej!

Stort tack för ditt förslag men det verkar som om makrot inte fungerar... Får en varning om "Me."-variabeln enligt följande:1999297786_Image2.jpg.0ca4841a5ee4d1dce329be585bf88f84.jpg

 

//Magnus

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Me - en referens till bladet koden står på

Du har nog lagt koden i en modul. Då får du skriva om lite.

Förslags

På rad 4, innan filename= ....

skriv

With ActiveSheet

... all kod emellan till raden efter wb.Close

End With

 

och ta bort alla Me men behåll punkten.

(och flytta application.screenupdating = false) direkt efter sista Dim)

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag Insåg att detta berodde just på att  jag lagt det i modul ist.f.  i det aktiva bladet...!
Men nu får jag istället denna varningsruta:
   

Image 3.jpg

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Det var kopplat till ett annat makro... Men detta är den senaste varningen som kommer nu när jag lagt ditt makro under Blad1 och försöker köra det:

Image4.jpg.67f1947fc1068325a3e752c6a779309a.jpg

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag knotar på och har kommit så långt att det handlade om ett dokumentskydd jag hade aktivt! I ditt exempel hade du kolumnerna i Tabell1 och du kallade dina exportkolumner för "ID" och "Annat". Detta har jag nu ändrat till min "Tabell2" samt mina kolumners namn ("Namn" i A-kolumnen samt "Email" i J-kolumnen) för att anpassa skriptet. Jag har även anpassat filnamn och sökväg för exporten och nu kör skriptet visserligen en export men innehållet i den exporterade txt-filen är oläsligt! (Se bild) Kan detta ha att göra med kolumnhänvisningen i skriptet?

Vad syftar tex "Me.Cells(1, 10) + 1",  "sh.Cells(1, 1)" och "sh.Cells(1, 2)" på - bör jag ändra dessa cellreferenser också?

Export output:
1143773879_Image1.thumb.jpg.04aa6e525538212789b18ac931ec3cdf.jpg

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Intressant..

Me.Cells(1, 10) = Me.Cells(1, 10) + 1

är enbart tillför att skapa unikt filnamn. Excel kraschade för mig när jag skrev över samma fil två gånger.

 

Oläsliga filen, testa ändra

 FileFormat:=xlUnicodeText

till

 FileFormat:=xlTextWindows

eller ta bort det argumentet helt.

 

sh.Cells(1,1) är referens till cell A1 på nya bladet, dit värdena kopieras.

Kan även skrivas som

sh.Range("A1")

och variabeln kanske borde ges ett mer beskrivande namn.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Jag beskrev nog lite dåligt vad jag var ute efter. Grejen är att jag skulle bara vilja exportera innehållet i kolumn A och J i Tabell2 till en .txt-fil. I det skript exemplet du (så välvilligt) bifogade skapas nya (tomma)  bladflikar i min arbetsbok. Jag spårade det till sekvensen "Set sh = ThisWorkbook.Worksheets.Add" och detta upphör om jag kommenterar denna rad.

Sedan undrar jag lite över sekvenserna "Me.Cells(1, 10)" då verkar lägga till ett löpnummer i filnamnet som jag inte behöver...

Med detta sagt vill jag i alla fall tacka dig storligen för att du tar dig tid med mitt bagatellartade lilla problem! 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skriptet fungerar alltså som jag skrev i inlägget tidigare

1. Ett tomt blad i aktuell bok skapas

2. Värden kopieras dit

3. Detta blad flyttas till en ny arbetsbok

4. Den nya arbetsboken sparas.

 

Detta är det enklaste sättet att göra detta, där man vet att man får samma resultat och frågor varje gång det körs och på vilken dator det än körs.  Det borde inte bli någon flik kvar i din arbetsbok om skriptet körs klart utan fel utan det har flyttats till den nya boken som sparas och sedan stängs. Denna metod har fungerat bra alltid när jag använt den med alla de version av Excel jag testat det på (reservation för Max)

 

Me.cells(1,10) är som sagt bara för att få ett löpnummer eftersom Excel kraschade för mig när den fick skriva över samma fil två gånger i rad. Du kan ta bort det om du vill. Försök förstå vad koden gör.

 

Jag kan skriva om koden så att den direkt skapar en ny bok (men denna kan skapas med flera blad vilket gör sparandet lite mer osäkert) och kopierar till den, så att du får en dialog som frågar vad du vill kopiera osv. Men bäst är om du förstår vad skriptet gör.

Du kan kommentera bort raden

Application.ScreenUpdating =  False

så ser du vad som sker under tiden skriptet körs.

och sätt breakpoints om du vill.

 

och om vill ha hängslen och livrem kan jag lägga på felhantering som tar bort det nya bladet om något går fel.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Tack för din hjälp!

Jag tar som sagt tacksamt emot hjälp som kan lösa detta lilla problem. Även om just nuvarande ändamål kanske inte har så hög prioritet så "samlar" jag på användbara VBA-skript och den vägen försöker lära mig kodning genom att stöta och blöta olika "kvistigheter" som kan uppstå i applicerandet av dessa skript. Du har i detta varit till stor hjälp både nu och tidigare och det ska du ha en eloge för!

En liten följdfråga bara:

Varför måste skriptet först skapa nya bladflikar i arbetsboken för att  sedan exportera till en extern .txt-fil? Känns spontant lite som att gå över ån efter vatten s.a.s.!

Jag har som sagt Googlat runt och hittat ett antal mer eller mindre komplicerade varianter som skapar txt-filen direkt. Jag kan dock inte modifiera dessa till just mitt behov då jag inte förstår VBA tillräckligt bra.  

//Magnus
 

 

 

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Det finns alltid mer än ett sätt att göra saker i Excel. Visst kan man först skapa en bok med ett blad och skriva till denna. Längd i kod blir det ingen större skillnad.

Länk till något du hittat så kanske du kan få en kortare lösning.

Går givetvis även att skapa en textfil med VBA och skriva data dit utan att gå via ett arbetsblad men min filosofi när jag gör sker i Excel är att låta Excel göra sakerna snarare än koden.

Som sagt, finns alltid mer än ett sätt att göra något i Excel.

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...