2017-04-12 183 views
0

我在下面有下面的代码。而不是使用停滞范围(即,范围(“AF9:AF50”)&范围(AK9:BI50“))我期望实现一个动态范围,该范围从第9行开始,贯穿最后一行数据列。我一直在阅读有关如何设置动态范围,但我无法得到它的工作。任何意见/帮助是极大的赞赏。在VBA中设置动态范围

Private Sub Worksheet_Change(ByVal target As Range) 

Dim cell As Range 
Dim controlRng As Range, nRng As Range 

Set cell = Range("AK9:BI50") 
Set controlRng = Range("AF9:AF50") 
Set nRng = Intersect(controlRng, target) 

Application.EnableEvents = False 

If Not nRng Is Nothing Then 
    Select Case target.Value 
     Case "No Promotion" 
      target.Offset(, 1).Value = Range("M" & target.Row).Value 
      target.Offset(, 4).Value = Range("P" & target.Row).Value 
      target.Offset(, 9).Value = "" 
     Case "Promotion" 
      target.Offset(, 1).Value = "" 
      target.Offset(, 4).Value = "" 
      target.Offset(, 9).Value = 0.07 
     Case "Demotion", "Partner", "" 
      target.Offset(, 1).Value = "" 
      target.Offset(, 4).Value = "" 
      target.Offset(, 9).Value = "" 
    End Select 
End If 

If Not Application.Intersect(cell, target) Is Nothing Then 
    Select Case target.Column 
     Case 37, 39, 43 
      target.Offset(, 1).Value = target.Value/Range("V" & target.Row).Value 
     Case 38, 40, 44 
      target.Offset(, -1).Value = WorksheetFunction.RoundUp((target.Value * Range("V" & target.Row).Value), -2) 
     Case 41, 60 
      target.Offset(, 1).Value = WorksheetFunction.RoundUp((target.Value * Range("V" & target.Row).Value), -2) 
     Case 42, 61 
      target.Offset(, -1).Value = target.Value/Range("V" & target.Row).Value 
    End Select 
End If 

Application.EnableEvents = True 

End Sub 

回答

0

我假设你的问题是处理信件方面范围,并试图做出动态的?如果是这样你可能会寻找语法。

Set MyRange = MySheet.Range(MySheet.Cells(TopRow, LeftCol), MySheet.Cells(LastRow, RightCol)) 

因此,例如,这两个范围将是等价的,但第一个可动态生成。

TopRow = 1 
LeftCol = 2 
LastRow = 100 
RightCol = 3 
Set MyRange = MySheet.Range(MySheet.Cells(TopRow, LeftCol), MySheet.Cells(LastRow, RightCol)) 

Set MyOtherRange = mysheet.range("B1:C100") 

有几种方法来查找一列的最后一行,在其他情况下,其他人一些工作做得更好。看看这里https://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using-vba

我通常使用这个

LastRow = sht.Cells(sht.Rows.Count, ColumnNumber).End(xlUp).Row 
+0

嗨贾里德。我遇到的问题是数据行可能会有所不同。本质上,我需要配置代码来识别最后一行,并通过最后一行数据应用所请求的操作。 – Kelsie