2015-06-11 5 views
1

Я пытаюсь установить диапазон, равный currentregion. Код ниже работает, но команда активирования меняет фокус, который я не хочу. Если я удалю активирующую команду excel, произойдет сбой в последней строке. Код ниже приведен в модуле класса и части более крупного суб. Какие-либо предложения?excel vba set range as currentregion

worksheets(SHT).activate 'stops the runtime error but changes sheet 
With Worksheets(SHT) 
     With .Range(TBL2).CurrentRegion 
      .Cells = Data 
     End With 
    End With 

runtime error

ответ

1

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

With Worksheets(SHT) 
    With .Range(TBL2).CurrentRegion 
     .Cells = Data 
    End With 
End With 

Поскольку нет никакой гарантии, что данных и .CurrentRegion имеют тот же размер, что это может быть лучше, так как,

With Worksheets(SHT) 
    With .Range(TBL2).resize(ubound(Data, 1), ubound(Data, 2)) 
     .Cells = Data 
    End With 
End With 

Трудно быть более точными, учитывая, что в экстентах Данные 2-мерный массив неизвестен.

Протестировано:

Sub collect_change_dump() 
    Dim SHT As String, TBL2 As String, v As Long, w As Long, Data As Variant 
    SHT = "Sheet1" 
    TBL2 = "D3" 
    With Worksheets(SHT) 
     With .Range(TBL2).CurrentRegion 
      Data = .Cells.Value 
     End With 
     For v = LBound(Data, 1) To UBound(Data, 1) 
      For w = LBound(Data, 2) To UBound(Data, 2) 
       Data(v, w) = "blah" 
      Next w 
     Next v 
     With .Range(TBL2).Resize(UBound(Data, 1), UBound(Data, 2)) 
      .Cells = Data 
     End With 
    End With 
End Sub 
+0

Спасибо, первый код работает хорошо и много аккуратнее. fyi массивы будут иметь тот же размер, что и другой код, извлекает данные, манипулирует им, а затем вставляет его обратно в рабочий лист, используя этот суб. – Zeus

+0

Рад, что вы разобрались. Просто запустили несколько быстрых тестов, а ряды (например, * 1 * и * 2 *) для изменения размера находятся в правильном порядке. – Jeeped

+0

К сожалению, все еще есть ошибка. Если курсор находится на вкладке, я хочу скопировать данные (правильный лист активен), код работает. Но если другая вкладка активна, то excel падает? Электронная таблица отлично работала в excel v2010, но я обновил ноутбук и программное обеспечение и теперь запускаю его в v2013. У меня также есть проблемы с пользовательской формой, которая может быть связана. Какие-либо предложения? – Zeus

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