String VBA:循环为范围内的每个单元格创建命令按钮,使用单元格特定参数调用.OnAction过程
我需要帮助编写一些循环,以便为范围内的每个单元格创建命令按钮。String VBA:循环为范围内的每个单元格创建命令按钮,使用单元格特定参数调用.OnAction过程,string,vba,button,parameters,arguments,String,Vba,Button,Parameters,Arguments,我需要帮助编写一些循环,以便为范围内的每个单元格创建命令按钮。 我实现了创建我需要的任意多个按钮。我的问题是为它们中的每一个设置.OnAction属性。 每个按钮都将通过LotusNotes向指定的地址发送电子邮件,邮件的主题和正文存储在相邻的单元格中。该代码已经生效,下面是发送电子邮件的过程: Sub Send(ByVal MailAddress, Subject, Message As String) Dim Maildb As Object Dim MailDoc As Object D
我实现了创建我需要的任意多个按钮。我的问题是为它们中的每一个设置.OnAction属性。
每个按钮都将通过LotusNotes向指定的地址发送电子邮件,邮件的主题和正文存储在相邻的单元格中。该代码已经生效,下面是发送电子邮件的过程:
Sub Send(ByVal MailAddress, Subject, Message As String)
Dim Maildb As Object
Dim MailDoc As Object
Dim Body As Object
Dim Session As Object
Set Session = CreateObject("Lotus.NotesSession")
Call Session.Initialize
'Call Session.Initialize("password")
UserName = Session.UserName
Set Maildb = Session.GetDatabase("", "C:\Lotus\Notes\Data\names.nsf")
'Set Maildb = Session.GetDatabase("", MailDbName)
If Not Maildb.IsOpen = True Then Call Maildb.Open
Set MailDoc = Maildb.CreateDocument
Call MailDoc.ReplaceItemValue("Form", "Memo")
Call MailDoc.ReplaceItemValue("SendTo", MailAddress)
Call MailDoc.ReplaceItemValue("Subject", Subject)
Set Body = MailDoc.CreateRichTextItem("Body")
Call Body.AppendText(Message)
MailDoc.SaveMessageOnSend = True
Call MailDoc.ReplaceItemValue("PostedDate", Now())
Call MailDoc.Send(False)
Set Maildb = Nothing
Set MailDoc = Nothing
Set Body = Nothing
Set Session = Nothing
End Sub
现在,我要做的是在工作簿打开时创建按钮,遍历我工作表的第一个编译列。接下来,我将在向图纸添加/删除行时添加/删除按钮。为此,我目前有以下代码:
Private Sub Workbook_Open()
Dim L As Integer
Dim t As Range
Dim btn As Button
Dim arg As String
Application.ScreenUpdating = False
ActiveSheet.Buttons.Delete
Sheets(1).Activate
L = Application.WorksheetFunction.CountA(Range("C:C"))
For i = 2 To L
Set t = ActiveSheet.Range(Cells(i, 1), Cells(i, 1))
Set btn = ActiveSheet.Buttons.Add(t.Left, t.Top + 5, t.Width, 20)
'arg = "'Invia Range("J1").Value , Cells(i, t.Column + 2).Value , Cells(i, t.Column+3).Value '"
With btn
.OnAction = arg
.Caption = "Invia"
.Name = "Btn" & i
End With
Next i
End Sub
我的问题是我无法以正确的方式写入要传递给OnAction属性的字符串。
这应该是对Send过程的调用,包含3个参数:
1) 邮件地址:在单元格J1中找到(静态)
2) 主题:在循环的当前行(i)的C列中找到
3) 正文:在循环的当前行(i)的D列中找到
不能让它工作。
我对VBA很陌生,我对所有这些引号、单引号和双引号都很着迷。有人能帮帮我吗?
Mhanks提前通知,
Marco更容易在OnAction子菜单中抓取按钮的名称(使用
Application.Caller
),然后使用该名称确定要采取的操作。在本例中,您可以解析出i
的值,然后从工作表中获取所需的信息。谢谢,这就是我要找的技巧。工作得很有魅力!这应该是普遍接受的答案。它显示了如何使用单一的'字符使一件困难的事情成为可能
arg = "'Send ""{1}"", ""{2}"", ""{3}"" '"
arg = Replace(arg,"{1}", Range("J1").Value)
arg = Replace(arg,"{2}", Cells(i, t.Column + 2).Value)
arg = Replace(arg,"{3}", Cells(i, t.Column+3).Value)
.OnAction = arg