2016-02-09 36 views
0

我在VBA中有一個If/Then循環,用於檢查每個選項卡中的相同單元格是否相等,並且可以創建一個可在If/Then循環中工作的字符串給定已知數量的選項卡(3個選項卡);但是,宏需要查看任意數量的選項卡,我需要一個動態的If/Then語句。我試圖創建一個字符串,基本上根據選項卡的數量編寫代碼,但是我得到類型不匹配,因爲字符串是一個變量。使用字符串作爲If語句(VBA)的一部分

例如,這個工程給予3個標籤:

If Worksheets(loc(1)).Cells(TseriesLine, 15) = Worksheets(loc(2)).Cells(TseriesLine, 15) _ 
    And Worksheets(loc(1)).Cells(TseriesLine, 15) = Worksheets(loc(3)).Cells(TseriesLine, 15) Then 

....

但是,這並不工作:

ifline = "Worksheets(loc(1)).Cells(TseriesLine, 15) = Worksheets(loc(2)).Cells(TseriesLine, 15) _ 
    And Worksheets(loc(1)).Cells(TseriesLine, 15) = Worksheets(loc(3)).Cells(TseriesLine, 15)" 

If ifline Then .... 

我使用Evalulate(ifline)也嘗試和StrConv(ifline)沒有成功。任何幫助,將不勝感激。

謝謝

+0

這是一個可怕的做法,但在這裏你去http://simeonpilgrim.com/blog/2007/12/04/compiling-and-running-code-at-runtime/發表您的代碼,我們可以幫助您到達那裏 – Claudius

+0

使用'For Each'循環遍歷表單。並將每張紙與第一張紙進行比較。如果有的話是不真實的,那麼不要做其餘的事情。然後根據結果分配一個布爾變量true或false。然後您可以測試該布爾變量。 –

回答

1

嘗試類似這樣的東西。

如果您知道您不想檢查的工作表,您可以輕鬆測試其他工作表名稱。

Dim sValue As String 
Dim ws1 As Worksheet 
Set ws1 = Worksheets("loc(1)") 

sValue = ws1.Cells(TseriesLine, 15).Value2 

Dim bifline As Boolean 
bifline = True 

Dim ws As Worksheet 
For Each ws In ThisWorkbook.Worksheets 

    If ws.Name <> ws1.Name Then 
     If sValue <> ws.Cells(TseriesLine, 15).Value2 Then 
      bifline = False 
      Exit For 
     End 
    End If 

Next 

If bifline Then 
    'more code 
End If 
1

您可以在每張工作表集合中的每個工作簿對象中循環顯示每張工作表。

Function doesRangeMatch(rangeAddress As String) As Boolean 
    Dim ws As Worksheet 

    For Each ws In ThisWorkbook.Worksheets 
     If ThisWorkbook.Worksheets(1).Range(rangeAddress).Value <> ws.Range(rangeAddress).Value Then 
      doesRangeMatch = False 
      Exit Function 'early exit if match not found 
     End If 
    Next 
    doesRangeMatch = True 'if loop goes through then all must match 
End Function 
0

非常感謝大家!我用了一些建議組合來提出循環。這裏是解決方案:

For ss = 2 To numloc 
    If Worksheets(loc(1)).Cells(TseriesLine, 15) <> Worksheets(loc(ss)).Cells(TseriesLine, 15) Then 
     doNumMatch = False 
Exit For 
    Else: doNumMatch = True 
    End If 
Next 

If doNumMatch Then 
相關問題