2014-07-04 62 views
0

我想要做的是,當我保存我的Excel文件,我希望腳本檢查所有具有「$」作爲最後一個字符的單元格,並檢查是否有與在同一列名「備份」,因爲它發現了一個小區,如果有,才申請我的腳本Excel VBA這應該是工作,但它不是

這裏的小區是我的代碼:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
Dim c As Range 
Dim x As Integer 
Dim y As Integer 
Dim isbackup As Boolean 
isbackup = False 

For Each c In Range("A1:N60") 
If Right(c, 1) = "$" Then y = c.Column: x = c.Row 
    For i = 1 To 60 
     If Cells(i, y).Value = "Backup" Then 
      isbackup = True 
      Exit For 
     End If 
    Next i 
If isbackup = True And Right(c, 1) = "$" Then <my script> 
Next c 

我沒有看到任何語法或邏輯錯誤,但我得到錯誤代碼

1004: 「應用程序定義或對象定義的錯誤」

+2

如果你的第一個'If'是第一個'C'假,則Y = 0 = =>'Cells(1,0)'不存在,因此錯誤1004.你也應該在'Range'的定義中更加明確:'ThisWorkbook.Worksheets(1).Range(「A1:N60」 )' –

+0

使用F8單週期。將鼠標懸停在變量上以查看其值。使用'debug.print ..'來查看發生了什麼。還有其他的調試選項。 – dcromley

+1

這不起作用,因爲在你的第一個'if'之後,你應該開始一個新行,並用'end if'結束該塊。我也會用'Right(c.address,1)=「$」 –

回答

1

也許這可以幫助:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Dim c As Range 
    Dim x As Integer, y As Integer 
    Dim isbackup As Boolean 
    isbackup = False 

    Dim rng As Range 
    Set rng = ThisWorkbook.Worksheets(1).Range("A1:N60") 

    For Each c In rng 

     If Right(c, 1) = "$" Then 
      y = c.Column: x = c.Row 

      Dim i As Integer 
      For i = 1 To rng.Rows.Count '--> I find this more flexible 
       If Cells(i, y).Value = "Backup" Then 
        isbackup = True 
        Exit For 
       End If 
      Next i 

     End If 

     If isbackup = True And Right(c, 1) = "$" Then DoEvents 'Replaced by your script 

    Next c 
End Sub 
+1

這是完美的!我愛你! :-)我沒有使用「ThisWorkbook.Worksheets(1)」的原因是因爲我使用了多個工作表,但是我將整個工作放在一個循環中來申請所有的工作表。 – Divin3

+0

但它仍然有問題...它也適用於沒有「備份」單元格的列。我會嘗試修復它 – Divin3

+0

我認爲這是因爲它爲每個單元循環低谷c,並且一旦isbackup變爲真,它將保持爲真,因此我們需要找到一種方法使其在創建一個行後再次變爲false有沒有「備份」 – Divin3

相關問題