Я пытаюсь прочитать файл CSV и разделить строки на столбцы листа.Передача двух массивов в качестве аргументов VBA
Таким образом, программа считывает CSV, затем считывает строку (получая позицию и длину строки), а затем выводит результаты в столбцы.
Я сделал макрос, который делает это, но теперь я хочу сделать это с помощью массивов, которые я раньше не использовал, но can not, кажется, передает массивы в качестве аргументов функции SplitColumns.
Итак, спецификация строки похожа на «start pos, end pos, format», но пока я не использую формат.
Не могли бы вы мне помочь? Я думаю, что это может быть очень простой вопрос, я просто застрял на этом в течение последнего часа.
Option Explicit
Public Sub ConvertPanel()
Dim convertFile As Long, i As Long, y As Long
Dim specString As String
Dim a As Variant
Dim b As Variant
Dim c As Range
Set c = Worksheets(1).Range(Cells(1, 1), Cells(1, 1))
specString = "1,10,@|11,2,@|15,1,@|16,4,@|20,2,@|23,1,@|31,1,@|35,1,@|39,1,@|41,1,@|160,1,@|161,2,@|163,1,@|165,1,@|25,2,@|29,2,@|34,1"
a = QuickRead("file.txt")
b = ConvertSpecString(specString)
End Sub
Private Function ConvertSpecString(ByVal specString As String) As String()
Dim fieldsInfo() As String
Dim inputString As String
inputString = Replace(specString, Space(1), vbNullString)
fieldsInfo = Split(inputString, "|")
ConvertSpecString = fieldsInfo
End Function
Private Function QuickRead(ByVal fileName As String) As String()
Dim fileNumber As Long
Dim stringRes As String
Dim fileSize As Long
Dim v As Variant
fileNumber = FreeFile
fileSize = FileLen(fileName)
stringRes = Space(fileSize)
Open fileName For Binary Access Read As #fileNumber
Get #fileNumber, , stringRes
Close fileNumber
QuickRead = Split(stringRes, vbCrLf)
End Function
Private Function SplitColumns(ByRef lineArray() As Variant, ByRef fieldsInfo() As Variant, ByVal StartCell As Range) As Variant
Dim indexLine As Long
Dim indexCount As Long
Dim stringRange As String
Dim stringColumn As Long
Dim fileInfo As String
stringRange = StartCell
stringColumn = startCell.Column
For indexCount = LBound(lineArray) To UBound(lineArray)
stringColumn = stringRange.Column
fileInfo = Split(fieldsInfo(indexCount), ",")
stringRange.EntireRow.Cells(1, stringColumn).Value = Mid(lineArray(indexCount), CLng(fileInfo(0)), CLng(fileInfo(1)))
stringColumn = stringColumn + 1
Next indexCount
End Function
Проблема заключается в том, что: lineArray() Как вариант, вам необходимо передать вариант: lineArray As Variant (который будет представлять собой 2D-массив) или массив: lineArray() Как строка/длинный/двойной – User632716
Спасибо, что фактически решил проблему! Вы должны отправить ответ, чтобы я мог высказать вам те моменты, которые вы заслуживаете! @tompreston – svacxpython
Я не был уверен, что это полностью ответит, но рад, что это помогло, я написал его ниже, связанный сайт тоже очень полезен для этого. – User632716