比较两张Excel表格中的第一列,并将差异更新为文本文件

比较两张Excel表格中的第一列,并将差异更新为文本文件,excel,vbscript,vba,Excel,Vbscript,Vba,我们希望比较两个不同Excel表中第一列的输出,并将差异更新为文本文件。这是将excel1中的A1数据与excel2中的A1数据进行比较,并附加到文本文件中: Dim objExcel,ObjWorkbook,objsheet,ObjWorkbook1,objsheet1,Originalvalue,filesys, filetxt Const ForReading = 1, ForWriting = 2, ForAppending = 8 Set objExcel = CreateObj

我们希望比较两个不同Excel表中第一列的输出,并将差异更新为文本文件。这是将excel1中的A1数据与excel2中的A1数据进行比较,并附加到文本文件中:

Dim objExcel,ObjWorkbook,objsheet,ObjWorkbook1,objsheet1,Originalvalue,filesys, filetxt

Const ForReading = 1, ForWriting = 2, ForAppending = 8 

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("D:\Test\copy.xlsx")
set objsheet = objExcel.ActiveWorkbook.Worksheets(1)
Set objWorkbook1 = objExcel.Workbooks.Open("D:\Test\Original.xlsx")
set objsheet1 = objExcel.ActiveWorkbook.Worksheets(1)

Originalvalue = objsheet.Cells(1,1).value

Copyvalue = objsheet1.Cells(1,1).value

If Originalvalue = Copyvalue then

Set filesys = CreateObject("Scripting.FileSystemObject") 
Set filetxt = filesys.OpenTextFile("D:\Test\output.txt", ForAppending, True) 
filetxt.WriteLine(Originalvalue) 
filetxt.Close

msgbox Originalvalue

else 

Set filesys = CreateObject("Scripting.FileSystemObject") 
Set filetxt = filesys.OpenTextFile("D:\Test\output.txt", ForAppending, True) 
filetxt.WriteLine(Copyvalue) 
filetxt.Close

msgbox Copyvalue

End If

objExcel.ActiveWorkbook.Close
objExcel.Workbooks.Close
objExcel.Application.Quit

如何对A列中的所有数据执行此操作?

这将比较文件,如果复制文件中有不同的值,则将其放入文本文件中。如果值相等,则忽略。不确定这是否是您要查找的行为,但您至少可以看到如何循环遍历文件以比较所有记录

Dim objExcel, ObjWorkbook, objsheet, ObjWorkbook1, objsheet1, Originalvalue, filesys, filetxt
Dim objsheet_LastRow As Long, objsheet1_LastRow, LastRow As Long, RowCounter As Long, CopyValue

Const ForReading = 1, ForWriting = 2, ForAppending = 8

'are you doing this because you are running this outside of excel?
'if not then this doesn't have to look as complicated as it is

Set objExcel = CreateObject("Excel.Application")
Set ObjWorkbook = objExcel.Workbooks.Open("D:\Test\copy.xlsx")
Set objsheet = objExcel.ActiveWorkbook.Worksheets(1)
Set ObjWorkbook1 = objExcel.Workbooks.Open("D:\Test\Original.xlsx")
Set objsheet1 = objExcel.ActiveWorkbook.Worksheets(1)

Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.OpenTextFile("D:\Test\output.txt", ForAppending, True)

'find the last row of data in each sheet, this will only go the end of the shorter file
objsheet_LastRow = objsheet.Cells(100000, 1).End(xlUp).Row
objsheet1_LastRow = objsheet1.Cells(100000, 1).End(xlUp).Row
LastRow = Application.WorksheetFunction.Min(objsheet_LastRow, objsheet1_LastRow)

For RowCounter = 1 To LastRow
    Originalvalue = objsheet.Cells(RowCounter, 1).Value
    CopyValue = objsheet1.Cells(RowCounter, 1).Value
    'if values are different, put the new value in a txt file
    If Originalvalue <> CopyValue Then filetxt.WriteLine (CopyValue)
Next RowCounter

filetxt.Close
ObjWorkbook.Close False
ObjWorkbook1.Close False
'objExcel.ActiveWorkbook.Close
'objExcel.Workbooks.Close
objExcel.Application.Quit
Dim objExcel、obj工作簿、objsheet、ObjWorkbook1、objsheet1、Originalvalue、filesys、filetxt
变暗objsheet_LastRow为长,objsheet1_LastRow为长,行计数器为长,CopyValue
读取常数=1,写入常数=2,外观常数=8
'您这样做是因为您在excel之外运行它吗?
如果不是这样,这就不必看起来那么复杂
设置objExcel=CreateObject(“Excel.Application”)
设置ObjWorkbook=objExcel.Workbooks.Open(“D:\Test\copy.xlsx”)
设置objsheet=objExcel.ActiveWorkbook.Worksheets(1)
设置ObjWorkbook1=objExcel.Workbooks.Open(“D:\Test\Original.xlsx”)
设置objsheet1=objExcel.ActiveWorkbook.Worksheets(1)
设置filesys=CreateObject(“Scripting.FileSystemObject”)
设置filetxt=filesys.OpenTextFile(“D:\Test\output.txt”,用于显示,True)
'查找每个工作表中的最后一行数据,这将只进入较短文件的末尾
objsheet_LastRow=objsheet.Cells(100000,1).End(xlUp).Row
objsheet1_LastRow=objsheet1.Cells(100000,1).End(xlUp).Row
LastRow=Application.WorksheetFunction.Min(objsheet\u LastRow,objsheet1\u LastRow)
对于RowCounter=1到LastRow
Originalvalue=objsheet.Cells(行计数器,1).Value
CopyValue=objsheet1.Cells(行计数器,1).Value
'如果值不同,请将新值放入txt文件中
如果原始值为CopyValue,则为filetxt.WriteLine(CopyValue)
下一个计划者
filetxt.Close
ObjWorkbook.Close False
ObjWorkbook1.关闭False
'objExcel.ActiveWorkbook.Close
'objExcel.Workbooks.Close
objExcel.Application.Quit

TODO:错误捕获

两个文件的记录数是否相同?你知道这只是要输出你的“复制”文件的一个txt副本,对吗?IF语句的两个分支都将Copyvalue的值写入txt文件。这真的是你想要的行为吗?不,两个文件不会有相同数量的记录。谢谢你指出这一点。。该(Copyvalue)不是必需的。输出文本文件应仅包含差异值。谢谢。使用DIM在for&if循环和for变量声明中处理错误,但无法克服第19行抛出的错误,该行表示未知运行时错误。请帮忙。