2 kolommen opslaan in txt file

Status
Niet open voor verdere reacties.

BartFr

Gebruiker
Lid geworden
18 jan 2012
Berichten
37
Goedemorgen allen,

Omdat ik hier altijd zo goed geholpen wordt, een volgende vraag betreffende het saven van 2 kolommen in een txt file door middel van een button.

De Range van de 2 kolommen is "D8" tot "E8". De "onderkant" van de kolommen moet gaan tot er geen tekst meer staat in deze 2 kolommen, aangezien ze aangevuld kunnen worden.

De 2 kolommen moeten gescheiden worden van elkaar door een "=" teken en de waarde in kolom E moet afsloten worden met een ";".
Kort voorbeeldje heb ik als bijlage meegegeven. De kolommen kunnen dus zowel langer als korter worden.
Deze 2 kolommen moeten vervolgens als txt file opgeslagen worden.
De uitkomst die ik wil staat naast de kolommen.

Ik heb zelf het internet aardig afgezocht, maar kon niet echt iets vinden... Ik heb een vermoeden dat ik erover heen kijk.
Iemand die me misschien hiermee kan helpen?

Alvast bedankt!

Bart
 

Bijlagen

Laatst bewerkt:
Doe deze eens achter een knopje:

Code:
Sub ExportToText()
    Dim s_start As Integer
    Dim s_einde As Integer
    Dim txtFile As Integer
    Dim txtNaam As String
    Dim i As Integer
    
    txtFile = FreeFile()
    txtNaam = ThisWorkbook.Path & "\ColsE-D.txt"
              
    s_start = Sheets("Sheet1").UsedRange.Row
    s_einde = Sheets("Sheet1").UsedRange.Rows.Count

    Open txtNaam For Output As #txtFile
    For i = s_start To s_einde
        Print #txtFile, Range("D" & i).Value & "=" & Range("E" & i).Value & ";"
    Next i
    
    Close #txtFile
End Sub
 
Wat een snelle reactie, heel erg bedankt!

Hij werkt bijna helemaal perfect. Ik heb zelf nog s_start = 8 ertussen gezet om de hem vanaf D8:E8 te laten beginnen.

Ik heb nog 1 puntje die ik er niet uit krijg.

- Ik heb een aantal lege cellen tussen de waardes staan. Bijvoorbeeld Range("D12:E12") is helemaal leeg. Dit geeft nu "=;" in de tekstfile. Dit zou eigenlijk ook leeg moeten zijn. Ook komen er op het einde van de tekstfile een hele rij met "=;" bij. Dit zou ook gewoon leeg moeten zijn, maar dat hangt denk ik samen met voorgaande opmerking.

Is dit mogelijk om er nog bij te krijgen, of wordt het dan erg lastig?

Nogmaals bedankt voor de snelle reactie en alle moeite!

Groeten,
Bart
 
Ik ben uiteraard uitgegaan van je voorbeeld document en daar staan geen lege cellen in de kolommen D en E en voor regel 8 zijn er geen andere cellen gevuld en er onder ook niet. Maar wijzig het Print gedeelte eens in dit:

Code:
        If Range("D" & i).Value <> "" And Range("E" & i).Value <> "" Then
            Print #txtFile, Range("D" & i).Value & "=" & Range("E" & i).Value & ";"
        End If
 
Laatst bewerkt:
Dat is inderdaad zo, excuus daarvoor, had ik meteen kunnen toelichten.

Ik heb je regel als volgt in de code gezet:

Code:
Sub Export()

    Dim s_start As Integer
    Dim s_einde As Integer
    Dim txtFile As Integer
    Dim txtNaam As String
    Dim i As Integer
    
    
    
    txtFile = FreeFile()
    txtNaam = ThisWorkbook.Path & "\Test.txt"
              
    s_start = Sheets("Ansys vs Workbook").UsedRange.Row
    s_einde = Sheets("Ansys vs Workbook").UsedRange.Rows.Count
    
    s_start = 8
    i = 8
    
    Open txtNaam For Output As #txtFile
    
    If Range("D" & i).Value <> "" And Range("E" & i).Value <> "" Then
    
    For i = s_start To s_einde
    
        Print #txtFile, Range("D" & i).Value & "        " & "=" & "     " & Range("E" & i).Value & ";"
    
        Next i
        
   End If
    
    Close #txtFile
    
End Sub

    
End Sub

Als ik deze code gebruik, dan blijven de "=;" verschijnen. Ik ga er vanuit dat het om de locatie van de IF statement gaat.

Als ik hem ergens anders plaats (na de FOR statement) krijg ik de foutmelding "Next without For".

Daar kom ik nog niet uit...
 
Laatst bewerkt:
Geef eens een voorbeeld van een complete regel voor dat ansys bestand.
 
Je was me net voor. Ik heb het comment gedeelte er weer uitgehaald. Kreeg net te horen dat dat er toch niet in moet.

Ik heb echt alleen het gedeelte: A = 1; nodig.

Klein voorbeeldje uit mijn txt file die ik nu krijg, incl de IF statement:

Code:
dxw_wt1        =     157.5;
dzv_draught        =     17;
        =     ;
        =     ;
        =     ;
dx_hv        =     -8.15;
dz_hv        =     32.075;
        =     ;
        =     ;

Behorende bij dit excel gedeelte:

Code:
dxw_wt1	157.500
dzv_draught	17.000
	
	
	
dx_hv	-8.150
dz_hv	32.075

Met dus de volgende code:

Code:
Sub Export()

    Dim s_start As Integer
    Dim s_einde As Integer
    Dim txtFile As Integer
    Dim txtNaam As String
    Dim i As Integer
    
    txtFile = FreeFile()
    txtNaam = ThisWorkbook.Path & "\Test.txt"
              
    s_start = Sheets("Ansys vs Workbook").UsedRange.Row
    s_einde = Sheets("Ansys vs Workbook").UsedRange.Rows.Count
    
    s_start = 8
    i = 8
    
    Open txtNaam For Output As #txtFile
    
    If Range("D" & i).Value <> "" And Range("E" & i).Value <> "" Then
    
    For i = s_start To s_einde
    
        Print #txtFile, Range("D" & i).Value & "        " & "=" & "     " & Range("E" & i).Value & ";"
 
    
        Next i
        
     End If
    
    Close #txtFile
    
End Sub

De lege cellen in de excel file, zouden ook lege regels moeten zijn in de txt file.

ps1. ik weet niet of de Code-tag ook bedoeld is voor txt en excel tekst. Leek me overzichtelijk. Mocht dit niet zo horen, hoor ik dat graag.

ps2. Het volledige bestand kan ik niet geven ivm gevoelige informatie.
 
Laatst bewerkt:
Met voorbeeldbestand wordt een voorbeeldbestand bedoeld, dat je als bijlage meestuurt (upload) met je bericht hier.

Niemand verwacht in een voorbeeldbestand gevoelige informatie; die moet je dus eerst vervangen.

Overigens kun je voor dit soot vragen toch nooit iets op Internet vinden. Zo'n oplossing dient altijd gemaakt te worden.
Kijk eens in je VBA handboek.
Is dit een stage-opdracht ?
 
Laatst bewerkt:
Nu snap ik het even niet meer. In #3 zeg je dat de lege cellen niet meegenomen moeten worden en nu zeg je dat ze erin moeten. Tevens zie ik in je laatste voorbeeld geen omschrijving er achter.
 
De comments erachter moeten er niet meer bij. Ik kreeg te horen dat die er niet bij hoeven. Dat gedeelte heb ik dus meteen uit mijn bericht gehaald, zoals boven toegelicht:

"Je was me net voor. Ik heb het comment gedeelte er weer uitgehaald. Kreeg net te horen dat dat er toch niet in moet."

De lege cellen die in het excel bestand staan, mogen toegevoegd worden, maar mogen ook helemaal weggelaten worden. Zolang er in het txt bestand maar niet "=;" komt te staan. Met de code zoals in mijn laatste post gebeurt dit nog wel. Ik verwacht dat dat aan de locatie van het IF statement ligt. Echter krijg ik het niet voor elkaar om het goed te krijgen.

Ik heb ze als bijlage toegevoegd.

Nogmaals: De lege cellen in excel mogen ook in de txt file staan, maar dit hoeft niet. Zolang er maar niet =; staat.

Ik hoop dat ik het nu wel duidelijk heb uitgelegd.
 

Bijlagen

Met voorbeeldbestand wordt een voorbeeldbestand bedoeld, dat je als bijlage meestuurt (upload) met je bericht hier.

Niemand verwacht in een voorbeeldbestand gevoelige informatie; die moet je dus eerst vervangen.

Overigens kun je voor dit soot vragen toch nooit iets op Internet vinden. Zo'n oplossing dient altijd gemaakt te worden.
Kijk eens in je VBA handboek.
Is dit een stage-opdracht ?

Meestal speur ik op internet rond om op weg gebracht te worden. Dan pas ik zelf een en ander aan, of voeg wat toe etc. Zo ben ik altijd erg ver gekomen. Nu kwam ik er echter niet uit.

Dit is voor mijn werk. Ik werk als werk-student bij een maritiem bedrijf. Data uit een workbook moeten ingelezen worden in zowel matlab als ansys voor diverse simulaties. Voor ansys heb ik de txt file nodig.
 
Ik heb inmiddels de IF statement goed gekregen.

IF statement en END IF moeten beide binnen de FOR statement (zoals je eigenlijk gewoon al aangaf).

Voor mij is mijn vraag nu volledig opgelost met de volgende code:

Code:
Sub Export()

    Dim s_start As Integer
    Dim s_einde As Integer
    Dim txtFile As Integer
    Dim txtNaam As String
    Dim i As Integer
    
    txtFile = FreeFile()
    txtNaam = ThisWorkbook.Path & "\main_constants.txt"
              
    s_start = Sheets("Ansys vs Workbook").UsedRange.Row
    s_einde = Sheets("Ansys vs Workbook").UsedRange.Rows.Count
    
    s_start = 8
    
    Open txtNaam For Output As #txtFile
      
    For i = s_start To s_einde
    
    If Range("D" & i).Value <> "" And Range("E" & i).Value <> "" Then
        Print #txtFile, Range("D" & i).Value & "        " & "=" & "     " & Range("E" & i).Value & ";"
 
     End If
     
        Next i
    
    Close #txtFile
    
End Sub

Heel erg bedankt voor de hulp! Ik ben er zeer blij mee.

Groeten,
Bart
 
Je kunt je code nog een beetje fatsoeneren door de variabele s_start maar één keer te vullen. Alleen de tweede toewijzing is zinvol, de eerste totaal overbodig. Tenzij je de code als leesvoer wilt gebruiken :)
 
En dan deze:
Code:
Print #txtFile, Range("D" & i).Value & "        " & "=" & "     " & Range("E" & i).Value & ";"

Wijzigen in:
Code:
Print #txtFile, Range("D" & i).Value & "        =     " & Range("E" & i).Value & ";"
 
Je kunt je code nog een beetje fatsoeneren door de variabele s_start maar één keer te vullen. Alleen de tweede toewijzing is zinvol, de eerste totaal overbodig. Tenzij je de code als leesvoer wilt gebruiken :)

Inderdaad logisch. Gezien, begrepen en veranderd. Dank!
 
En dan deze:
Code:
Print #txtFile, Range("D" & i).Value & "        " & "=" & "     " & Range("E" & i).Value & ";"

Wijzigen in:
Code:
Print #txtFile, Range("D" & i).Value & "        =     " & Range("E" & i).Value & ";"

Ook deze aangepast. Helemaal helder.
Bedankt.
 
Je zou het ook met VBA kunnen doen:

Code:
Sub M_snb()
   sn = Sheet1.UsedRange.Columns(4).Resize(, 2)

   For j = 8 To UBound(sn)
     If sn(j, 1) <> "" Then c00 = c00 & vbLf & Join(Application.Index(sn, j, 0), "=") & ";"
   Next
   
   CreateObject("scripting.filesystemobject").createtextfile(ThisWorkbook.Path & "\test.txt").write Mid(c00, 1)
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan