2016-09-30 4 views
1

Я знаю, что есть много сообщений об этом, но ни один из них не имеет практических примеров, поэтому я понимаю, почему мы должны избегать, но не как его использовать.Кодирование в Excel-VBA без использования «.Select» - Практический пример

У меня есть эта таблица: 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 

Не могли бы вы показать мне идеальный способ закодировать это без использования «.select»?

фильма вопросов:

  • У меня есть аналогичная таблица, которая сортирует по алфавиту имени. Как я могу выполнить сортировку, следуя оптимизированному коду?
  • Если у меня есть таблица с двумя или тремя строками ниже, возможно ли выполнить сортировку в одно и то же время или я должен сделать два разных макроса для этого?

Благодарю вас за помощь. Опять же, я знаю, что это может повторяться, но никто, который был опубликован, действительно помог мне.

+6

Существует очень хороший почти канон на сообщения, на который ссылаются все время: http://stackoverflow.com/questions/10714251/how-to-avoid -using-select-in-excel-vba-macro –

+2

Вы также можете найти лучший способ найти [Last Used Cell] (http://stackoverflow.com/questions/11169445/error-in-finding- last-used-cell-in-vba «Ответ Canon»). –

+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

Мне пришлось добавить Set в «ws = ThisWorkbook.Worksheets (« Sheet1 »)« Change to your sheet », чтобы заставить его работать. Это было определенно полезно, но он выбрал мой заголовок с ним. Не могли бы вы подробно остановиться и попытаться объяснить, как это работает? Спасибо!!! –

+0

'End' работает как нажатие ctrl, а затем указанное направление. Я иду на дно и приближаюсь к первой оккупированной ячейке или к дальнему праву и возвращаюсь в первую занятую камеру. Я редактировал код, чтобы не включать строку заголовка. Если он работает для вас, нажмите на галочку, отвечая. –

+0

Теперь он не получает заголовок, но диапазон для таблицы также отключен. Это было уже ранее, я попытался изменить свой комментарий, но не смог. Он показывает A5: B9, когда он на самом деле должен быть A5: F9. –

Смежные вопросы