я получил
(1004) application defined or object defined error
при попытке экспортировать отправителя и тему электронной почты из Outlook в Excel.
Sub GetFolderStats()
10 On Error GoTo Err
11 Dim objOutlook As Object
12 Dim objnSpace As Object
13 Dim objRootFolder As Object
14 Dim objInbox As Object
15 Dim mailSel As Outlook.Selection
16 Dim senderVal As String, titleVal As String
17 Dim path As String
18 Dim objExcel As Object
19 Dim objWorkbook As Object
20 Dim objSheet As Object
22 path = "example.xlsx"
23 Set objExcel = CreateObject("Excel.Application")
24 Set objWorkbook = objExcel.Workbooks.Open(path)
25 Set objSheet = objWorkbook.Sheets("Sheet1")
26 Set objOutlook = CreateObject("Outlook.Application")
27 Set objnSpace = objOutlook.GetNamespace("MAPI")
28 Set objRootFolder = objnSpace.Folders("RootFolder")
29 Set objInbox = objRootFolder.Folders("Inbox")
30 For Each Folder In objInbox.Folders
31 For Each i In Folder.Items
32 If (i.UnRead) Then
33 senderVal = i.SenderEmailAddress
34 titleVal = i.Subject
35 MsgBox senderVal + " " + titleVal
37 NextEmptyRow = objSheet.Range("A" & objExcel.Rows.Count).End(xlUp).Row + 1
38 objSheet.Range("A" & NextEmptyRow) = senderVal
39 objSheet.Range("B" & NextEmptyRow) = titleVal
51 objWorkbook.Save
41 End If
42 Next
43 Next
Err:
140 MsgBox "Value: " & dblRnd & vbCrLf & _
"Error Line: " & Erl & vbCrLf & _
"Error: (" & Err.Number & ") " & Err.Description, vbCritical
objWorkbook.Close
Stop
End Sub
Строка 37 дает мне ошибку. Я пробовал sheet.activate
, sheet.select
не работал. Также я попробовал несколько решений, которые нашел в Интернете, ни одно из них не сработало.
Я поставил -4162 вместо xlUp, и все заработало. Спасибо. Использование objSheet.Rows.Count с xlUp дало тот же результат.
objExcel.Rows.Count
вернет количество строк в ActiveSheet
. Это не удается, если ActiveSheet
не является Worksheet
. Так что вам действительно стоит использовать objSheet.Rows.Count
.
Не могли бы вы сослаться на это решение ниже:
Const xlExcel7 = 39
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = true
strPathExcel = "C:\Scripts\"
strFile = "DesktopLocation"
strYear = Right(Year(Date),2)
strDay = Day(Date)
strMonth = Month(Date)
strSaveFile = strPathExcel & strFile & "-" & strYear & _
"-" & strMonth & "-" & strDay & ".xls"
If objFso.FileExists(strSaveFile) Then
Set objWorkbook = objExcel.Workbooks.Open(strSaveFile)
Else
Set objWorkbook = objExcel.Workbooks.Add
objWorkbook.Sheets(1).Name = "Default"
objWorkbook.Sheets(2).Name = "Locked Down"
objWorkbook.Sheets(3).Name = "Other"
objWorkbook.SaveAs strSaveFile, xlExcel7
End If
arrSample = Array("a, b, c, d")
OutputExcel "Default", arrSample, objWorkbook.Sheets("Default")
OutputExcel "Locked Down", arrSample, objWorkbook.Sheets("Locked Down")
OutputExcel "Other", arrSample, objWorkbook.Sheets("Other")
objWorkbook.Save
objWorkbook.Close
objExcel.Quit
Sub OutputExcel(ByVal location, ByVal strArray, ByRef objSheet)
' Add data to the sheet
objSheet.Cells(1, 1) = location & now
' Save the workbook
objSheet.Parent.Save
End Sub
Для получения дополнительной информации см.
Добавление дополнительных строк в электронную таблицу Excel с помощью VBscript
Определенно
objExcel.Rows.Count
ошибочен, как сказал вам @Jeeped в своем ответе.objExcel
- этоExcel.Application
, и он ничего не знает оRows
. ТолькоWorksheet
знает свойRows
. Но где работает этот код? Если нет вExcel
, то, возможно, Перечисление XlDirection неизвестен. ПопробуйтеNextEmptyRow = objSheet.Range("A" & objSheet.Rows.Count).End(-4162).Row + 1
.