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 ответ
- Всегда объявлять
Option Explicit
на вершине. Это поможет вам найти ошибки. - Объявляйте одну переменную на строку, всегда объявляйте тип.
Чтобы ответить на ваш вопрос: мне нравится создавать объект коллекции, а затем подавать все мои строки в этот объект коллекции. В конце я могу просмотреть свою коллекцию и вывести каждую строку в текстовый файл.
Попробуй это:
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