2014-02-11 2 views
1

открыть книгу Excel с помощью этого кода из OUTLOOK VBA:взаимодействия Excel не работает после того, как файл Excel открыт

'~~> BEGINNING OF EXCEL CODE <~~ 
Dim xlApp As Excel.Application 
Dim sourceWB As Excel.Workbook 
Dim sourceWS As Excel.Worksheet 

Set xlApp = New Excel.Application 

With xlApp 
    .Visible = True 
    .EnableEvents = True 
    .UserControl = False 
    .DisplayAlerts = False 
    .AskToUpdateLinks = False 
End With 


strFile = scPATH & "Seattle ScoreCard " & Format(prevSCdate, "mm") & "." & Format(prevSCdate, "dd") & "." & Format(prevSCdate, "yy") & ".xlsm" 

Set sourceWB = xlApp.Workbooks.Open(strFile, , False, , , , , , , True) 
Set sourceWS = xlApp.sourceWB.Worksheets(Chr(34) & "Week " & Format(prevSCdate, "ww") & " " & Format(prevSCdate, "mm") & "." & Format(prevSCdate, "dd") & "." & Format(prevSCdate, "yy") & Chr(34)) 

'~~> CANT GET THIS TO RUN ONCE EXCEL OPENS <~~ 

sourceWS.Copy Before:=Sheets(2) 

'~~> 

... 

Он открывает нужный файл и все, но как только он открывает его не выполняет sourceWS.Copy. Я проверил, что эта команда работает, используя ее непосредственно из VBA в файле Excel. У меня также есть библиотека Excel.

Любая помощь? Результаты выглядят так, как будто последняя строка не существует. Он открывает файл, а затем ничего не происходит.

ответ

1

Первое:

Set sourceWS = xlApp.sourceWB.Worksheets(...) 

В этой строке пытается вызвать свойство из xlApp объекта (экземпляра класса Excel.Application) с именем sourceWB, но, конечно, xlApp не поддерживает свойство с именем sourceWB.

Это даст вам сообщение об ошибке, если вы не используете On Error Resume Next - если да, то тщательно его использования, см image to my another answer для объяснения, почему это плохо :)

Итак, вы уже назначить sourceWB на xlApp при открытии рабочей книги и Outlook знает, что sourceWB относится к xlApp. Это означает, что вы не должны использовать его в этом контексте xlApp.sourceWB. Измените строку выше

Set sourceWS = sourceWB.Worksheets(...) 

Другого дело заключается в использовании полного имени Sheets(2) (с использованием только Sheets(2) может вызвать ошибку, если у вас есть более чем один открытое учебное пособие во время выполнения кода). Изменение:

sourceWS.Copy Before:=Sheets(2) 

в

sourceWS.Copy Before:=sourceWB.Sheets(2) 
+1

Это работало отлично, спасибо! – dadykhoff

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