Vba 在一张Excel工作表中合并2 x私有子工作表_更改(ByVal目标作为范围)有困难
我已经成功地编写了两个宏来根据工作表中的单元格值自动发送电子邮件(基本上作为提醒系统)。这些范围重叠,其中一个子单元用于在单元格达到值0时发送电子邮件,另一个子单元的单元格范围较小,用于在单元格报告的范围在1到5(包括1和5)之间时发送电子邮件 我可以让潜艇单独工作没有问题,但我难以置信的有限知识在试图合并两者时被弄糊涂了。要么根本不起作用,要么只是部分起作用 如果有人能帮助我,我会非常感激,因为我有点不知所措!两个接头的代码如下所示:Vba 在一张Excel工作表中合并2 x私有子工作表_更改(ByVal目标作为范围)有困难,vba,excel,Vba,Excel,我已经成功地编写了两个宏来根据工作表中的单元格值自动发送电子邮件(基本上作为提醒系统)。这些范围重叠,其中一个子单元用于在单元格达到值0时发送电子邮件,另一个子单元的单元格范围较小,用于在单元格报告的范围在1到5(包括1和5)之间时发送电子邮件 我可以让潜艇单独工作没有问题,但我难以置信的有限知识在试图合并两者时被弄糊涂了。要么根本不起作用,要么只是部分起作用 如果有人能帮助我,我会非常感激,因为我有点不知所措!两个接头的代码如下所示: Private Sub Worksheet_Change(
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("D122:D128,D131:D133,D138,D140,D144,D188,D191:D192,D217:D220,D294,D159:D167"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value > 0 Then
If IsNumeric(Target.Value) And Target.Value < 6 Then
zRow = Target.Row
zValno = Cells(zRow, "B")
zValname = Cells(zRow, "C")
zValInno = Cells(zRow, "D")
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = ""
strbody = strbody & "Please be advised that " & zValno & " (" & zValname & ") " & "is now low. This value is now " & zValInno & "."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
On Error Resume Next
With OutMail
.to = "abc@anyoldemail.com"
.CC = ""
.BCC = ""
.Subject = "LOW VALUE: " & zValno & " is now low."
.Body = strbody
.Attachments.Add ("C:\reportlog.txt")
.Send
End With
On Error GoTo 0
zSent = zSent + 1
saywhat = "processing " & zSent & " of " & zCount
Application.StatusBar = saywhwat
Application.StatusBar = ""
Set OutMail = Nothing
Set OutApp = Nothing
End If
End If
End If
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Cells.Count>1,则退出Sub
如果不是应用程序,则Intersect(范围(“D122:D128,D131:D133,D138,D140,D144,D188,D191:D192,D217:D220,D294,D159:D167”),目标)将不存在
如果IsNumeric(Target.Value)和Target.Value>0,则
如果是数字(Target.Value)且Target.Value<6,则
zRow=Target.Row
zValno=电池(zRow,“B”)
zValname=单元格(zRow,“C”)
zValInno=单元(zRow,“D”)
Dim OutApp作为对象
将邮件变暗为对象
像弦一样暗的链子
Set-OutApp=CreateObject(“Outlook.Application”)
Set-OutMail=OutApp.CreateItem(0)
strbody=“”
strbody=strbody&“请注意,”&zValno&“(“&zValname&”)&“现在为低。此值现在为“&zvalino&”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
出错时继续下一步
发邮件
.to=”abc@anyoldemail.com"
.CC=“”
.BCC=“”
.Subject=“低值:”&zValno&“现在为低值。”
.车身=车身
.Attachments.Add(“C:\reportlog.txt”)
.发送
以
错误转到0
zSent=zSent+1
saywhat=“处理”&zSent&“of”&zCount
Application.StatusBar=saywhwat
Application.StatusBar=“”
发送邮件=无
设置应用程序=无
如果结束
如果结束
如果结束
端接头
及
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Cells.Count>1,则退出Sub
如果不是,则Application.Intersect(范围(“D4:D100,G4:G100,J4:J99”),Target)什么都不是
如果是数字(Target.Value)且Target.Value<1,则
zRow=Target.Row
zValno=电池(zRow,“B”)
zValname=单元格(zRow,“C”)
Dim OutApp作为对象
将邮件变暗为对象
像弦一样暗的链子
Set-OutApp=CreateObject(“Outlook.Application”)
Set-OutMail=OutApp.CreateItem(0)
strbody=“”
strbody=strbody&“请注意,”&zValno&“(“&zValname&”)&“现在报告为零。”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
出错时继续下一步
发邮件
.to=”abc@anyoldemail.com"
.CC=“”
.BCC=“”
.Subject=“空警报:”&zValno&“现在报告为零。”
.车身=车身
.Attachments.Add(“C:\reportlog.txt”)
.发送
以
错误转到0
zSent=zSent+1
saywhat=“处理”&zSent&“of”&zCount
Application.StatusBar=saywhwat
Application.StatusBar=“”
发送邮件=无
设置应用程序=无
如果结束
如果结束
端接头
这是蛮力方法,但我认为您的代码可以缩短,因为有一些共性
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("D122:D128,D131:D133,D138,D140,D144,D188,D191:D192,D217:D220,D294,D159:D167"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value > 0 Then
If IsNumeric(Target.Value) And Target.Value < 6 Then
zRow = Target.Row
zValno = Cells(zRow, "B")
zValname = Cells(zRow, "C")
zValInno = Cells(zRow, "D")
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = ""
strbody = strbody & "Please be advised that " & zValno & " (" & zValname & ") " & "is now low. This value is now " & zValInno & "."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
On Error Resume Next
With OutMail
.to = "abc@anyoldemail.com"
.CC = ""
.BCC = ""
.Subject = "LOW VALUE: " & zValno & " is now low."
.Body = strbody
.Attachments.Add ("C:\reportlog.txt")
.Send
End With
End If
End If
ElseIf Not Application.Intersect(Range("D4:D100,G4:G100,J4:J99"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value < 1 Then
zRow = Target.Row
zValno = Cells(zRow, "B")
zValname = Cells(zRow, "C")
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = ""
strbody = strbody & "Please be advised that " & zValno & " (" & zValname & ") " & "is now reporting nil."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
On Error Resume Next
With OutMail
.to = "abc@anyoldemail.com"
.CC = ""
.BCC = ""
.Subject = "NULL ALERT: " & zValno & " is now reporting nil."
.Body = strbody
.Attachments.Add ("C:\reportlog.txt")
.Send
End With
End If
End If
On Error GoTo 0
zSent = zSent + 1
saywhat = "processing " & zSent & " of " & zCount
Application.StatusBar = saywhwat
Application.StatusBar = ""
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果Target.Cells.Count>1,则退出Sub
如果不是应用程序,则Intersect(范围(“D122:D128,D131:D133,D138,D140,D144,D188,D191:D192,D217:D220,D294,D159:D167”),目标)将不存在
如果IsNumeric(Target.Value)和Target.Value>0,则
如果是数字(Target.Value)且Target.Value<6,则
zRow=Target.Row
zValno=电池(zRow,“B”)
zValname=单元格(zRow,“C”)
zValInno=单元(zRow,“D”)
Dim OutApp作为对象
将邮件变暗为对象
像弦一样暗的链子
Set-OutApp=CreateObject(“Outlook.Application”)
Set-OutMail=OutApp.CreateItem(0)
strbody=“”
strbody=strbody&“请注意,”&zValno&“(“&zValname&”)&“现在为低。此值现在为“&zvalino&”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
strbody=strbody&vbCr&vbCr
strbody=strbody&“等等,等等,等等。”
出错时继续下一步
发邮件
.to=”abc@anyoldemail.com"
.CC=“”
.BCC=“”
.Subject=“低值:”&zValno&“现在为低值。”
.车身=车身
.Attachments.Add(“C:\reportlog.txt”)
.发送
以
如果结束
如果结束
埃尔塞夫
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("D122:D128,D131:D133,D138,D140,D144,D188,D191:D192,D217:D220,D294,D159:D167"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value > 0 Then
If IsNumeric(Target.Value) And Target.Value < 6 Then
zRow = Target.Row
zValno = Cells(zRow, "B")
zValname = Cells(zRow, "C")
zValInno = Cells(zRow, "D")
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = ""
strbody = strbody & "Please be advised that " & zValno & " (" & zValname & ") " & "is now low. This value is now " & zValInno & "."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
On Error Resume Next
With OutMail
.to = "abc@anyoldemail.com"
.CC = ""
.BCC = ""
.Subject = "LOW VALUE: " & zValno & " is now low."
.Body = strbody
.Attachments.Add ("C:\reportlog.txt")
.Send
End With
End If
End If
ElseIf Not Application.Intersect(Range("D4:D100,G4:G100,J4:J99"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value < 1 Then
zRow = Target.Row
zValno = Cells(zRow, "B")
zValname = Cells(zRow, "C")
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = ""
strbody = strbody & "Please be advised that " & zValno & " (" & zValname & ") " & "is now reporting nil."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
On Error Resume Next
With OutMail
.to = "abc@anyoldemail.com"
.CC = ""
.BCC = ""
.Subject = "NULL ALERT: " & zValno & " is now reporting nil."
.Body = strbody
.Attachments.Add ("C:\reportlog.txt")
.Send
End With
End If
End If
On Error GoTo 0
zSent = zSent + 1
saywhat = "processing " & zSent & " of " & zCount
Application.StatusBar = saywhwat
Application.StatusBar = ""
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim mailSubject As String '<-- added this String variable to differ on 2 scenarios
Dim EmailType As Long '<-- use variable to see if passed the 2 criterias in the original code
EmailType = 0 '<-- init value
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("D122:D128,D131:D133,D138,D140,D144,D188,D191:D192,D217:D220,D294,D159:D167"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value > 0 And Target.Value < 6 Then
EmailType = 1 '<-- Email Type = 1
End If
End If
If Not Application.Intersect(Range("D4:D100,G4:G100,J4:J99"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value < 1 Then
EmailType = 2 '<-- Email Type = 2
End If
End If
If EmailType = 0 Then Exit Sub '< didn't pass any of the criterias >> Exit Sub
zValno = Range("B" & Target.Row)
zValname = Range("C" & Target.Row)
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Select Case EmailType
Case 1
zValInno = Cells("D" & Target.Row) '<-- this value exists on for Email Type 1
mailSubject = "LOW VALUE: " & zValno & " is now low." '<-- mail subject for email type 1
strbody = ""
strbody = strbody & "Please be advised that " & zValno & " (" & zValname & ") " & "is now low. This value is now " & zValInno & "."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
Case 2
mailSubject = "NULL ALERT: " & zValno & " is now reporting nil." '<-- mail subject for email type 2
strbody = ""
strbody = strbody & "Please be advised that " & zValno & " (" & zValname & ") " & "is now reporting nil."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
strbody = strbody & vbCr & vbCr
strbody = strbody & "Blah, blah, blah."
End Select
' ======= from here untill the end the same code, just using different values found per Email Type =======
On Error Resume Next
With OutMail
.to = "abc@anyoldemail.com"
.CC = ""
.BCC = ""
.Subject = mailSubject
.Body = strbody
.Attachments.Add ("C:\reportlog.txt")
.Send
End With
On Error GoTo 0
zSent = zSent + 1
saywhat = "processing " & zSent & " of " & zCount
Application.StatusBar = saywhat
Application.StatusBar = ""
Set OutMail = Nothing
Set OutApp = Nothing
End Sub