Показать полную графическую версию : [решено] Текстовая константа
Ragnazar
01-09-2012, 20:05
Const AnyHere = InputBox("Сообщение", "Заголовок")
Ошибка
Предполагается наличие текстовой константы (литерала)
Исправьте пожалуйста
Ragnazar, ключевое слово «Const», описывающее последующую за ним константу, не предполагает наличия каких-либо выражений в определяющей части инструкции (после знака равенства).
Так что, используйте «Dim». Тем паче, что, в данном случае, сие и по смыслу должно быть так.
Dim AnyHere
AnyHere = InputBox("Сообщение", "Заголовок")
Ragnazar
02-09-2012, 10:17
Просто пытаюсь сделать, что-бы пользователь определял функцию
CDO.Message.Configuration.Fields.Item
Обычная переменная не работает.
Точнее не эту функцию а
CDO.Message.From
Ragnazar, ничего не понятно. Покажите код, который должен работать, но не работает.
Ragnazar
06-09-2012, 19:09
Const EmailFrom = "От кого"
Const EmailPassword = InputBox "Пароль"
Const strSmtpServer = InputBox "smtp server"
Const EmailTo = InputBox "Кому"
Set objEmail = CreateObject("CDO.Message")
objEmail.From = EmailFrom
objEmail.To = EmailTo
objEmail.Subject = InputBox "Тема"
objEmail.Textbody = InputBox "Сообщение"
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = EmailFrom
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = EmailPassword
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmtpServer
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
WScript.Quit
Заменить константы DIMом и SETом не получилось
Это называется «смешались в кучу кони, люди». Исправлять не стал.
Не проверялось:
Option Explicit
Dim EmailFrom
Dim EmailPassword
Dim strSmtpServer
Dim EmailTo
Dim objEmail
EmailFrom = "От кого"
EmailPassword = InputBox("Пароль")
strSmtpServer = InputBox("smtp server")
EmailTo = InputBox("Кому")
Set objEmail = CreateObject("CDO.Message")
With objEmail
.From = EmailFrom
.To = EmailTo
.Subject = InputBox("Тема")
.Textbody = InputBox("Сообщение")
With .Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = EmailFrom
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = EmailPassword
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSmtpServer
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Update
End With
.Send
End With
Set objEmail = Nothing
WScript.Quit
Ragnazar
06-09-2012, 20:24
Узнал много нового про With
А Set ObjEmail = Nothing обязательно?
И что такое option explicit?
А Set ObjEmail = Nothing обязательно? »
Старайтесь сразу привыкать освобождать объектные переменные, когда они более не требуются. В данном конкретном случае скрипт всё одно завершает свою работу, так что большой разницы нет. Но в других случаях сие может стать критичным. Так что, как я уже говорил, лучше привыкать делать сие сразу. Привычка — вторая натура.
Вы как бы «говорите», что объектная переменная более не ссылается на область памяти, занятую созданным ранее экземпляром объекта «CDO.Message», и сборщик мусора (Сборка мусора — Википедия (http://ru.wikipedia.org/wiki/%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BC%D1%83%D1%81%D0%BE%D1%80%D0%B0)) во время очередного прохода сможет освободить эту память и вернуть её в распоряжение системы.
И что такое option explicit? »
Это инструкция, декларирующая, что все переменные, содержащиеся в коде, должны быть предварительно объявлены (например, при помощи оператора Dim). Использование данной инструкции позволяет избегать глупых ошибок, возникающих при ошибках написания имён переменных.
Ragnazar
07-09-2012, 08:21
А вот вопрос
Почему
CDO.Message.subject и .textbody
Могут использовать InputBox
А .From .To
Нет? (Сообщалась ошибка "Нужно заполнить хотя-бы одно поле From или To)
Почему CDO.Message.subject и .textbody могут использовать InputBox а .From .To нет? (Сообщалась ошибка "Нужно заполнить хотя-бы одно поле From или To) »
«.From» и «.To» тоже могут.
Ragnazar
07-09-2012, 08:39
но почему-то немогут. Когда ставил там InputBox то все вводилось но в конце была ошибка
Нужно заполнить хотя-бы одно поле From или To
А что именно Вы вводили в ответ на эти запросы?
Ragnazar
07-09-2012, 09:14
InputBox("Кому","Ttile")
Я имею в виду, что Вы вводили в ответ на запрос:
http://img6.imageshack.us/img6/1636/image00020120907102350.png
?
Ragnazar
07-09-2012, 10:32
don.yari@yandex.ru
Всё работает.
Option Explicit
Const cdoSendUsingPort = 2
Const cdoBasic = 1
Const strPartSchema = "http://schemas.microsoft.com/cdo/configuration/"
Dim strValue
With WScript.CreateObject("CDO.Message")
With .Configuration.Fields
.Item(strPartSchema & "sendusing") = cdoSendUsingPort
.Item(strPartSchema & "smtpauthenticate") = cdoBasic
.Item(strPartSchema & "smtpserver") = "smtp.mail.ru"
.Item(strPartSchema & "smtpserverport") = 25
.Item(strPartSchema & "sendusername") = "login"
.Item(strPartSchema & "sendpassword") = "password"
.Update
End With
.To = InputBox("Кому:", "Отправка почтового сообщения", "to@yandex.ru")
.From = InputBox("От кого:", "Отправка почтового сообщения", "from@mail.ru")
.Subject = InputBox("Тема:", "Отправка почтового сообщения", "Subject")
Do
strValue = InputBox("Текст сообщения:", "Отправка почтового сообщения", "(пустая строка завершает ввод текста)")
If Len(strValue) = 0 Then
Exit Do
Else
.TextBody = .TextBody & vbCrLf & strValue
End If
Loop
.Send
End With
WScript.Quit 0
Ragnazar
08-09-2012, 08:46
Да. Работает
Но я не понимаю принцип строчек (strPartSchema & "sendusing") и других подобных.
Как они разъединились из той первоначальной длинной строки?
Но я не понимаю принцип строчек (strPartSchema & "sendusing") и других подобных.
Как они разъединились из той первоначальной длинной строки? »
Я просто вынес отдельно общую часть всех этих строк, только и всего. Можно было и просто:
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mail.ru"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "login"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "password"
Ragnazar
08-09-2012, 10:10
А.
Да. Понял. Не разглядел Set
А зачем do - loop в конце?
Ragnazar
08-09-2012, 10:36
Для нескольких строк. Да
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.