【问题标题】:excel vba inputboxexcel vba输入框
【发布时间】:2012-08-25 19:13:58
【问题描述】:

我有以下用于 excel vba 的代码,它将通过电子邮件发送我工作表中的一系列地址。但是,我希望可以使用输入框来确定我想通过电子邮件发送的范围。我遇到的麻烦是让输入成为函数 mailid 理解的值。有什么建议么?

Sub EmailActiveSheetWithOutlook2()

Dim oApp, oMail As Object, _
tWB, cWB As Workbook, _
FileName, FilePath As String

Application.ScreenUpdating = False

'Set email id here, it may be a range in case you have email id on your worksheet

 Sheets("Sheet1").Select
 mailId = Range("b4:b5").Value


'Write your email message body here , add more lines using & vbLf _ at the end of each line

Body = "Hello, it appears you have not yet filled out the transportation contact information excel sheet. This sheet was emailed to you, please complete this and send to me  saved as your firstnamelastname.xls at your earliest convience." & vbLf _
& vbLf _
& "Thanks & Regards" & vbLf _
& vbLf _
& "-Ryan " & vbLf _

'通过 Outlook 发送电子邮件

Set oApp = CreateObject("Outlook.Application")
Set oMail = oApp.CreateItem(0)
With oMail
    .To = mailid
    .Subject = "Transportation Committee Notice"
    .Body = Body
    '.Attachments.Add tWB.FullName
    .send
End With


End Sub

【问题讨论】:

    标签: email excel vba


    【解决方案1】:

    要复制当前代码使用的效果

    mailid = Application.InputBox(Prompt:="Select Range", Type:=8)
    

    其中Type:=8 指定返回类型Range。这会将所选范围的Value 属性返回到mailid

    交替使用

    Dim rng as Range
    Set rng = Application.InputBox(Prompt:="Select Range", Type:=8)
    mailid = rng.Value
    

    rng 然后设置为选定的范围,并且可以在使用前进行验证

    请注意,您应该添加错误处理来解决,例如用户取消输入框

    在发出InputBox 之前不要设置Application.ScreenUpdating = False,因为这会阻止用户与屏幕交互。

    顺便说一句,您的代码错误地使用了DimDim'ing 没有As 子句的变量将其声明为`Variant。
    例如

    Dim oApp, oMail As Object
    

    实际上将oApp 声明为Variant,使用

    Dim oApp As Object, oMail As Object
    

    【讨论】:

    • chris- 非常感谢你,我正在努力学习 vba,因为我继续意识到它的所有潜力。我真的很感谢你指出我犯的调光错误!
    • 克里斯,我收到一个运行时错误“数组下限必须为零”关于为什么会发生这种情况/灵魂的任何想法?
    • 错误在哪一行?如果是mailid = mailid Dim'ed 怎么样?
    • .To = mailid 是调试器突出显示的内容,mailid 没有变暗,应该是什么?
    • 由于mailid 不是Dimed,它将是一个变体。当一个范围被分配给一个变量时,变量变成一个基于 1 的二维数组(1 到行,1 到列)。您将其分配给由Outlook 创建的项目的.To 属性。我没有安装 Outlook,因此无法对其进行测试,但错误表明您需要将您的 To 列表构建为基于 0 的数组(我猜是 1 维的)我建议您使用谷歌 Outlook Object Model 查找正确的To 属性的格式。
    猜你喜欢
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多