2014-10-01 119 views
0

我正在做我在Excel 2007 vba中的第一步。我想要做的是編寫一個宏,比較我的最後一個和最後一個excel表單,並突出顯示最後一個表單的差異。正如你在下面看到的,我對以下代碼進行了編碼,並且當我使用調試模式時,Excel不會顯示任何錯誤,但是它不會標記任何已經進行了更改的單元格,而這些單元格是它應該做的。有人會介意看看下面的代碼並糾正我的潛在錯誤。非常感謝你。比較兩個Excel表單,相同的工作簿,突出顯示差異

Sub compare() 
Dim sh1 As Worksheet, sh2 As Worksheet 
Dim rCount As Long, cCount As Long 
Set sh1 = Worksheets(Sheets.Count - 1) 
Set sh2 = Worksheets(Sheets.Count) 
rCount = sh1.Cells(Rows.Count, 1).End(xlUp).Row 
cCount = sh1.Cells(Rows.Count, 1).End(xlUp).Row 
Dim r As Long, c As Integer 
For r = 1 To rCount 
    For c = 1 To cCount 
     If sh1.Cells(r, c) <> sh2.Cells(r, c) Then 
      sh2.Cells(r, c).Interior.ColorIndex = 3 
     End If 
    Next c 
Next r 

末次

+0

你cCount相同RCOUNT但是,這並不說明沒有被標記細胞。你有沒有測試過rCount有什麼價值? – Barry 2014-10-01 20:23:05

回答

0

我的猜測是,你只有在SH1數據的單行。當你分配rcount時,你的值爲1,當你分配cCount的時候,你得到了同樣的價值,因爲你的分配方式與rcount相同。然後你可能遍歷一行和一列,只比較一個單元格,然後子例程退出。

也許你的意思是:cCount = sh1.Cells(1, ColumnsCount).End(xltoLeft).Column

+0

行和列的建議是正確的。謝謝! Marco使用sh1和sh2的定義名稱。但是這些名字是動態的,並且不知何故,我的代碼中沒有使用最後一張和最後一張。有任何想法嗎? – Doozer 2014-10-02 07:22:38

+0

不幸的是,我不確定爲什麼動態的'最後一張'邏輯不起作用。我從來沒有見過使用過,但有很多我沒見過,所以我認爲這是適合你的情況。您可能需要考慮常見的工作表命名約定,如「DataSheet1」,「DataSheet2」等。然後,您可以遍歷工作表並選擇Right(Worksheet.name,1)以確定哪個工作表是「最後一個」。 – JNevill 2014-10-02 13:13:30

相關問題