2016-01-25 1 views
2

Я пробовал все, что приходит мне на ум, чтобы переписать этот код без части выбора.Как изменить a-delete-range, не выбирая его

Worksheets(3).Activate 
ActiveSheet.ListObjects(ListName).Range.Select 'Listname is a string-variable 
Range(ActiveCell.Offset(1), ActiveCell.Offset(-1)).Select 
Selection.Delete Shift:=xlUp 
Worksheets(2).Activate 
MsgBox "Set-creation was canceled.", vbCritical 
+0

И в чем проблема? –

+0

Попробуйте 'Worksheets (3) .ListObjects (ListName) .Range.Offset (-1) .Resize (2) .Dlelete shift: = xlUp'. Я много не работаю с таблицами, поэтому я не уверен, что он работает. –

+0

Я рекомендую прочитать [эту SO-нить] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros). – BruceWayne

ответ

1
Worksheets(3).Activate 
ActiveSheet.ListObjects(ListName).Range.Select 'Listname is a string-variable 
Range(ActiveCell.Offset(1), ActiveCell.Offset(-1)).Select 
Selection.Delete Shift:=xlUp 
Worksheets(2).Activate 
MsgBox "Set-creation was canceled.", vbCritical 

Может быть переписано как:


With Sheets(3) 
    .Range(.ListObjects(ListName).Range.Offset(1), .ListObjects(ListName).Range.Offset(-1)).Delete xlUp 
End With  
Sheets(2).Activate  
MsgBox "Set-creation was canceled.", vbCritical 

Вам не нужно ничего .Select в особенно при работе с Range объекта - все его свойства и методы могут быть непосредственно.

Вместо:

Range("A1").Select 
Selection.Value = "Test" 

Рассмотрим:

Range("A1").Value = Select 

Это лучшее кодирование и в длительных процедурах будет работать намного быстрее. Другим преимуществом является то, что вам не нужно отслеживать, что такое Selection при отладке или улучшении кода.

+0

Я уже слышал о том, что в VBA-коде нет активации или выбора. Я не настолько глубок в кодировании, как я хочу, поэтому я пытаюсь его улучшить. Я попробую ваш код позже. Thx вовсе за данную информацию и советы! – Rohfleisch

+0

Thx для вас меня. Это сработало! – Rohfleisch

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