2016-12-29 1 views
-1

Я пытаюсь автоматизировать функцию электронной почты для моей команды, чтобы использовать ее, но я тоже новичок в этом, поэтому прошу простить базовую кодировку здесь. Я получаю ошибку 91 сообщение Переменная объекта или блока переменной не установленоОбъектная переменная или с переменной блока не установлена ​​(ошибка 91) Помогите

Вот код:

Sub Notification() 
    Dim outobj, mailobj 
    Dim objUserPrmt1 As Object 
    Dim strUserPrmt1 
    Dim message, title, defaultValue As String 

    message = "Enter your issue" 
    title = "InputBox Demo" 
    defaultValue = "No Issue" 

    Set outobj = CreateObject("Outlook.Application") 
    Set mailobj = outobj.CreateItem(0) 
    Set strUserPrmt1 = objUserPrmt1.CreateItem(InputBox(message, title, defaultValue, 25, 45)) 

    With mailobj 
    .To = "[email protected]" 
    .Subject = "Notification:" strUserPrmt1 
    .Body = "Test" 
    '.Send 
    .Display 
    End With 

    'Clear the memory 
    Set outobj = Nothing 
    Set mailobj = Nothing 
    Set strUserPrmt1 = Nothing 
    Set objUserPrmt1 = Nothing 
End Sub 

Надеясь кто-то может показать мне, где я потерпел неудачу.

+3

Это VBA, а не VBScript. objUserPrmt1 используется, но никогда не инициализируется. –

+0

Возможно, ваша проблема связана с 'strUserPrmt1'. Объявите его как 'string' и используйте' strUserPrmt1 = InputBox (message, title, defaultValue, 25, 45) '. –

+0

Не знаете, где мне нужно инициализировать, можете ли вы привести пример? –

ответ

1

Проблема заключается в том, что вы объявили объектную переменную objUserPrmt1, но вы никогда не устанавливали ее равной чему-либо, поэтому она говорит по умолчанию по умолчанию: Nothing. Тем не менее, вы пытались использовали этот бит ни в строке:

Set strUserPrmt1 = objUserPrmt1.CreateItem(InputBox(message, title, defaultValue, 25, 45)) 

, который, несомненно, является линия, которая бросила ошибку (то, которое вы должны были четко о в вопросе).

Возможно, вы пытаетесь использовать метод CreateItem объектной модели Outlook. Documentation показывает, что это метод объекта Application. Поскольку у вас уже есть такой объект (outobj), совсем не ясно, какую возможную цель должен иметь objUserPrmt1. Почему бы просто не использовать outobj?

Сказав это, если заменить проблемную линию:

Set strUserPrmt1 = outobj.CreateItem(InputBox(message, title, defaultValue, 25, 45)) 

вы, вероятно, все еще получаете ошибку (хотя и не такую ​​же ошибка). Это связано с тем, что в документации, к которой я привязан, говорится, что метод CreateItem ожидает OlItemType constant, но вы передаете ему строку.

InputBox возвращает строку, так что я думаю, что @AlexP правильно, что вы хотите, вероятно, просто:

strUserPrmt1 = InputBox(message, title, defaultValue, 25, 45) 

Поскольку строка не является объектом для этого не нужно быть Set - - только что назначен.

Я бы порекомендовал вам просто удалять objUserPrmt1 с вашего кода. У этого нет никакой причины для существования, и это просто заставляет ваш код бросать ошибки. Убедитесь, что вы также избавиться от двух линий:

Set strUserPrmt1 = Nothing 
Set objUserPrmt1 = Nothing 

Кроме того, не мешало бы объявить strUserPrmt1 в качестве переменной строки, хотя ее текущее неявное объявление как вариант является адекватным.

+0

Спасибо, Джон, который работал, чтобы обойти проблему с ошибкой 91. –

+0

Теперь я получаю ошибку времени выполнения 13 - Неисправность типа, когда я пытаюсь выполнить следующее: .Subject = "Уведомление:" И strUserPrmt1, любой совет? –

+0

Ничего, извините, я понял, я должен использовать & вместо слова And –

Смежные вопросы

 Смежные вопросы