电子邮件选项嵌入在提交按钮Excel VBA中
我有这个提交按钮,我想向一个人发送一封关于质量检查状态的电子邮件通知。我想发生的是,如果质量检查器勾选了一个复选框,则所有选中复选框的标题都将包含在该复选框中。邮件正文,但我不知道如何编码。这是我的提交按钮代码电子邮件选项嵌入在提交按钮Excel VBA中,vba,excel,Vba,Excel,我有这个提交按钮,我想向一个人发送一封关于质量检查状态的电子邮件通知。我想发生的是,如果质量检查器勾选了一个复选框,则所有选中复选框的标题都将包含在该复选框中。邮件正文,但我不知道如何编码。这是我的提交按钮代码 Private Sub CommandButton4_Click() If VERIFY_ENTRY = False Then Exit Sub Dim RowCounter As Long Dim rowCount As Long Dim ctrl As Cont
Private Sub CommandButton4_Click()
If VERIFY_ENTRY = False Then Exit Sub
Dim RowCounter As Long
Dim rowCount As Long
Dim ctrl As Control
Dim Score As Double
Dim num As String
Dim OutMail As Object
Dim strbody1 As String
Dim OutApp As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
RowCounter = 0
Score = 1
For Each ctrl In Me.Controls
Select Case TypeName(ctrl)
Case Is = "CheckBox"
If Me.Controls(ctrl.Name).Value = True Then Score = Score - GETSCORE(Me.Controls(ctrl.Name).Name)
End Select
Next ctrl
Me.TextBox6.Value = Format(Score, "Percent")
If MsgBox("Submit RFP results?", vbQuestion + vbYesNo, "") = vbNo Then GoTo endmacro
'Data Sheet Transfer
rowCount = Worksheets("Quality Database").Range("A1").CurrentRegion.Rows.Count
With Worksheets("Quality Database").Range("A" & rowCount + 1)
.Offset(RowCounter, 0).Value = Now()
.Offset(RowCounter, 1).Value = Me.TextBox2.Value
.Offset(RowCounter, 2).Value = Me.ComboBox1.Value
.Offset(RowCounter, 3).Value = Me.ComboBox2.Value
.Offset(RowCounter, 4).Value = Me.ComboBox3.Value
.Offset(RowCounter, 6).Value = "Initial prep/load"
.Offset(RowCounter, 9).Value = Me.ComboBox4.Value
.Offset(RowCounter, 10).Value = Round(Score * 100, 2)
.Offset(RowCounter, 11).Value = Format(Me.TextBox3.Value, "hh:mm:ss") 'Start Time
.Offset(RowCounter, 12).Value = Format(Me.TextBox4.Value, "hh:mm:ss") 'End Time
.Offset(RowCounter, 13).Value = Format(Me.TextBox5.Value, "hh:mm:ss") 'Time Spent
.Offset(RowCounter, 13).NumberFormat = "hh:mm:ss"
' Attributes Target
For Each ctrl In Me.Controls
Select Case TypeName(ctrl)
Case Is = "CheckBox"
If Me.Controls(ctrl.Name).Value = True Then
'if not other checkbox
If Me.Controls(ctrl.Name).Caption <> "Other" Then
.Offset(RowCounter, 7).Value = vbCrLf & Me.Controls(ctrl.Name).Caption
RowCounter = RowCounter + 1
Else
'get number from checkbox name
num = Mid(ctrl.Name, 9)
.Offset(RowCounter, 7).Value = vbCrLf & Me.Controls(ctrl.Name).Caption
.Offset(RowCounter, 8).Value = Me.Controls("Textbox" & num).Value
RowCounter = RowCounter + 1
End If
End If
End Select
Next ctrl
If RowCounter = 0 Then .Offset(RowCounter, 7).Value = "Everything was Completed Satisfactory!"
If Me.ComboBox4.Value = "Pending - Team Meeting" Then
.Offset(RowCounter, 7).Value = ""
.Offset(RowCounter, 10).Value = ""
End If
If Me.ComboBox4.Value = "Pending - 1st Break" Then
.Offset(RowCounter, 7).Value = ""
.Offset(RowCounter, 10).Value = ""
End If
If Me.ComboBox4.Value = "Pending - Lunch Break" Then
.Offset(RowCounter, 7).Value = ""
.Offset(RowCounter, 10).Value = ""
End If
If Me.ComboBox4.Value = "Pending - 2nd Break" Then
.Offset(RowCounter, 7).Value = ""
.Offset(RowCounter, 10).Value = ""
End If
If Me.ComboBox4.Value = "Pending - Coaching" Then
.Offset(RowCounter, 7).Value = ""
.Offset(RowCounter, 10).Value = ""
End If
End With
'MessageBox
MsgBox "Data added", vbOKOnly + vbInformation, ""
endmacro:
'Clear Data
If Me.ComboBox4.Value = "Completed" Then ' Enable Email Notification
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
With OutMail
.Display
If Me.ComboBox1.Value = "Name1" Then
.To = "name@email`enter code here`.com"
End If
If Me.ComboBox1.Value = "Name2" Then
.To = "name@email.com"
End If
If Me.ComboBox1.Value = "Name3 " Then
.To = "name@email.com"
End If
.CC = ""
.BCC = ""
.Subject = TextBox2.Value & " - Review Completed & " & Now()
.Body = "Hi," & vbCrLf & vbCrLf & "Please see comment below"
.Display 'change to .send if you want the email sent automatically
End With
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Set OutMail = Nothing
Set OutApp = Nothing
INIT_FORM
Me.TextBox2.SetFocus
'Save worksheet
ThisWorkbook.Save
End If
End Sub
Private子命令按钮4\u单击()
如果VERIFY_ENTRY=False,则退出Sub
暗排计数器与长排计数器相同
暗行数与长行数相同
按ctrl键作为控件
双杀
Dim num作为字符串
将邮件变暗为对象
作为字符串的Dim strbody1
Dim OutApp作为对象
像弦一样暗的链子
Set-OutApp=CreateObject(“Outlook.Application”)
Set-OutMail=OutApp.CreateItem(0)
行计数器=0
分数=1
对于Me.Controls中的每个ctrl键
选择案例类型名称(ctrl)
Case Is=“CheckBox”
如果Me.Controls(ctrl.Name).Value=True,那么Score=Score-GETSCORE(Me.Controls(ctrl.Name).Name)
结束选择
下一个ctrl键
Me.TextBox6.Value=格式(分数,“百分比”)
如果MsgBox(“提交RFP结果?”,vbQuestion+vbYesNo,”)=vbNo,则转到endmacro
“数据表传输”
rowCount=工作表(“质量数据库”).Range(“A1”).CurrentRegion.Rows.Count
带有工作表(“质量数据库”)。范围(“A”和行数+1)
.Offset(行计数器,0).Value=Now()
.Offset(行计数器,1).Value=Me.TextBox2.Value
.Offset(行计数器,2).Value=Me.ComboBox1.Value
.Offset(行计数器,3).Value=Me.ComboBox2.Value
.Offset(行计数器,4).Value=Me.ComboBox3.Value
.Offset(行计数器,6).Value=“初始准备/加载”
.Offset(行计数器,9).Value=Me.ComboBox4.Value
.偏移量(行计数器,10)。值=四舍五入(分数*100,2)
.Offset(RowCounter,11).Value=格式(Me.TextBox3.Value,“hh:mm:ss”)'开始时间
.Offset(行计数器,12).Value=格式(Me.TextBox4.Value,“hh:mm:ss”)'结束时间
.Offset(RowCounter,13).Value=Format(Me.TextBox5.Value,“hh:mm:ss”)所用的时间
.Offset(行计数器,13).NumberFormat=“hh:mm:ss”
'属性目标
对于Me.Controls中的每个ctrl键
选择案例类型名称(ctrl)
Case Is=“CheckBox”
如果Me.Controls(ctrl.Name).Value=True,则
'如果不是其他复选框
如果Me.Controls(ctrl.Name).Caption“Other”则
.Offset(行计数器,7).Value=vbCrLf&Me.Controls(ctrl.Name).Caption
行计数器=行计数器+1
其他的
'从复选框名称获取编号
num=Mid(ctrl.Name,9)
.Offset(行计数器,7).Value=vbCrLf&Me.Controls(ctrl.Name).Caption
.Offset(RowCounter,8).Value=Me.Controls(“Textbox”&num).Value
行计数器=行计数器+1
如果结束
如果结束
结束选择
下一个ctrl键
如果RowCounter=0,则.Offset(RowCounter,7).Value=“一切都已圆满完成!”
如果Me.ComboBox4.Value=“待定-团队会议”,则
.Offset(行计数器,7)。Value=“”
.Offset(行计数器,10).Value=“”
如果结束
如果Me.combox4.Value=“待定-第一次中断”,则
.Offset(行计数器,7)。Value=“”
.Offset(行计数器,10).Value=“”
如果结束
如果Me.ComboBox4.Value=“待定-午休”,则
.Offset(行计数器,7)。Value=“”
.Offset(行计数器,10).Value=“”
如果结束
如果Me.ComboBox4.Value=“待定-第二次中断”,则
.Offset(行计数器,7)。Value=“”
.Offset(行计数器,10).Value=“”
如果结束
如果Me.ComboBox4.Value=“待定-辅导”,则
.Offset(行计数器,7)。Value=“”
.Offset(行计数器,10).Value=“”
如果结束
以
'消息框
MsgBox“已添加数据”,vbOKOnly+vbInformation“
endmacro:
"数据清晰",
如果Me.ComboBox4.Value=“已完成”,则“启用电子邮件通知”
应用
.EnableEvents=False
.ScreenUpdate=False
以
发邮件
.展示
如果Me.ComboBox1.Value=“Name1”,则
.To=”name@email`在此处输入代码“.com”
如果结束
如果Me.ComboBox1.Value=“Name2”,则
.To=”name@email.com"
如果结束
如果Me.ComboBox1.Value=“Name3”,则
.To=”name@email.com"
如果结束
.CC=“”
.BCC=“”
.Subject=TextBox2.Value&“-Review Completed&“&Now()
.Body=“嗨,&vbCrLf&vbCrLf&”请参见下面的评论”
.显示“更改为。如果希望自动发送电子邮件,请发送”
以
应用
.EnableEvents=True
.ScreenUpdate=True
以
发送邮件=无
设置应用程序=无
初始形式
Me.TextBox2.SetFocus
'保存工作表
此工作簿。保存
如果结束
端接头
这将从表单上的每个选中复选框中提取标题
该函数使用a来检查每个控件。我曾经用新行分隔复选框,这会使最后的文本更容易阅读
' Builds and returns the email body.
Private Function GetMailBody() As String
Dim i As Integer ' Counts number of selected checkboxes.
Dim mailBody As String ' Build the email message body here.
Dim cntl As Control ' Used to loop over controls, looking for checkboxes.
' Add body.
For Each cntl In Me.Controls
' We only want checkboxes.
If TypeName(cntl) = "CheckBox" Then
' Append selected boxes caption to mailBody.
If cntl.Value = True Then
i = i + 1
mailBody = mailBody & vbCrLf & cntl.Caption
End If
End If
Next
' Update body, based on count of selected items.
If i > 1 Then
mailBody = "Opening text" & vbCrLf & mailBody & vbCrLf & "Closing text"
Else
mailBody = "No items selected."
End If
GetMailBody = mailBody
End Function
要使用此功能,请更换线路
.Body = "Hi," & vbCrLf & vbCrLf & "Please see comment below"
与
在现有代码中
编辑
更新了代码,以在未选择任何项目时包含可选文本。我很清楚您的处境。你能包括你当前得到的输出和你想要的输出吗?实际上我得到的唯一结果是.Body部分的模板消息,其中是Hi,请参阅下面的评论。正文中的附加消息应该是在所有复选框上勾选的所有标题。当然,我想说的是谢谢你;我不清楚你被困在哪里了。我关于事情不明的信息不清楚。哦,真可惜。看起来您已经创建了几个变量来构建主体(
strobody
,strobody1
),但是您没有在任何地方使用这些变量。是不是因为你不知道怎么做?或者你是在问如何访问复选框的标题?是的,关于如何在电子邮件正文中包含复选框的标题,很抱歉,我忘记删除这些变量。这太神奇了,现在我得到了我想要的结果。如果没有支票怎么办
.Body = GetMailBody()