简体   繁体   中英

Excel VBA: Macro to only export non blank cells

Good day everyone,

I have this macro, which exports all cells with formulas, BUT with blank outputs.

I only want the cells displaying as non blank to export. Any ideas?

Sub Export_A()

Dim sPath As String
Dim SFile As String
Dim nLog As Integer

sPath = "C:\AAAWork\"
SFile = sPath & ActiveSheet.Range("P9") & ".txt"

nfile = FreeFile

Open SFile For Output As #nfile

For i = 1 To ActiveSheet.UsedRange.Rows.Count

Set ThisCell = ActiveSheet.Range("A" & i)

If ThisCell.Text <> "" Then
 '   sInDate = ThisCell.Text

    'sOutDate = Format(ThisCell.Value, "mm/yyyy")
    sOutDate = Format(ThisCell.Value, "yyyy-mm")
    'stemp = """" & sOutDate & """" this gives the date the " in the    
beginning and end
    stemp = "" & sOutDate & ""


    For j = 1 To 10
        If j = 1 Or j = 2 Or j = 9 Then
            stemp = stemp & ";" & ThisCell.Offset(0, j)
        Else
            'stemp = stemp & "," & """" & ThisCell.Offset(0, j) & """" This 
gives every value a " beginning and end
            stemp = stemp & ";" & ThisCell.Offset(0, j)
        End If
    Next
End If
Print #nfile, stemp
Next
Close #nfile


MsgBox ("Completed a file called " & SFile & " has been generated")

End Sub

This is an interesting way of exporting to CSV, but it was inherited and does everything else very well.

Try placing the Write line at the end of the For loop

Sub Export_A()

Dim sPath As String
Dim SFile As String
Dim nLog As Integer

sPath = "C:\AAAWork\"
SFile = sPath & ActiveSheet.Range("P9") & ".txt"

nfile = FreeFile

Open SFile For Output As #nfile

For i = 1 To ActiveSheet.UsedRange.Rows.Count

Set ThisCell = ActiveSheet.Range("A" & i)

If ThisCell.Text <> "" Then
 '   sInDate = ThisCell.Text

    'sOutDate = Format(ThisCell.Value, "mm/yyyy")
    sOutDate = Format(ThisCell.Value, "yyyy-mm")
    'stemp = """" & sOutDate & """" this gives the date the " in the beginning and end
    stemp = "" & sOutDate & ""


    For j = 1 To 10
        stemp = stemp & ";" & ThisCell.Offset(0, j)
    Next

    Print #nfile, stemp

End If

Next
Close #nfile


MsgBox ("Completed a file called " & SFile & " has been generated")

End Sub

first you don't need this if statement as the output is the same if it's true or false

    If j = 1 Or j = 2 Or j = 9 Then
        stemp = stemp & ";" & ThisCell.Offset(0, j)
    Else
        'stemp = stemp & "," & """" & ThisCell.Offset(0, j) & """" This gives every value a " beginning and end
        stemp = stemp & ";" & ThisCell.Offset(0, j)
    End If

If the blanks are in the following columns you could change to code to:

    If ThisCell.Offset(0, j) <> "" Then
        stemp = stemp & ";" & ThisCell.Offset(0, j)
    End If

Which will skip blank columns

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM