2013-06-10 6 views
1

Вы все были настолько полезны, и мне было интересно, могу ли я беспокоить вас немного больше. Я почти завершил свое преобразование из VB.net в VBA для Outlook, и для того, чтобы это сделать, мне нужна некоторая информация о том, что именно возвращает конкретный фрагмент кода. Если вы все можете помочь в этом, проблема может исчезнуть; если нет, мне может понадобиться помощь в этой недопустимой ошибке классификатора.Недопустимый квалификатор для String.Add в Outlook VBA

Из того, что я понимаю, я объявить «массив» в VBA с помощью команды, как это:

Dim Computers(1, 1) As String 

который производит массив 2х2. Затем я попытаюсь заполнить его следующим образом:

Computers.Add ComputerName, ErrorState 

где ComputerName и ErrorState - это переменные, которые я уже заполнил. Это приводит к ошибке. Я предоставлю вам весь соответствующий раздел ниже. Мне нужно знать, сколько релевантных элементов находится в почтовом ящике Outlook, что означает проверку их отправки на сегодняшнюю дату и правильного отправителя. Мне нужно это, чтобы получить правильные размеры на массиве Computers. (Массив заполнен прямо сейчас, поскольку я знаю правильные размеры, но на практике я не буду.) Я взял фрагмент кода, который я нашел через google, выход 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 

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

+1

вы пытаетесь использовать 'Add()' метод из 'Collection' присвоить элемент в массиве. Чтобы назначить элемент в 2-D массиве, вы должны использовать 'arr (a, b) = someValue', где' a' и 'b' - числовые значения. –

+0

@TimWilliams Ха, вы должны были поставить это как ответ, это именно то, что я ищу. Спасибо! – Wolves

ответ

0

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

Question with no answers, but issue solved in the comments