На ПК с Windows 10 я использую Office профессиональный плюс 2013-32 бит, включая Outlook и Excel. У меня есть макрос в Outlook, который отправляет электронные письма.
Этот макрос использует две рабочие книги: одну в качестве источника данных, а другую в качестве журнала.
У меня проблемы с активацией листа источника данных. Я не получаю сообщение об ошибке VBA, но при тестировании обнаруживается, что активация не удалась.
См. Строку: varTest = ActiveSheet.Name
. Вот некоторые части макроса:
Public objEmailWorkbook As Excel.Workbook
Public objEmailWorksheet As Excel.Worksheet
Public objLogWorkbook As Excel.Workbook
Public objLogWorksheet As Excel.Worksheet
Sub Send_Emails()
Dim objExcelApp As Excel.Application
Dim strLogFullName As String
'Instantiate an instance of the Excel application.
Set objExcelApp = CreateObject("Excel.Application")
strXlsPathName = Environ("USERPROFILE") & "\Documents\"
strLogFileName = "email_log.xlsx"
strLogFullName = strXlsPathName & strLogFileName
'Instantiate the Log Workbook object
Set objLogWorkbook = objExcelApp.Workbooks.Open(strLogFullName, True, False)
'There's only one worksheet in the Log workbook. Identify the Log sheet name.
strLogSheetName = objLogWorkbook.Sheets(1).Name
'Instantiate the Log Worksheet object
Set objLogWorksheet = objLogWorkbook.Sheets(strLogSheetName)
objLogWorksheet.Activate
'Instantiate the eMail Address Workbook object
strEmailFileName = "emailTest.csv"
strEmailFullName = strXlsPathName & strLogFileName
'Instantiate the Email Worksheet object
Set objEmailWorkbook = objExcelApp.Workbooks.Open(strEmailFullName, True, False)
'There is only one sheet within a workbook.
'Determine the eMail address sheet name.
strEmailSheetName = objEmailWorkbook.Sheets(1).Name
'Instantiate the eMail address worksheet object
Set objEmailWorksheet = objEmailWorkbook.Sheets(strEmailSheetName)
objEmailWorksheet.Activate
'***Other Processing Code Here
'***lngLastSheetCol and strSheetFieldName values are set here
'Re-activate objEmailWorksheet
'***The following ACTIVATE command doesn't appear to work
objEmailWorksheet.Activate
varTest = ActiveSheet.Name
'Define rngSearchText as the header row in the worksheet
Set rngSearchText = ActiveSheet.Range(Cells(1, 1), Cells(1, lngLastSheetCol))
With rngSearchText
'Find the column in the worksheet for strSheetFieldName
Set rngFoundText = .Find(What:=strSheetFieldName, LookAt:=xlWhole, _
MatchCase:=False, SearchFormat:=False)
If Not rngFoundText Is Nothing Then
lngFoundTextCol = rngFoundText.Column
End If
End With
Exunt:
Set objEmailWorksheet = Nothing
Set objEmailWorkbook = Nothing
Set objLogWorksheet = Nothing
Set objLogWorkbook = Nothing
Set objExcelApp = Nothing
Set rngSearchText = Nothing
Set rngFoundText = Nothing
End Sub
Команда objEmailWorksheet.Activate
никогда не работает. Когда я шагаю по коду, varTest имеет значение «log». Я знаю, что значение листа EMail - "emailTest".
Поскольку рабочий лист электронной почты не активирован, следующий поиск не даст правильных результатов.
Есть ли другой способ активировать рабочий лист или иным образом решить проблему?