简体   繁体   中英

Excel VBA export multiple ranges to text file

I would like to make a UserForm with check boxes to select data from multiple ranges within an excel workbood and then have a button that will export the checked ranges to a single text file.

Currently I'm stuck with getting the data to save to a single text file. I am able to export a separate text file for each range but would like all ranges to be added to the same text file. here is a sample what I have so far:

 Private Sub UserForm_Initialize() 'resets all check boxes and is run when UserForm is opened and when "Clear" command is used Dim oCtrl As Control For Each oCtrl In Me.Controls If TypeOf oCtrl Is msforms.CheckBox Then 'Loop for unchecking all checkboxs oCtrl.Value = False End If Next End Sub Private Sub SelectAll_Click() Dim oCtrl As Control For Each oCtrl In Me.Controls If TypeOf oCtrl Is msforms.CheckBox Then oCtrl.Value = True End If Next End Sub Private Sub CancelCommandButton_Click() Unload Me End Sub Private Sub ClearCommandButton_Click() 'calls the UserForm_Initialize function and clears all check boxes Call UserForm_Initialize End Sub Sheet2.Activate ''''''''''''''''''''resin 1 TEMP 75'''''''''''''''''''''''''''''' If ResinCheckBox5.Value = True Then Dim filename5 As String, lineText5 As String 'creates filename3 and lineText3 as strings "Declaire In Memory" Dim Dim myrng5 As Range, i5, j5 'creates myrng3 as a Range filename5 = ThisWorkbook.Path & "\\resin 1-" & Format(Now, "ddmmyy-hhmmss") & ".txt" 'filename3 sent to workbook location with name "LFR21321" Open filename5 For Output As #1 Set myrng5 = Range("AM18:AM38") 'Sets myrng3 with Data range For i5 = 1 To myrng5.Rows.Count 'counts rows For j5 = 1 To myrng5.Columns.Count 'counts Columns lineText5 = IIf(j5 = 1, "", lineText5 & ",") & myrng5.Cells(i5, j5) Next j5 Print #1, lineText5 Next i5 Close #1 End If Sheet2.Activate '''''''''''''''''''resin 1 TEMP 400''''''''''''''''''''''''''''''- If ResinCheckBox6.Value = True Then Dim filename6 As String, lineText6 As String Dim myrng6 As Range, i6, j6 filename6 = ThisWorkbook.Path & "\\resin 1-" & Format(Now, "ddmmyy-hhmmss") & ".txt" Open filename6 For Output As #1 Set myrng6 = Range("O40:O60") For i6 = 1 To myrng6.Rows.Count For j6 = 1 To myrng6.Columns.Count lineText6 = IIf(j6 = 1, "", lineText & ",") & myrng2.Cells(i6, j6) Next j6 Print #1, lineText4 Next i6 Close #1 End If End Sub 

The ResinCheckbox5 and ResinCheckbox6 loops export separate text files, I would like them to both read to the same text file.

Thanks

  1. Always declare Option Explicit at the top. This will help you find mistakes.
  2. Declare one variable per line, always declare the type.

To answer your question: I like to make a collection object and then feed all my lines in to that collection object. At the end I can loop through my collection and dump each line to the text file.

Try this:

Option Explicit

Private Sub UserForm_Initialize()
    'resets all check boxes and is run when UserForm is opened and when "Clear" command is used
    Dim oCtrl As Control
    For Each oCtrl In Me.Controls
        If TypeOf oCtrl Is msforms.CheckBox Then 'Loop for unchecking all checkboxs
            oCtrl.Value = False
        End If
    Next
End Sub

Private Sub SelectAll_Click()
    Dim oCtrl As Control
    For Each oCtrl In Me.Controls
        If TypeOf oCtrl Is msforms.CheckBox Then
            oCtrl.Value = True
        End If
    Next
End Sub

Private Sub CancelCommandButton_Click()
    Unload Me
End Sub

Private Sub ClearCommandButton_Click()           'calls the UserForm_Initialize function and clears all check boxes
    Call UserForm_Initialize
End Sub

Private Sub OutPutText_Click()
    Dim textFileLines As Collection

    Sheet2.Activate
    ''''''''''''''''''''resin 1 TEMP 75''''''''''''''''''''''''''''''
    If ResinCheckBox5.Value = True Then
        ' Declare ONE variable at a time
        Dim lineText5 As String
        Dim myrng5 As Range
        Set myrng5 = Range("AM18:AM38")          'Sets myrng3 with Data range

        Dim i5 As Long
        Dim j5 As Long
        For i5 = 1 To myrng5.Rows.Count          'counts rows
            For j5 = 1 To myrng5.Columns.Count   'counts Columns
                lineText5 = IIf(j5 = 1, "", lineText5 & ",") & myrng5.Cells(i5, j5)
            Next j5
            textFileLines.Add lineText5
        Next i5
    End If

    Sheet2.Activate
    '''''''''''''''''''resin 1 TEMP 400''''''''''''''''''''''''''''''-
    If ResinCheckBox6.Value = True Then
        Dim lineText6 As String
        Dim myrng6 As Range
        Set myrng6 = Range("O40:O60")
        Dim i6 As Long
        Dim j6 As Long
        For i6 = 1 To myrng6.Rows.Count
            For j6 = 1 To myrng6.Columns.Count
                lineText6 = IIf(j6 = 1, "", lineText & ",") & myrng2.Cells(i6, j6)
            Next j6
            textFileLines.Add lineText6
        Next i6
    End If

    Dim filename5 As String
    filename5 = ThisWorkbook.Path & "\resin 1-" & Format(Now, "yyyy-MM-dd_hhmmss") & ".txt"

    Dim Line As Variant
    Open filename5 For Output As #1
    For Each Line In textFileLines
        Print #1, Line
    Next Line
    Close #1
End Sub

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