0

範囲内のすべてのセルにコマンドボタンを作成するためのループを作成するのに助けが必要です。
必要な数のボタンを作成することができました。私の問題は、それぞれに.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にまったく慣れておらず、これらすべての引用符、一重引用符、二重引用符に夢中になっています。
誰かが親切に私を助けてくれますか?
事前にありがとう、
マルコ

4

1 に答える 1

2
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
于 2012-11-16T21:51:20.450 に答える