2017-05-29 59 views
0

我新的VBA和遇到應用程序定義或與式對象定義的錯誤VBA

應用程序定義或對象定義的錯誤

在做的。

Set twb = ThisWorkbook 
Set extwbk = Workbooks.Open("abc.xlsx") 
Set x = extwbk.Worksheets("FILTERED").Range("$A:$A") 

With twb.Sheets("FILTERED") 

    For rw = 9 To .Cells(Rows.Count, 1).End(xlUp).Row 
     .Cells(rw, 34).Formula = "=IF(ISERROR(VLOOKUP(.Cells(rw, 1).Value2, x, 1, False))=TRUE,""New"",""Old"")" 
    Next rw 

End With 

這可以手動完成,但我被要求通過編程來完成。它只是將公式從AH9應用到數據的末尾。我可否知道for循環中是否有編碼錯誤?

在此先感謝。

回答

2

不要將VBA變量放入您的字符串公式中。 解決它們在VBA並將結果注入式:

.Formula = "=IF(ISERROR(VLOOKUP(" & .Cells(rw, 1).Value2 & "," & _ 
    x.Address(External:=True) & ", 1, False))=TRUE,""New"",""Old"")" 

P.S.不要使用=TRUE檢查布爾值,像If ISERROR(Something) = TRUE這樣的東西沒有意義。只需If ISERROR(Something)

.Formula = "=IF(ISERROR(VLOOKUP(" & .Cells(rw, 1).Value2 & "," & _ 
    x.Address(External:=True) & ", 1, False)),""New"",""Old"")" 

如果您希望公式是動態的,重新計算因此,當在未來(rw, 1)變化的單元格,使用.Address代替.Value2

'            vvvvvvvv 
.Formula = "=IF(ISERROR(VLOOKUP(" & .Cells(rw, 1).Address & "," & _ 
    x.Address(External:=True) & ", 1, False)),""New"",""Old"")" 
+0

感謝您的幫助。它工作成功。還有一個問題:由於該代碼導致在A9中查找確切的值。我不知道爲什麼結果會因爲更改單元格A9的確切值而有所不同。 –

+0

@AngYiwei如果你希望公式是動態的,當'A9'變化時重新計算,用'.Cells(rw,1).Address'替換'.Cells(rw,1).Value2'。那是你要的嗎? (請參閱答案的最後部分) –

+0

感謝您的回答。我通過將它替換爲「&」$ A「&rw&」來實現,兩者都可以工作。然而,我關心的是,同樣的單元格(有公式),一個具有精確值,一個具有它的位置,這兩個單元在vlookup之後都會給出兩個不同的結果。 –

相關問題