types不匹配,将excel单元格值与数组值进行比较* FIXED *

目前的问题:

目标是将源.csv文件中的数据复制到目标Excel工作表,基于将.csv的每一行中的值与Excel工作表列中的值相匹配,然后根据该值将正确的单元格复制到Excel表格。

我从一个循环中的.csv文件中将数据收集到一个数组中,将数组中的一个值与目标Excel表A列中的值进行比较,如果匹配发生,数组中的所有值都将被复制到Excel表格中的相应行。

当我试图比较Excel工作表的单元格值与数组值时,我现在得到“types不匹配”错误。

这里是代码的相关位:

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 

我认为这个问题在这一行:

 for each oRow in usedRowsXP Introw = oRow 

我并不擅长VBA,但我认为usedRowsXP是一个范围,它的每一行也将是一个范围。 所以Introw将是一个范围。 尝试使用oRow的Row属性,它将返回其行号:

 for each oRow in usedRowsXP Introw = oRow.Row 

之后,Introw应该在Cells(Introw,1)等expression式中正常工作。