2017-02-16 214 views
1

我想用VBA在Excel宏中定義變量範圍。第一個單元始終是A25,但最後一個單元正在移動,具體取決於收集的數據數量。這可以是E35或E58等任何想法如何做到這一點?Visual Basic for Excel中的變量範圍

+0

假設連續範圍..將其添加到變量嘗試設置rng =範圍(「a25」)。currentregion,獲取作爲字符串的範圍嘗試str =範圍(「a25」)。currentregion.address – Zerk

+0

您是否收集從A25開始的區域或試圖寫入該區域的數據?如果是前者,Zerk表示,Range.CurrentRegion可能是您最好的選擇。 – SgtStens

回答

0

您可以將範圍定義爲其兩個限制單元格。比方說,你是在工作表「WS」工作:

Dim rng As Range 
Dim cl1 As Range: Set cl1 = ws.Range("A25") 
Dim cl2 As Range 

Set cl2 = ws.Range("E35") 'Or something else' 
Set rng = ws.Range(cl1, cl2) 
1

有2個選項:

選項1:你正在尋找定義Range是連續的(見下面的屏幕截圖):

enter image description here

的簡單的方法就可以了:

Option Explicit 

Sub DefRange() 

Dim Rng As Range  

With Worksheets("Sheet1") '<-- modify "Sheet" to your sheet's name 
    Set Rng = .Range("A25").CurrentRegion 

    Debug.Print Rng.Address '<-- for debug: will show A25:E35  
End With 

End Sub 

選項2:你正在尋找定義的範圍,在中間(下面的屏幕截圖)一個空行:

enter image description here

那麼,以前的方法將會導致一個錯誤的範圍

Option Explicit 

Sub DefRange() 

Dim Rng As Range 

Dim LastRow As Long 
Dim LastCol As Long 

With Worksheets("Sheet1") '<-- modify "Sheet" to your sheet's name 
    Set Rng = .Range("A25").CurrentRegion 
    Debug.Print Rng.Address '<-- for debug: will show A25:E35 ***WRONG*** 

    'Search for any entry, by searching backwards by Rows. 
    LastRow = .Cells.Find(What:="*", After:=.Range("A25"), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

    'Search for any entry, by searching backwards by Columns. 
    LastCol = .Cells.Find(What:="*", After:=.Range("A25"), SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column 

    Set Rng = .Range(.Cells(25, "A"), .Cells(LastRow, LastCol)) 
    Debug.Print Rng.Address '<-- for debug: will show A25:F37 ***CORRECT*** 

End With 

End Sub 
+0

@Eric Justus你有沒有試過這裏的答案?他們工作過嗎? –

0

只是算排在E列,

Sub Button1_Click() 
    Dim LstRw As Long 
    Dim Rng As Range, x 

    LstRw = Cells(Rows.Count, "E").End(xlUp).Row 
    x = IIf(LstRw > 25, LstRw, 25) 
    Set Rng = Range("A25:E" & x) 
    Rng.Select 
End Sub 
+0

感謝大家,它工作正常。 –