2015-08-28 33 views
1

我是evaluate的新手。因此,如果下面的代碼工作評價()不起作用

If Evaluate("=NOT(ISERROR(MATCH(" & temp & ",C:C,0)))") Then 

爲什麼下面沒有這一項?

If Evaluate("=NOT(ISERROR(MATCH(" & c & ",sal,0)))") Then 

temp是一個字符串,c是一個數組中的元素,它看起來也被存儲爲一個字符串。 C:C是活動頁面上的範圍。薩爾是一個單獨的工作表上的範圍。

Set wsSal = ThisWorkbook.Worksheets("Sal Sum")  
Set sal = wsSal.Range("C17:C50") 

我已經試過

If Evaluate("=NOT(ISERROR(MATCH(c ,sal,0)))") Then 

,給了我一個運行時錯誤13類型不匹配。

由於不工作,前者進入if語句,後者不行。

+0

因爲'sal'是你在代碼中定義的變量(比如''c'''''''''''''''''''''''''''' in'Evaluate'''''''' ,C:C,0))),但是匹配(「&temp&」,C:C,0)))' - 連接字符串以包含* temp *和'&',只要將它嵌入公式你只是傳遞一個無意義的單詞('sal'),這個方法無法解決,通過不使用'sal'來修復它,並且連接字符串'C17:C50'而不是像你一樣' temp'。 –

+0

'If Evaluate(「= NOT(ISERROR(MATCH(」&c&「,」&sal&「,0)))」)Then'仍然失敗:/ – findwindow

+0

閱讀我再次寫的內容。在你測試的時候對它進行編輯:-) –

回答

2

您可以創建一個名爲sal的定義名稱,而不是將sal定義爲對象變量並將其設置爲該範圍。

從工作表中打開名稱管理器。

輸入名稱「sal`

Refers To字段中輸入='Sal Sum'!$C$17:$C$50

確認名稱。

現在您可以按照您所描述的方式使用Evaluate()和sal

UPDATE

這裏,你會發現更容易維護的另一種方式。

使wsSal成爲模塊級變量。

sal_一個模塊級的常量:

Const sal = "C17:C50" 

做一個函數:

Function sal() 
    sal = wsSal.Range(sal_) 
End Function 

現在你可以使用評估()與sal你所描述的方式。

+0

啊。聰明。但是這個範圍會隨着工作簿而改變。不希望每次都必須設置命名範圍。 – findwindow

+0

@findwindow我添加了一個更新來解決您的問題。 –

+0

保持原始代碼真的很棒。 – findwindow