2017-04-12 189 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