{Excel} 多个命令按钮通过电子邮件发送不同的行
{Excel} Multiple command buttons to email different rows
我正在设置一个新的电子表格,用于记录仓库尝试入库的物品的问题。每行包含 material 编号、描述、数量、供应商和拥有供应商帐户的人员电子邮件。
当仓库团队在工作表中输入相关数据时,我希望在每一行的末尾都有一个按钮,当按下它时,它将通过电子邮件向拥有供应商帐户的人发送按钮所在的整行电子邮件(A2:O2) 用于按钮一,(A3:O3) 用于按钮二,依此类推。至少会有 2000 行需要这个。
现在我已经编写了能够执行此操作的 VBA 代码(我承认这是一种非常丑陋的方式来使行和 headers 对齐),但仅限于第一个排。我将能够为 2000 行执行此操作,但这意味着制作 2000 个按钮并更改 VBA 代码 2000 次只是为了更改单元格行。
当团队填充新行时,有没有其他方法可以完成我想要的自动电子邮件?
'''
私人订阅 Worksheet_BeforeDoubleClick
(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("O2:O10000")) Is Nothing Then [P2: P10000]
将 xOutApp 调暗为 Object
Dim xOutMail As Object
Dim xMailBody As String
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = [A1] & " " & [B1] & " " & [c1] & " " & [d1] & " " & [e1] & " " & [G1] & " " & [H1] & " " & [J1] & " " & [L1] & vbNewLine & " " & [A2] & " " & [B2] & " " & [c2] & " " & [d2] & " " & [e2] & " " & [G2] & " " & [H2] & " " & [J2] & " " & [L2]
错误继续下一步
With xOutMail
.To = [O2]
.CC = ""
.BCC = ""
.Subject = "NEW MATERIAL ADDED TO 2200 LIST"
.Body = xMailBody
.send 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
结束子
而不是按钮,您可以双击单元格。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("B6:B10000")) Is Nothing Then ' cells where u want to double click
' your code
' call your sub or function
End If
End Sub
你可以在这个单元格中放置一个符号,比如正方形或其他东西(使用 Webdings 字体),当用户双击单元格时,你会得到地址(目标)并将其发送给你的子。
祝你好运
更新:
你必须使用 target.row 创建一个带有行号的变量,就像这样
.....
If Not Intersect(Target, Range("O2:O10000")) Is Nothing Then [P2: P10000]
lineNumber=target.row
Dim xO
..
然后你必须用这个变量引用单元格。我相信短引用你不能放一个变量,所以你必须把它改成范围,比如
将 [A2] 更改为范围 ("A" & lineNumber)
将 [B2] 更改为范围 ("B" & lineNumber)
等等
祝你好运
我正在设置一个新的电子表格,用于记录仓库尝试入库的物品的问题。每行包含 material 编号、描述、数量、供应商和拥有供应商帐户的人员电子邮件。
当仓库团队在工作表中输入相关数据时,我希望在每一行的末尾都有一个按钮,当按下它时,它将通过电子邮件向拥有供应商帐户的人发送按钮所在的整行电子邮件(A2:O2) 用于按钮一,(A3:O3) 用于按钮二,依此类推。至少会有 2000 行需要这个。
现在我已经编写了能够执行此操作的 VBA 代码(我承认这是一种非常丑陋的方式来使行和 headers 对齐),但仅限于第一个排。我将能够为 2000 行执行此操作,但这意味着制作 2000 个按钮并更改 VBA 代码 2000 次只是为了更改单元格行。
当团队填充新行时,有没有其他方法可以完成我想要的自动电子邮件?
'''
私人订阅 Worksheet_BeforeDoubleClick
(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("O2:O10000")) Is Nothing Then [P2: P10000]
将 xOutApp 调暗为 Object
Dim xOutMail As Object
Dim xMailBody As String
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = [A1] & " " & [B1] & " " & [c1] & " " & [d1] & " " & [e1] & " " & [G1] & " " & [H1] & " " & [J1] & " " & [L1] & vbNewLine & " " & [A2] & " " & [B2] & " " & [c2] & " " & [d2] & " " & [e2] & " " & [G2] & " " & [H2] & " " & [J2] & " " & [L2]
错误继续下一步
With xOutMail
.To = [O2]
.CC = ""
.BCC = ""
.Subject = "NEW MATERIAL ADDED TO 2200 LIST"
.Body = xMailBody
.send 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
结束子
而不是按钮,您可以双击单元格。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("B6:B10000")) Is Nothing Then ' cells where u want to double click
' your code
' call your sub or function
End If
End Sub
你可以在这个单元格中放置一个符号,比如正方形或其他东西(使用 Webdings 字体),当用户双击单元格时,你会得到地址(目标)并将其发送给你的子。
祝你好运
更新:
你必须使用 target.row 创建一个带有行号的变量,就像这样
.....
If Not Intersect(Target, Range("O2:O10000")) Is Nothing Then [P2: P10000]
lineNumber=target.row
Dim xO
..
然后你必须用这个变量引用单元格。我相信短引用你不能放一个变量,所以你必须把它改成范围,比如
将 [A2] 更改为范围 ("A" & lineNumber)
将 [B2] 更改为范围 ("B" & lineNumber)
等等
祝你好运