2016-09-15 3 views
1

У меня есть макрос Outlook, который обрабатывает электронную почту и вставляет ее в Excel, а затем вызывает макрос Excel для дальнейшей обработки. При вызове отдельно оба макроса работают так, как ожидалось. Однако, если я попытаюсь вызвать макрос Excel из макроса Outlook, письмо будет не вставить в книгу Excel, а затем, когда вызывается макрос Excel, он генерирует ошибку, потому что данных нет. Любая идея, почемуOutlook VBA Вызов макроса Excel

xlApp.Run ("PERSONAL.XLSB!Commissions_Report_Format") 

может привести к тому, что данные не будут вставляться из Outlook в Excel? Ошибка возникает только при наличии этой строки кода. Заранее спасибо!

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 
Option Explicit 

Sub PasteToExcel(item As Outlook.MailItem) 
Dim activeMailMessage As MailItem 
Dim xlApp As Excel.Application 
Dim Wb As Excel.Workbook 
Dim Ws As Excel.Worksheet 

    'Get a handle on the email 
    Set activeMailMessage = ActiveExplorer.Selection.item(1) 

    'Copy the formatted text: 
    activeMailMessage.GetInspector().WordEditor.Range.FormattedText.Copy 

    'Ensure Excel Application is open 
    Set xlApp = CreateObject("Excel.Application") 

    'Make Excel Application visible 
    xlApp.Visible = True 

    'Open the Personal Macro Workbook, or the Excel macro won't run 
    xlApp.Workbooks.Open ("C:\Users\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.xlsb") 

    'Name the Excel File 
    Set Wb = xlApp.Workbooks.Add 

    'Paste the email 
    Set Ws = xlApp.Sheets(1) 
    Ws.Activate 
    Ws.Range("A1").Select 
    Sleep 3000 
    Selection.PasteSpecial xlPasteValues 
    Sleep 3000 'wait for 3 seconds 

    'Run the Excel macro to clean up the file 
    xlApp.Run ("PERSONAL.XLSB!Commissions_Report_Format") 

End Sub 
+1

Я вижу, что вы используете Sleep в своем коде, вы спите достаточно долго, чтобы наклеивать электронную почту? – user2676140

+0

Хорошо - так кажется, это не было исправление. Я получаю прерывистую ошибку времени выполнения с этим кодом. Иногда код работает нормально, иногда это не так. Есть предположения? – battery514

+0

Можете ли вы добавить свой xlsb-код в свой вопрос? – 0m3r

ответ

1

Вы не можете использовать xlPasteValues, если вы хотите пройти форматированный текст из буфера обмена. Используйте это вместо:

Selection.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False 

Обратите внимание, что вставьте содержимое в виде обычного текста. Если вам нужно форматирование, вы можете изменить параметр Format на "HTML".

3

пользователь2676140 предложение работало. Я изменил время сна на 15 секунд, и это сделало трюк. Благодаря!

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