Toon posts:

[Excel, VBA, Macro] Lege velden in CSV, geen quotes

Pagina: 1
Acties:
  • 182 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
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.


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.