Текущая проблема:
Целью является копирование данных из исходного файла .csv в целевой лист Excel на основе сопоставления значения из каждой строки файла .csv со значениями в столбце листа Excel, а затем создание копии на основе этого в правильные ячейки в лист Excel.
Я собираю значения в массив из файла .csv в цикле, сравнивая одно из значений в массиве со значениями в целевом столбце листа Excel A, если совпадение произойдет, все значения в массиве должны быть скопированы в соответствующую строку на листе Excel.
Теперь я получаю сообщение об ошибке «Несоответствие типа» при попытке сравнить значения ячеек листа Excel со значением массива.
Вот соответствующие фрагменты кода:
sfile="\\DFSpath\file1.csv"
smaster="\\DFSpath\file2.xlsx"
set xlapp = createobject("excel.application")
set wbtarget = xlapp.workbooks.open(smaster)
set tgtworksheet = wbtarget.worksheets("sheet1")
set usedRowsXP = tgtworksheet.UsedRange.Rows
dim fs,objTextFile
set fs=CreateObject("Scripting.FileSystemObject")
dim arrStr
set objTextFile = fs.OpenTextFile(sfile)
Do while NOT objTextFile.AtEndOfStream
arrStr = split(objTextFile.ReadLine,",")
for each oRow in usedRowsXP
Introw = oRow
If tgtworksheet.cells(Introw,1).value = arrStr(2) Then
tgtworksheet.cells(Introw,4).value = arrStr(0)
tgtworksheet.cells(Introw,5).value = arrStr(1)
tgtworksheet.cells(Introw,6).value = arrStr(2)
End If
next
Loop
Исправлено изменением кода следующим образом:
dim fs,objTextFile
set fs=CreateObject("Scripting.FileSystemObject")
dim arrStr
set objTextFile = fs.OpenTextFile(sfile)
'##Replace quotation marks with nothing in .csv##
strText = objtextFile.ReadAll
objTextFile.Close
strNewText = Replace(strText, """", "")
Set objtextFile = fs.OpenTextFile(sfile, 2)
objtextFile.Write strNewText
objtextFile.Close
set objTextFile = fs.OpenTextFile(sfile, 1)
'##Gather array out of line in .csv + compare user's name to name in excel sheet, if matches, copy data, repeat for each line##
Do while NOT objTextFile.AtEndOfStream
arrStr = split(objTextFile.ReadLine,",")
for each oRow in usedRowsXP
Introw = oRow.row
If Cstr(tgtworksheet.cells(Introw,1).value) = arrStr(2) Then
tgtworksheet.cells(Introw,4).value = arrStr(0)
tgtworksheet.cells(Introw,5).value = arrStr(1)
tgtworksheet.cells(Introw,6).value = arrStr(2)
End If
next
Loop