Ik wil graag d.m.v. een macro werkbladen omzetten naar cvs/text files. Ik heb via google en GoT enkele scripts gevonden, alleen doen ze net niet wat ik precies wil.
Het probleem zit in het feit dat er in de excel sheet lege velden zitten. Ook de lege velden wil ik in de csv file hebben, anders geeft het programma dat de csv files leest errors. Als ik files converteer via opslaan als worden ook niet alle legen velden herkend.
Het volgende script geeft keurig de lege velden weer, alleen verschijnen er quotes om de regels met een komma erin.
Ik heb geprobeerd het fileformat te veranderen, maar de quotes/aanhalingstekens blijven.
Een ander script hier op GoT laat de quotes weg door een print functie te gebruiken, alleen worden lege velden niet herkend als de laatste kolommen leeg zijn.
Bij het enige script dat ik gevonden heb dat wel werkt moet je de cellen selecteren die je in de csv file wilt hebben, maar dat is lastig met meer dan honderd kolommen en rijen.
Ik heb weinig ervaring met VB en macro's, en ik begrijp dat het vragen om een oplossing voor een 'simpel' probleem wel erg makkelijk is, i.p.v. me zelf te verdiepen in VB, maar ik zou het zeer waarderen als iemand mij kan vertellen hoe ik kan bereiken wat ik wil.
Het probleem zit in het feit dat er in de excel sheet lege velden zitten. Ook de lege velden wil ik in de csv file hebben, anders geeft het programma dat de csv files leest errors. Als ik files converteer via opslaan als worden ook niet alle legen velden herkend.
Het volgende script geeft keurig de lege velden weer, alleen verschijnen er quotes om de regels met een komma erin.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| Sub CreateCSV() Dim wkb As Workbook Dim wks As Worksheet Dim wksOri As Worksheet Dim iCols As Integer Dim lRow As Long Dim iCol As Integer Dim lRows As Long Dim sFilename As String Application.ScreenUpdating = False sFilename = "C:\report.csv" Set wksOri = ActiveSheet iCols = wksOri.Cells. _ SpecialCells(xlCellTypeLastCell).Column lRows = wksOri.Cells. _ SpecialCells(xlCellTypeLastCell).Row Set wkb = Workbooks.Add Set wks = wkb.Worksheets(1) For lRow = 1 To lRows For iCol = 1 To iCols With wks.Cells(lRow, 1) If iCol = 1 Then .Value = wksOri.Cells(lRow, iCol).Text Else .Value = .Value & ";" & _ wksOri.Cells(lRow, iCol).Text End If End With Next Next Application.DisplayAlerts = False wkb.SaveAs Filename:=sFilename, _ FileFormat:=xlCSV wkb.Close Application.DisplayAlerts = True wksOri.Parent.Activate Application.ScreenUpdating = True MsgBox sFilename & " saved" Set wks = Nothing Set wkb = Nothing Set wksOri = Nothing End Sub |
Ik heb geprobeerd het fileformat te veranderen, maar de quotes/aanhalingstekens blijven.
Een ander script hier op GoT laat de quotes weg door een print functie te gebruiken, alleen worden lege velden niet herkend als de laatste kolommen leeg zijn.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| Sub NestorioExportToCSV() Dim TheFileSaveName As String, vFileNum As Integer, qcq As String, tempStr As String Dim i As Long, j As Integer TryAgain: TheFileSaveName = Application.GetSaveAsFilename(InitialFileName:="", filefilter:= _ "CSV (Comma delimited) (*.csv), *.csv", Title:="Please enter filename to export to") If TheFileSaveName = "False" Then MsgBox "Please enter a valid filename": GoTo TryAgain vFileNum = FreeFile() On Error Resume Next Open TheFileSaveName For Output As #vFileNum If Err <> 0 Then MsgBox "Cannot save to filename " & TheFileSaveName: End On Error GoTo 0 qcq = Chr(59) For i = 1 To [a1].SpecialCells(xlLastCell).Row For j = 1 To Cells(i, 256).End(xlToLeft).Column If j = 1 Then tempStr = Cells(i, j).Text Else tempStr = tempStr & qcq & Cells(i, j).Text Next j Print #vFileNum, tempStr Next i Close #vFileNum End Sub |
Bij het enige script dat ik gevonden heb dat wel werkt moet je de cellen selecteren die je in de csv file wilt hebben, maar dat is lastig met meer dan honderd kolommen en rijen.
Ik heb weinig ervaring met VB en macro's, en ik begrijp dat het vragen om een oplossing voor een 'simpel' probleem wel erg makkelijk is, i.p.v. me zelf te verdiepen in VB, maar ik zou het zeer waarderen als iemand mij kan vertellen hoe ik kan bereiken wat ik wil.