2016-09-07 6 views
1

Я использую Excel 2010, и мне не удалось вызвать макрос. У меня есть три листа, в которых отображается моя диаграмма (лист 1), и в ней находится таблица для динамической диаграммы, рабочий лист для ввода необработанных данных (лист 2) и, наконец, рабочий лист, на котором данные отформатированы из необработанных данных по формулам (Лист 3).Не удается вызвать макрос

Макрос для вставки новой строки в таблице выглядит следующим образом:

Sub SBTrend() 
' 
' SBTrend Macro 
' 

' 
    Sheets("Sheet 1").Select 
    Selection.ListObject.ListRows.Add AlwaysInsert:=True 
    Range("BA10").Select 
End Sub 

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

Private Sub Worksheet_Calculate() 
Static OldVal As Variant 
If Range("A9").Value <> OldVal Then 
    OldVal = Range("A9").Value 
    Call SBTrend 
End If 
End Sub 

Однако, Я всегда столкнулся с ошибкой «Ошибка времени выполнения 91»: переменная объекта или с не заданной переменной блока ». И когда я отлаживаю, эта строка подсвечивается:

Selection.ListObject.ListRows.Add AlwaysInsert:=True 

Я бы очень признателен за любую помощь, которую я могу получить. Всем спасибо.

+0

Вам нужно удалить «Выбор» - событие расчета может срабатывать, когда рабочий лист не активен. – Comintern

+0

http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9292/avoid-using-select-or-activate#t=201609072355160036164 может представлять интерес – pnuts

ответ

2

Вам необходимо обратиться к коллекции ListObjects.

Если имеется только одна таблица на листе вы можете просто ссылаться на таблицу, это индекс

With Sheets("Sheet 1") 
    .Select 
    .ListObjects(1).ListRows.Add AlwaysInsert:=True 
End With 
Range("BA10").Select 

Если несколько вы должны ссылаться на таблицу, это имя

With Sheets("Sheet 1") 
    .Select 
    .ListObjects("Table1").ListRows.Add AlwaysInsert:=True 
End With 
Range("BA10").Select 
+0

Спасибо миллиону Томасу! Ты спасатель! –

+0

Извините, что беспокою вас снова, но теперь у меня другая проблема. Исходный лист данных (лист 2) имеет встроенную форму пользователя. Однако перед макросом данные переносятся на лист 2, однако теперь, когда макрос работает, данные переносятся на лист 1. Могу ли я высказать свое мнение по этому вопросу? Еще раз спасибо! –

+1

Существует действительно необходимость использовать select или активировать. Вы должны опубликовать свой код и спросить, как заставить его работать, не выбрав Sheet1. –