2017-02-08 5 views
1

Я пытаюсь установить диапазон ячеек, которые уже выбраны, есть ли способ сделать это?Как установить диапазон ячеек, выбранных в этот момент

Range("e2").Select 
    Range(Selection.End(xlToRight), Selection.End(xlDown)).Select 
    Range(Selection, Selection.End(xlToLeft)).Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Set temprange = activeselection 

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

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

+0

'Set temprange = Selection' - но, пожалуйста, подумайте дважды (а затем в два раза больше), прежде чем строить много кода вокруг' Select' или 'Activate'. (Например, вы просто пытаетесь «Установить temprange = Range (« E2 »). CurrentRegion'?) – YowE3K

+0

Он работал как с выбором, так и с currentregion. Спасибо, что это за разногласия? И как я могу отметить ваш комментарий в качестве ответа? : D – Hahasiah

+0

Теоретически, ответ на ваш вопрос - это только часть 'Set temprange = Selection' моего комментария (так что вы можете отметить ответ @ Michael как правильный). Я сомневаюсь, что в операциях 'Select', которые вы в настоящее время используете ** всегда **, заканчивается' CurrentRegion', так что часть моего комментария не имеет никакого отношения к этому вопросу и является всего лишь предположением о том, делая то, что вы хотите сделать. – YowE3K

ответ

2

Если вы хотите обратиться к клеткам, которые уже выбраны, просто используйте ссылку выбора:

Set temprange = Selection 

Заметьте, что это вообще лучше избегать работы с выборами в VBA, где это возможно и просто работать с диапазонами. Это возможно для вас, чтобы переписать код, чтобы не работать с выборами на всех:

Set temprange = Range(Range("E2").End(xlToRight), Range("E2").End(xlDown)) 
Set temprange = Range(temprange, temprange.End(xlToLeft)) 
Set temprange = Range(temprange, temprange.End(xlToRight)) 

Вы могли бы также упростить дальнейшее использование смещения для автоматического включения 2 дополнительных столбцов вправо. Смотрите статью ниже для более подробной информации о том, как ссылаться на диапазоны в VBA:

https://msdn.microsoft.com/en-us/library/office/gg192736(v=office.14).aspx

0

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

код

Sub GetRng() 
Dim rng1 As Range 
On Error Resume Next 
Set rng1 = Application.InputBox("pls select range", "Set Range", Selection.Address, , , , , 8) 
On Error GoTo 0 
If rng1 Is Nothing Then MsgBox "User cancelled", vbCritical 
End Sub 
Смежные вопросы