0

現在の問題:

ターゲットは、.csv の各行の値を Excel シート列の値に一致させ、それに基づいてコピーを正しいセルに作成することに基づいて、ソース .csv ファイルからターゲット Excel シートにデータをコピーすることです。エクセルシート。

ループ内の .csv ファイルから配列に値を収集し、配列内の値の 1 つを対象の 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
4

1 に答える 1

3

問題はこの行にあると思います:

for each oRow in usedRowsXP  
Introw = oRow

私はVBAがあまり得意ではありませんが、usedRowsXPは範囲であり、その各行も範囲になると思います。したがって、Introwは範囲になります。oRowのRowプロパティを使用してみてください。行番号が返されます。

for each oRow in usedRowsXP  
Introw = oRow.Row 

その後、IntrowはCells(Introw、1)などの式で正常に機能するはずです。

于 2012-10-19T08:05:51.230 に答える