2013-09-26 77 views
0

在我的宏,我有以下代碼:運行時錯誤「1004」無法獲取匹配性能中的WorksheetFunction類

i = Application.WorksheetFunction.Match(str_accrual, Range(Selection, Selection.End(xlToRight)), 0) 

其中「str_accrual」是之前捕獲到這條線和範圍內的字符串選擇是在單行中,從「A1」到「BH1」,結果將是一個數字,即該字符串在所選範圍內的位置。

當我運行宏,我得到的錯誤:

Run time error '1004' Unable to get the Match propertyof the WorksheetFunction class

但是,當我使用(F8)鍵一行一行運行宏行,我沒有得到這個錯誤,但是當我運行宏不斷我得到錯誤。同樣,如果中止宏並再次運行,錯誤不會出現。

+0

'find'範圍方法也適用。 https://msdn.microsoft.com/en-us/library/office/ff839746.aspx – MackM

+0

這可能會或可能不會幫助您的答案,但在應用宏之前嘗試對數據進行排序。我在做這件事的時候注意到每次我有2個錯誤都會彈出來。關於多個錯誤的事情不允許代碼向前移動。在我的情況下,我能夠應用一種大部分可以消除這個問題的方式。 – Marty

回答

1

我試了幾次。如此看來,如果沒有比賽,該表達式會,如果你想趕上錯誤提示這個錯誤

,使用Application.Match代替

然後你就可以用isError

0

包裹呢?那就是你如果MATCH未能找到該值。

+1

但是我能夠在逐行運行宏時找到匹配項!我一直都沒有得到這個錯誤。當我得到錯誤時,我放棄宏並嘗試再次運行,我沒有看到錯誤。它發現匹配和宏後運行正常。 – user1147697

+0

您是否在不經意間更改了您的選擇? – sam092

0

試試這個:

If Not IsError(Application.Match(str_accrual, Range(Selection, Selection.End(xlToRight)), 0)) Then 
    i = Application.Match(str_accrual, Range(Selection, Selection.End(xlToRight)), 0) 
Else 
    'do something if no match is found 

End If 

更新

這裏是更好的代碼,不依賴於Selection除非用戶輸入的定義要搜索的範圍的裝置。

Sub Test() 

Dim str_accrual As String 
Dim rngToSearch As Range 

str_accrual = InputBox("Search for?") 

Set rngToSearch = Range(Selection, Selection.End(xlToRight)) 

If Not IsError(Application.Match(str_accrual, rngToSearch, 0)) Then 
    i = Application.Match(str_accrual, rngToSearch, 0) 
    MsgBox i 
Else 
    MsgBox "no match is found in range(" & rngToSearch.Address & ")." 
End If 
End Sub 
+0

謝謝大衛。我嘗試了你的代碼,但是再一次......正如我一直說的那樣,這個錯誤偶爾會出現,但不是所有的時間。只是一個謎,要解決。 – user1147697

+0

此代碼*無法*創建您遇到的錯誤 - 特別是因爲它不調用'_WorksheetFunction.Match'。由於'Application.Match'允許被封裝在'IsError'函數中,該函數捕獲由'WorksheetFunction.Match'引發的錯誤。正如其他人所問,它可能是你改變了'選擇'(你不應該依賴這個構造,除了有時作爲用戶輸入的手段,而不是作爲變量/對象)。或者,如果您在多個工作簿打開的情況下調用此宏,則基於哪本書是「活動」可能會發生錯誤。 –

+0

注意:修改後的代碼,答案在第一行中缺少'Then'。 –

1

噸這個錯誤,但沒有解決方案,據我讀帖子。 看來,要使各種工作表功能起作用,工作表必須是主動/可見的。 (至少我的最新發現是在我的Match()因爲虛假原因而隨機工作的情況下)。

我希望這個祕密能夠解決,儘管爲這種查找動作激活工作表是一件痛苦的事,並且花費了幾個CPU週期。

所以我玩弄了語法變化,結果發現代碼在我刪除下劃線換行符後開始工作,無論顯示的工作表如何。 < - 嗯,由於某種原因,我仍然需要激活工作表:-(

「不起作用

'Set oCllHeader = ActiveWorkbook.Worksheets("Auswertung").Cells(oCllSpielID.Row, _ 
        Application.Match(_ 
         strValue, _ 
         ActiveWorkbook.Worksheets("Auswertung").Range(_ 
          oCllSpielID, _ 
          ActiveWorkbook.Worksheets("Auswertung").Cells(oCllSpielID.Row, lastUsedCellInRow(oCllSpielID).Column)), _ 
          0)) 

」不工作(除去符合下劃線的可讀性打破)< - 這句法停止後,沒有辦法解決工作啓動工作:-(

Set oCllHeader = ActiveWorkbook.Worksheets("Auswertung").Cells(oCllSpielID.Row, Application.Match(strValue, ActiveWorkbook.Worksheets("Auswertung").Range(oCllSpielID, ActiveWorkbook.Worksheets("Auswertung").Cells(oCllSpielID.Row, lastUsedCellInRow(oCllSpielID).Column)), 0)) 

在我心亂運行到這個謎的更多變現,再花費大量的時間結束。

歡呼聲

0

我用「如果不是IsError」並且錯誤一直顯示。爲防止出現錯誤,請添加以下行:

打開本地錯誤繼續下一步

相關問題