Я новичок в Excel VBA кодирования. То, что я пытаюсь сделать, это сравнить две разные книги CSV, которые находятся в двух разных папках, а также сравнить столбцы на листах (которые имеют разное положение). Мне также нужно сравнить более одной пары файлов CSV.
Объяснить:
- Папка A содержит 123 CSV-файла, каждый CSV-файл имеет лист с двумя столбцами (A и B)
- Папка B содержит 123 CSV-файла, каждый CSV-файл файл имеет лист с тремя столбцами (A, B, C)
Так что я ищу, чтобы сравнить файл cvs, содержащийся в FolderA, с файлом cvs, содержащимся в FolderB. Но также проверьте, равны ли столбцы A и B, содержащиеся в CSV-файле в FolderA, или отличаются от них столбцы A и C, содержащиеся в CSV-файле в FolderB, а затем создайте отчет, чтобы показать разницу между сравниваемыми столбцами.
Например,
FolderA FolderB
WoorbookA WoorbookA
ColumnA ColunmB ColumnA ColunmB ColunmC
fff 123 fff ita 123
ddd 897 ddd eng 897
ccc 345 ccc fr 345
сообщает о новой книге с 2 столбцами, чтобы отметить разницу
Код, который я пытаюсь использовать ниже. В ней нет какой-то инструкции, которую я знаю, но я ничего не узнаю, см.
Sub CompareWorkBooksNew()
Const File_LocationA = "D:\SteamLibrary\steamapps\common\Crusader Kings II\localisation\"
Const File_LocationB = "D:\_GAMES\_TRADUZIONI\Traduzione CKII\Trad. Ita 3.3.2 OXYG\Trad. Ita Ck2 3.3.2\localisation\"
Dim wbkA As Workbook, wbkB As Workbook
Dim SheetA As Worksheet, SheetB As Worksheet
Dim File_NameA As String, File_NameB As String
Dim count As Integer, i As Long
Dim arA As Variant, arB As Variant
File_NameA = Dir(File_LocationA & "*.csv")
' report workbook
Dim wbReport As Workbook, iRow As Long
Set wbReport = Workbooks.Add()
wbReport.Sheets(1).Range("A1:F1") = Array("File", "Row", "A", "B", "A new", "C new")
iRow = 2
Do While File_NameA <> ""
File_NameB = "traduzione_" & File_NameA
'Debug.Print File_NameA, File_NameB
'Get the worksheets from the workbooks
Set wbkA = Workbooks.Open(File_LocationA & File_NameA, , True)
Set SheetA = wbkA.Worksheets(1)
arA = wbkA.Sheets(1).UsedRange.Columns("A:B").Value2
wbkA.Close False
Set wbkB = Workbooks.Open(File_LocationB & File_NameB, , True)
Set SheetB = wbkB.Worksheets(1)
SheetB.Columns(2).Delete
arB = wbkB.Sheets(1).UsedRange.Columns("A:B").Value2
wbkB.Close False
'Debug.Print UBound(arA), UBound(arA, 2), UBound(arB), UBound(arB, 2)
' check equal size
If UBound(arA) <> UBound(arB) Then
MsgBox "Rows in A = " & UBound(arA) & vbCr & _
"Rows in B = " & UBound(arB), vbCritical, "Error"
Exit Sub
End If
' compare arrays
For i = LBound(arA) To UBound(arA)
If arA(i, 1) <> arB(i, 1) Or arA(i, 2) <> arB(i, 2) Then
' report here
With wbReport.Sheets(1)
.Cells(iRow, 1) = File_NameA
.Cells(iRow, 2) = i
.Cells(iRow, 3) = arA(i, 1)
.Cells(iRow, 4) = arA(i, 2)
.Cells(iRow, 5) = arB(i, 1)
.Cells(iRow, 6) = arB(i, 2)
End With
iRow = iRow + 1
'Debug.Print arA(i, 1), arA(i, 2), arB(i, 1), arB(i, 2)
End If
Next
File_NameA = Dir() ' get next file
count = count + 1
Loop
wbReport.SaveAs ("D:\_GAMES\_TRADUZIONI\Traduzione CKII\Controllo Versioni2.xlsx")
wbReport.Close False
MsgBox count & " files compared in " & File_LocationA, vbInformation
End Sub
Спасибо всем, кто мог мне помочь