Вы все были так полезны, и я подумал, могу ли я побеспокоить вас еще немного. Я почти завершил переход с VB.net на VBA для Outlook, и для этого мне нужна информация о том, что именно возвращает конкретный фрагмент кода. Если вы все можете помочь с этим, проблема может исчезнуть; если нет, мне может понадобиться помощь по этой ошибке недопустимого квалификатора.
Насколько я понимаю, я объявляю «массив» в VBA с помощью такой команды:
Dim Computers(1, 1) As String
Что создает массив 2x2. Затем я пытаюсь заполнить его следующим образом:
Computers.Add ComputerName, ErrorState
где ComputerName и ErrorState — переменные, которые я уже заполнил. Это приводит к ошибке. Я предоставлю вам весь соответствующий раздел ниже. Мне нужно знать, сколько соответствующих элементов находится в папке «Входящие» Outlook, что означает проверку того, были ли они отправлены сегодняшней датой и правильным отправителем. Мне это нужно для того, чтобы получить правильные размеры массива Computers. (Массив заполняется щас так как правильные размеры знаю, но на практике не буду.) Взял кусок кода который нашел через гугл, вывод Scripting Dictionary, но не до конца в нем разбираюсь. Мне нужно просто количество писем без какого-либо ненужного текста, и я надеялся, что строка отладки сможет сказать мне, какая команда мне нужна, чтобы вернуть номер, и ничего больше. К сожалению, из-за вышеуказанной ошибки я не могу добраться до этой строки. Даже просматривая код, первое, что он говорит мне, это то, что здесь есть проблема. Весь соответствующий раздел находится ниже. Я знаю, что форматирование проблематично, но я работаю с VB.NET всего 4 дня, а это мой второй день работы с VBA, поэтому у меня еще не все в порядке. Я почти уверен, что здесь есть какие-то неуместные вещи, но у меня нет опыта, чтобы определить, уместно ли что-то или нет, поэтому я оставил все это. Извините за длину!
Private Sub Main()
Dim objOutlook As Outlook.Application
Dim Inbox As Outlook.MAPIFolder
Dim InboxItems As Outlook.Items
Dim Mailobject As Object
Dim strDate As String
Dim ComputerName As Object
Dim ErrorState As Object
Dim DateToday As String: DateToday = Format(Date, "yyyy/MM/dd")
Dim SenderEmail As String
Dim Computers(1, 1) As String
Dim compLength As Integer
Dim disabledList As Collection
Dim enabledList As Collection
Dim unknownList As Collection
Dim notpresentList As Collection
Dim problemList As Collection
Dim cArrayLength As Integer
Dim I As Integer
Dim J As Integer
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient
Dim EmailCount As Integer
Dim compArray() As String
'\\ load csv declarations
Dim file_name As String
Dim fnum As Integer
Dim whole_file As String
Dim lines As Variant
Dim one_line As Variant
Dim num_rows As Long
Dim num_cols As Long
Dim R As Long
Dim C As Long
Set disabledList = New Collection
Set enabledList = New Collection
Set unknownList = New Collection
Set notpresentList = New Collection
Set problemList = New Collection
'\\\\\
'\\Retrieve info from outlook, add to sorted list Computers
'\\\\\
objOutlook = CreateObject("Outlook.Application")
Inbox = objOutlook.GetNamespace("Mapi").GetDefaultFolder(6)
InboxItems = Inbox.Items
InboxItems.SetColumns ("SentOn")
Dim myItems As Outlook.Items
Dim dict As Object
Dim msg As String
Set dict = CreateObject("Scripting.Dictionary")
myItems.SetColumns ("SentOn")
EmailCount = InboxItems.Count
For Each Mailobject In InboxItems
strDate = GetDate(Mailobject.SentOn)
If Not dict.Exists(strDate) Then
dict(strDate) = 0
End If
dict(strDate) = CLng(dict(strDate)) + 1
Next Mailobject
'\\ need redo to assign number of objects to CompLength
msg = ""
For Each o In dict.Keys
msg = msg & o & ": " & dict(o) & " items" & vbCrLf
Next
Debug.Print msg
For Each Mailobject In InboxItems
ComputerName = Mailobject.Subject
ErrorState = Mailobject.Body
strDate = GetDate(Mailobject.SentOn)
SenderEmail = Mailobject.SenderEmailAddress
If strDate = DateToday And SenderEmail = "[email protected]" Then
'\\ Syntax is (key, value)
Computers.Add ComputerName, ErrorState
End If
'MsgBox(Mailobject.Subject)
'MsgBox(Mailobject.SenderName)
'MsgBox(Mailobject.To)
'MsgBox(Mailobject.Body)
Next Mailobject
Этот веб-сайт был невероятно полезен не только как место, где я мог задавать вопросы, но и как место, где я мог найти нужную информацию, не беспокоя вас всех. К сожалению, слишком часто мне приходится беспокоить всех вас, но каждый раз вы были очень добры и полезны. И я хотел бы поблагодарить вас за это.
Add()
изCollection
для назначения элемента в массиве. Чтобы назначить элемент в двумерном массиве, вы должны использоватьarr(a,b)=someValue
, гдеa
иb
— числовые значения. - person Tim Williams   schedule 11.06.2013