2016-11-16 4 views
1

Я пытаюсь преобразовать диапазон Excel в таблицу, используя сценарий VBA, запускаемый из Outlook.Использование VBA в Outlook, как преобразовать диапазон Excel в таблицу?

Это работает при запуске из Excel, но не из Outlook:

ListObjects.Add(xlSrcRange, Range("A1:D10"), , xlYes).Name = "myTable" 

Я попробовал этот следующий код в Outlook, но это не удалось:

Dim excApp As Excel.Application 
Set excApp = GetObject(, "Excel.Application")  
excApp.ListObjects.Add(xlSrcRange, Range("A1:D10"), , xlYes).Name = "myTable" 

Этот код бросил Ошибка выполнения «1004» Метод «Диапазон» объекта «_Global» не удался.

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

ответ

2

Это потому, что в Excel у вас уже открыт лист. ActiveSheet является значением по умолчанию, когда вы просто вставляете Range("somerange"), не указав, какой лист, рабочая книга или объект приложения excel существует. В Outlook нет такой вещи, как activesheet, и поэтому она не имеет понятия, что вы подразумеваете под этим диапазоном.

Вы должны быть более четко:

Dim excApp As Excel.Application 
Set excApp = GetObject(, "Excel.Application") 
Dim excWB as Object 
Set excWB = excApp.Workbooks.Add 
excApp.ListObjects.Add(xlSrcRange, excWB.sheets("sheet1").Range("A1:D10"), , xlYes).Name = "myTable" 

Или что-то вдоль этих линий

Короче говоря, приложение Excel имеет рабочие книги, учебные пособия имеют листы и листы имеют диапазоны.