範囲内のすべてのセルにコマンドボタンを作成するためのループを作成するのに助けが必要です。
必要な数のボタンを作成することができました。私の問題は、それぞれに.OnActionプロパティを設定することです。
すべてのボタンは、Lotus Notesを介して指定されたアドレスに電子メールを送信し、メールの件名と本文は隣接するセルに保存されます。そのコードはすでに機能しています。これがメールを送信する手順です。
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プロパティに渡す文字列を正しい方法で記述できないことです。これは、3つのパラメーターを使用してSendプロシージャを呼び出す必要があります。1)MailAddress:セルJ1(静的)にあります。2)件名:ループの現在の行(i)の列Cにあります。3)本文:列Dにあります。ループの現在の行(i)
それを動作させることができません。私はVBAにまったく慣れておらず、これらすべての引用符、一重引用符、二重引用符に夢中になっています。
誰かが親切に私を助けてくれますか?
事前にありがとう、
マルコ