2015-06-11 143 views
0

我在excel中遇到了一些VBA問題。我試圖做一些等價的迭代,但在範圍類型。當然它不起作用。有沒有任何選項可以省略這個或某種功能,將做我想要的?迭代範圍VBA

Sub trial() 
    Dim rng As Range 
    Dim rng_tmp As Range 
    Dim rngf As Range 

    Dim lastrow As Long 
    Dim lastcol As Long 

    lastcol = Sheets("Data").Range("A1").End(xlToRight).Column 
    lastrow = Sheets("Data").Range("B" & Sheets("Data").Rows.Count).End(xlUp).Row  

    For i = 2 To lastrow 
     If Sheets("Data").Cells(i, 12).Value <= 5 Then 
      Set rng_tmp = Sheets("Data").Range(Sheets("Data").Cells(i, 1), Sheets("Data").Cells(i, lastcol)) 
     End If 

     With Sheets("Data").Cells(i, 12) 
      If .Value = "11970BR" Or .Value = "13765BR" Or .Value = "14000BR" Or .Value = "14041BR" Or .Value = "14295BR" Or .Value = "14296BR" Or .Value = "14369BR" Or .Value = "14608BR" Or .Value = "14699BR" Then 
       Set rng_tmp = Sheets("Data").Range(Sheets("Data").Cells(i, 1), Sheets("Data").Cells(i, lastcol)).Select 
      End If 
     End With 

     ***Set rng = Union(rng, rng_tmp)*** 
    Next i 

    rng.Select 

End Sub 

這個粗體和斜體(或*之間的代碼段)行等價於i = i + 1。有沒有辦法將它應用到Range類型? 感謝您的幫助。

+0

什麼是你的代碼做什麼,或者應該做的? – Raystafarian

+0

你沒有指出什麼是錯誤的,但我猜想在你的Set rng = Union()'語句之前在兩個不同的地方使用'Set rng_tmp = ...'有一個問題。你的第二個'If'語句會覆蓋在第一個'If'語句中設置的'rng_tmp'的值,當兩者都爲真時。 – FreeMan

回答

0

可能會有一些問題,但是一個我特別發現是,如果不是你的某個州如果適用的話,其中一個範圍將是空的(或者我認爲excel使用的是沒有的),並且你不能結合任何東西。 有關此問題的更多信息,我希望您查看此頁面。 因爲有辦法繞過它。

http://www.cpearson.com/excel/BetterUnion.aspx

(如果您調試代碼,你會本身,只是採取聯合前,都RNG和rng_temp都是什麼,如果你檢查不符合加入rng_temp的要求,但看到的第一個單元格上面的頁面瞭解更多信息)。另外一個小問題是你的rng從頭開始總是空的。所以你需要檢查它是空的還是空的,如果是空的,你可能想把你剛纔檢查的東西放進去,使rng = rng_temp。下面

If rng is Nothing Then 

這張支票希望它能幫助, 問候

+0

非常感謝您的回覆。其實我幾個小時前已經解決了我的問題。讀完MS支持後,我意識到,我無法聯合任何東西 - 如你所說的那樣激動人心。此外,我做了這樣的「BetterUnion」來連接一些不同的區域,並省略空的區域。再一次,我是gratefull,歡呼! – Smolar

0

如果您是通過每個單元的範圍內,下面的作品試圖循環:

For Each c In Worksheets("Sheet1").Range("A1:D10").Cells 
    'do something with c here where c is the cell for this iteration 
Next 

來源: https://msdn.microsoft.com/en-us/library/office/aa221353%28v=office.11%29.aspx

+0

或者'For Each C in Worksheets(「Sheet1」)。Range(Cells(1,1),Cells(lastrow,lastcol))。cells'使它更適用於特定問題。 – FreeMan