Я хочу хранить данные в 1 листе из нескольких TXT-файлов. Кроме того, я хочу, чтобы первая ячейка содержала имя файла, а не путь к файлу (если это возможно), поэтому я могу связать его с графиками позже. В данных также есть столбцы AT MOST 7, в то время как число строк является переменным, а каждый дополнительный массив разделяется одним пустым столбцом.Импорт нескольких текстовых файлов Excel VBA
Dim myFile As String
Dim myValue As Integer
Dim rData As Integer
Dim Data As String
Dim LineArray() As String
Dim DataArray() As String
Dim TempArray() As String
Dim Delimiter As String
Dim row As Integer
Dim counter As Integer
Dim counterArrSep As Integer
Dim FileName As String
Sub Button1_Click()
'Input number of blades
myValue = InputBox("Please enter the number of employees below", "number of employees", vbOKCancel)
'Cancel (doesn't work properly)
If myValue = 0 Then
Exit Sub
End If
'Inputs
Delimiter = " "
row = 1
'Populate the table
Do While counter < myValue
'.txt file processing
'Show open file dialog box
myFile = Application.GetOpenFilename()
'Cancel
If myFile = "False" Then
Exit Sub
End If
'Get file name (doesn't work)
FileName = Dir(myFile, vbDirectory)
Dim DataArray()
DataArray(counterArrSep, 0) = FileName
'Open file
rData = FreeFile
Open myFile For Input As rData
'Store file content inside a variable
Data = Input(LOF(rData), rData)
'Close file
Close rData
'Separate Out lines of data
LineArray() = Split(Data, vbCrLf)
'Read Data into an Array Variable
For x = LBound(LineArray) To UBound(LineArray)
If Len(Trim(LineArray(x))) <> 0 Then
'Split up line of text by delimiter
TempArray = Split(LineArray(x), Delimiter)
'Determine how many columns are needed
col = UBound(TempArray)
'Re-Adjust Array boundaries
ReDim Preserve DataArray(col, row)
'Load line of data into Array variable
For y = LBound(TempArray) To UBound(TempArray)
DataArray(y + counterArrSep, row) = TempArray(y)
Next y
End If
'Next line
row = row + 1
Next x
'Clear array
Erase TempArray
'Increments the count to get another file
counter = counter + 1
'Adds space between each arrays in the Worksheet
counterArrSep = counterArrSep + 8
Loop
End Sub
файлов .txt выглядит следующим образом: ... \ Сотрудники \ John.txt
apples pears oranges carrots
4 5 34 2
43 5,5 4 43
6 54 9 7,5
41,5 55 0 2
...\employees\Steve.txt
apples pears oranges carrots cabbages
6 56 6 2 0
4 1 4 12 5
0 7 9 7 6
0 12 1 5 3
1 44 3 6 0
4 4 4,5 6 23
так в чем же проблема? Вы должны разделить свой код на несколько процедур. Сделайте тот, который получает все файлы в выбранной папке. Затем создайте еще один файл для импорта одного файла в то время и вызовите эту вторую процедуру из первого, передав имя файла как параметр. Прямо сейчас, я думаю, у вас есть проблемы, чтобы идти прямо через файлы? – cboden
BTW: вам лучше структурировать код. Не имеет смысла объявлять все переменные для всего модуля вне процедуры, например. Разделите свою проблему на более мелкие проблемы и решите их один за другим. В настоящее время вы действительно далеко от решения, и у вас много проблем. Структура, которую вы планируете, и вернуться, когда вы определили одну проблему. – cboden
Простите, VBA лет назад. Я попытался собрать то, что помню. –