Вы все были настолько полезны, и мне было интересно, могу ли я беспокоить вас немного больше. Я почти завершил свое преобразование из 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
Этот сайт был невероятно полезен не только место для меня, чтобы задавать вопросы, но и как место для меня, чтобы найти нужную информацию, не беспокоить вас всех. К сожалению, слишком часто мне приходится беспокоить всех вас, но каждый раз, когда вы были очень добры и полезны. И я хотел бы поблагодарить вас за это.
вы пытаетесь использовать 'Add()' метод из 'Collection' присвоить элемент в массиве. Чтобы назначить элемент в 2-D массиве, вы должны использовать 'arr (a, b) = someValue', где' a' и 'b' - числовые значения. –
@TimWilliams Ха, вы должны были поставить это как ответ, это именно то, что я ищу. Спасибо! – Wolves