2017-07-27 153 views
2

我的數據來自不同來源,通過獲取數據/連接進入名爲RawData的表/表格。我創建了一個鏈接到按鈕的宏,用戶必須單擊以使用索引/匹配函數填充RawData中的一些數據,該索引/匹配函數指向另一個工作簿,其中RawData的預訂號與其他工作簿匹配以確定留。使用VBA用公式替換零星的#N/A單元格

我沒有將所述工作簿追加到RawData表中,原因不同。如果需要的話,我可以走這條路線,但我認爲在我們穿過那座橋之前會有一條更簡單的路線。我遇到的問題是,一旦宏運行,另一個工作簿有時可能沒有預留數據。在這些情況下,我不得不手動確定這些數據。

這個新數據可以放在我的主工作簿中,但是我現在已經在它自己的工作簿(LOSNAintoActualLOS.xlsm)中,因爲我一直在進行這項工作的測試]。公式必須粘貼到表中,因爲當表刷新時,通常具有停留時間長度的數據行將刪除公式並將其替換爲原始值(空白單元格)。

我需要的是我的代碼循環遍歷表的F列中的所有單元格,確定具有#N/A錯誤的單元格,然後將公式粘貼到錯誤單元格中。我做了一些研究,似乎找不到適合我需要的東西。我試圖做這個循環,但看到我對VBA編碼還很陌生,這絕對不是我的強項。

Sub Macro2() 
Dim r As Integer 
LastRow = Range("B" & Rows.Count).End(xlUp).Row 

With Worksheets("Sheet1").Range("F2:F" & LastRow) 
For r = 2 To LastRow 
    If .IsError(Worksheets("Sheet1").Range("F" & r)).Value Then 
    .Formula = "INDEX(LOSNAintoActualLOS.xlsm!Table1[#Data],MATCH([@Reservation],LOSNAintoActualLOS.xlsm!Table1[Reservation],0),7)" 
    .Value = .Value 
    End If 
Next r 
End With 
End Sub 

當我運行我的If語句的代碼時,我得到運行時錯誤'438':對象不支持此屬性或方法。如果我從.IsError中刪除第一個句點,則會收到編譯錯誤:無效的限定符。

+0

相關:[...發現在列坯料,然後填充在值...](https://stackoverflow.com/questions/43211793/need-to-make-a-macro -in-excel-that-finds-blanks-in-a-column-and-then-fills-in -t/43211921#43211921)將.SpecialCells(xlCellTypeBlanks)更改爲.SpecialCells(xlCellTypeFormulas,xlErrors)。 – Jeeped

回答

4

IsErrorWorksheets("Sheet1").Range("F2:F" & LastRow)

開關起來像這樣的組成部分。

Sub Macro2() 
Dim r As Long 
Dim LastRow As Long 
LastRow = Worksheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Row 


For r = 2 To LastRow 
    With Worksheets("Sheet1").Range("F" & r) 
     If IsError(.Value) Then 
      .Formula = "INDEX(LOSNAintoActualLOS.xlsm!Table1[#Data],MATCH([@Reservation],LOSNAintoActualLOS.xlsm!Table1[Reservation],0),7)" 
      .Value = .Value 
     End If 
    End With 
Next r 

End Sub 
+0

我剛在試紙上試過了,它工作正常。很高興知道我非常接近。非常感謝! – Craig

+0

@ A.S.H。剛剛錯過刪除它,當我決定去與塊 –