Excel VBA экспортирует несколько диапазонов в текстовый файл

Я хотел бы создать пользовательскую форму с флажками для выбора данных из нескольких диапазонов в рабочей области Excel, а затем иметь кнопку, которая будет экспортировать отмеченные диапазоны в один текстовый файл.

В настоящее время я застрял с получением данных для сохранения в одном текстовом файле. Я могу экспортировать отдельный текстовый файл для каждого диапазона, но хотел бы, чтобы все диапазоны были добавлены в один и тот же текстовый файл. вот пример того, что у меня так далеко:

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

Циклы ResinCheckbox5 и ResinCheckbox6 экспортируют отдельные текстовые файлы, я бы хотел, чтобы они оба считывались в один и тот же текстовый файл.

Спасибо

1 ответ

  1. Всегда объявлять Option Explicit на вершине. Это поможет вам найти ошибки.
  2. Объявляйте одну переменную на строку, всегда объявляйте тип.

Чтобы ответить на ваш вопрос: мне нравится создавать объект коллекции, а затем подавать все мои строки в этот объект коллекции. В конце я могу просмотреть свою коллекцию и вывести каждую строку в текстовый файл.

Попробуй это:

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
Другие вопросы по тегам