2016-09-30 127 views
1

我知道有這個很多職位,但他們都沒有實際的例子,所以,我明白了爲什麼我們應該避免,但不知道如何使用它。編碼在Excel的VBA不使用「選擇」 - 實際例子

我有這個表: enter image description here

我想要做的是選擇我的表的數據範圍,而不選擇頁眉和底部。

所以這是我想出了代碼:

Dim MyDataFirstCell 
Dim MyDataLastCell 

'Establish the Data Area 

    ActiveSheet.Range("B1").Select ' My Table starts on Column B 


    'In the example the table starts at B4, but the user could change for B3, B5, etc. So I want to assure it will find the table. 
    ActiveCell.Offset(1, 0).Select 
    Do While IsEmpty(ActiveCell) 
    DoEvents 
    ActiveCell.Offset(1, 0).Select 
    Loop 

'The first cell (Header) has been found. I need to select the first cel of my data, so: 

    ActiveCell.Offset(1, 0).Select 
    DoEvents 
    MyDataFirstCell = ActiveCell.Address 'Get the first cell address of Data Area 

'Now I need to select the last cell of my table: 

    Selection.End(xlDown).Select 'Get to Bottom Row of the data 
    Selection.End(xlToRight).Select 'Get to the last Column and data cell by heading to the righthand end 
    ActiveCell.Offset(-1, 0).Select ' Select the correct last cell 
    MyDataLastCell = ActiveCell.Address 'Get the Cell address of the last cell of my data area 

'Now I want to select this area: 

Range(MyDataFirstCell & ":" & MyDataLastCell).Select 

你能告訴我的理想方式,而不使用「選擇」的代碼呢?

aditional的問題:

  • 我有一個類似的表進行排序按字母名稱。如何按照優化的代碼進行排序?
  • 如果我有同樣的表下方兩行或三行,是有可能做排序在同一時間或我應該讓兩個不同的宏是什麼?

感謝你的幫助。再次,我知道這可能是重複的,但沒有任何發佈真的幫助我。

+6

有一個非常好的差不多佳能發佈所引用的所有時間:http://stackoverflow.com/questions/10714251/how-to-avoid -using-select-in-excel-vba-macros –

+2

您可能還想要搜索找到[Last Used Cell]的最佳方法(http://stackoverflow.com/questions/11169445/error-in-finding- last-used-cell-in-vba「Canon Answer」)。 –

+0

要找到最後一個單元格:http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba –

回答

2

結合兩個環節從列:

Dim lastrow As Long 
Dim lastcolumn As Long 
Dim firstrow As Long 
Dim ws As Worksheet 
Dim rng As Range 

Set ws = ThisWorkbook.Worksheets("Sheet1") ' Change to your sheet 


With ws 
    firstrow = .Cells(1, 2).End(xlDown).Row + 1 
    lastrow = .Cells(.Rows.Count, 2).End(xlUp).Row - 1 
    lastcolumn = .Cells(firstrow, .Columns.Count).End(xlToLeft).Column 
    Set rng = .Range(.Cells(firstrow, 2), .Cells(lastrow, lastcolumn)) 
End With 

MsgBox rng.Address 
+0

我必須在「ws = ThisWorkbook.Worksheets(」Sheet1「)」更改爲工作表「中添加Set以使其工作。它確實很有用,但它選擇了我的標題。你能否詳細說明並試圖解釋它是如何工作的?謝謝!!! –

+0

'End'的工作原理就像點擊ctrl然後指定的方向。我正在下到第一個被佔用的小區或最右邊的小區,然後回到第一個被佔用的小區。我編輯了代碼,不包含標題行。如果它適合您,請點擊答案上的複選標記。 –

+0

現在它沒有得到標題,但表格的範圍也是關閉的。這是以前,我試圖編輯我的評論,但我不能。 它顯示A5:B9,它實際上應該是A5:F9。 –