Ошибка RunTime на макросе VBA

Я работаю над кодом VBA, чтобы захватить текст из электронной почты Outlook и поместить его в лист Excel, который я создал. Я использую Excel 2010. Мой адрес электронной почты содержит следующую информацию:

Компания: ABC Company
Период занятий: 2013-10-29 по 2014-10-22

Я установил цикл For With, чтобы пройти через электронную почту и вставить название компании в столбец A, первую дату (2013-10-29) в столбце B и другую дату (2014-10-22) в столбце C. Когда я запускаю свой код, я получаю сообщение об ошибке: Ошибка времени выполнения 5: Неверный вызов или аргумент процедуры в следующей строке кода: vText2 = Trim(M.SubMatches(2))

Не могли бы вы сообщить мне, что я делаю неправильно. Часть моего кода ниже. Дайте мне знать, если мне нужно предоставить дополнительную информацию.

 sText = olItem.Body Set Reg1 = CreateObject("VBScript.RegExp") For i = 1 To 3 With Reg1 Select Case i Case 1 .Pattern(Company\s[:]+\s(\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*\w*\s*)\n)" .Global = False Case 2 .Pattern = "(Class Period\s*[:]+\s*([\d-\s]*))" .Global = False Case 3 .Pattern = "(through+\s*([\d-\s]*))" .Global = False End Select End With If Reg1.Test(sText) Then Set M1 = Reg1.Execute(sText) For Each M In M1 vText = Trim(M.SubMatches(1)) vText2 = Trim(M.SubMatches(2)) vText3 = Trim(M.SubMatches(3)) Next End If Next i xlSheet.Range("A" & rCount) = vText xlSheet.Range("B" & rCount) = vText2 xlSheet.Range("C" & rCount) = vText3 xlWB.Close 1 

Ошибка говорит о том, что аргумент, который вы ему дали (индекс), недопустим для коллекции SubMatches, поскольку он превышает количество элементов в коллекции.

Также помните, что индекс SubMatches начинается с «0». Я предполагаю, что вы намеренно пропустили первый пункт в пользу второго по четвертый пунктов в коллекции.

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

Попробуйте что-то вроде этого:

 Private Sub CommandButton1_Click() sText = "Company: ABC Company" & vbNewLine & "Class Period: 2013-10-29 through 2014-10-22" & vbNewLine Set Reg1 = CreateObject("VBScript.RegExp") vText = "Missing" vText2 = "Missing" vText3 = "Missing" For i = 1 To 3 With Reg1 Select Case i Case 1 .Pattern = "(Company)\w*[:](.*?)\n" .Global = False Case 2 .Pattern = "(Class Period\s*[:]+\s*([\d-\s]*))" .Global = False Case 3 .Pattern = "(through+\s*([\d-\s]*))" .Global = False End Select End With If Reg1.Test(sText) Then Set M1 = Reg1.Execute(sText) For Each M In M1 If M.SubMatches.Count > 0 Then Select Case i Case 1 vText = Trim(M.SubMatches(1)) Case 2 vText2 = Trim(M.SubMatches(1)) Case 3 vText3 = Trim(M.SubMatches(1)) End Select End If Next End If Next i xlSheet.Range("A" & rCount) = vText xlSheet.Range("B" & rCount) = vText2 xlSheet.Range("C" & rCount) = vText3 xlWB.Close 1 End Sub 

Обратите внимание, что мне пришлось изменить регулярное выражение вашей компании, чтобы заставить его работать. Твоя оригинальная работа для меня не работала.

  • VBA error 1004 выберите метод поля класса рабочего листа
  • Ошибка VBA Runtime 1004 в Range.Clear
  • Условная ошибка форматирования
  • Форма Показать метод в случае workbook_open в ThisWorkbook ломает фокус
  • excel 2007 метод oleobjects объекта не выполнен
  • Адресация OLE-объекта в ppt через excel иногда возвращает ошибку времени выполнения 430
  • Ошибка при обращении к предыдущему dimmed activecell (Ошибка времени выполнения «1004»)
  • Ошибка времени выполнения «1004» Невозможно установить текстовое свойство диапазона
  • Ошибка определения объекта приложения (1004)
  • Определенная пользователем или объектная ошибка при вставке формулы в VBA
  • Ошибка Excel 2007 VBA «91» для каждого цикла
  • Давайте будем гением компьютера.