2015-06-11 144 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