Недопустимый квалификатор для String.Add в Outlook VBA

Вы все были так полезны, и я подумал, могу ли я побеспокоить вас еще немного. Я почти завершил переход с 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 

Этот веб-сайт был невероятно полезен не только как место, где я мог задавать вопросы, но и как место, где я мог найти нужную информацию, не беспокоя вас всех. К сожалению, слишком часто мне приходится беспокоить всех вас, но каждый раз вы были очень добры и полезны. И я хотел бы поблагодарить вас за это.


person Wolves    schedule 10.06.2013    source источник
comment
вы пытаетесь использовать метод Add() из Collection для назначения элемента в массиве. Чтобы назначить элемент в двумерном массиве, вы должны использовать arr(a,b)=someValue, где a и b — числовые значения.   -  person Tim Williams    schedule 11.06.2013
comment
@TimWilliams Ха, ты должен был сказать это как ответ, это именно то, что я ищу. Благодарю вас!   -  person Wolves    schedule 11.06.2013


Ответы (1)


вы пытаетесь использовать метод Add() из коллекции для назначения элемента в массиве. Чтобы присвоить элемент двумерного массива, вы должны использовать arr(a,b)=someValue, где a и b — числовые значения. — Тим Уильямс

Вопрос без ответов, но проблема решена в комментарии

person Community    schedule 13.02.2015