【发布时间】:2020-12-06 02:06:58
【问题描述】:
我正在尝试编写一个代码,该代码利用系统通过使用 for 循环检查两个不同的工作表,并将第二个工作表(“版本 2”)中所做的差异/编辑突出显示到第一个工作表(“原始” )。我有一种感觉,我需要使用一个数组,但我还不够先进,我知道如何存储这些值,然后将它们写到另一张纸上(在下面)。
我已经获得了代码,以便它突出显示所有相关单元格,但现在我正在尝试将其输出到一个报告中(在另一个名为“记录的更改”的工作表上),该报告将总结所有编辑所在的单元格地址制成。请原谅所有变量,因为这是来自未明确定义变量的旧代码集:
Private Sub CompareBasic()
Dim actSheet As Range
Dim k As Integer
Dim o As Long
Dim p As Long
Dim i As Integer
Dim change As Integer
o = Worksheets("Original").Cells(2, Columns.Count).End(xlToLeft).Column
p = Worksheets("Original").Range("A" & Rows.Count).End(xlUp).Row
change = 0
Sheets("Original").Select
For i = 2 To p
For k = 1 To o
If IsNumeric(Worksheets("Original").Cells(i, k).Value) = True Then
If Worksheets("Original").Cells(i, k).Value <> Worksheets("Version 2").Cells(i, k).Value Then
Worksheets("Original").Cells(i, k).Interior.ColorIndex = 37
change = change + 1
End If
Else
If StrComp(Worksheets("Original").Cells(i, k), Worksheets("Version 2").Cells(i, k), vbBinaryCompare) <> 0 Then
Worksheets("Original").Cells(i, k).Interior.ColorIndex = 37
change = change + 1
End If
End If
Next k
Next i
Unload Me
MsgBox "Number of cells edited counted: " & change, vbOKOnly + vbExclamation, "Summary"
b = Empty
answer = MsgBox("Do you want to run the Report?", vbYesNo + vbQuestion)
If answer = vbYes Then
If Sheet_Exists("Logged Changes") = False Then
Sheet_Name = "Logged Changes"
Worksheets.Add(After:=Sheets(Sheets.Count)).Name = Sheet_Name
End If
Worksheets("Logged Changes").Range("A1") = "Edited Requirements"
Else
Unload Me
End If
End Sub
我尝试过修改代码,但不想用任何不必要的/断行的行来阻塞它。任何帮助将不胜感激!
【问题讨论】:
-
生成的表格会是什么样子,例如第一列单元格
Address,第二列Original值,第三列Version 2值从第2 行开始(第1 行是标题)?
标签: arrays excel vba loops for-loop