2017-12-14 3 views
0

Ich bin auf der Suche nach einer Möglichkeit, E-Mails einfach zu versenden. Ich habe eine Excel-Datei, die ich jeden Tag etwa 20 Zeilen mit einer Kundennummer und Bestellnummer hinzufügen. Auch eine E-Mail-Adresse, verschiedene Themen und Gremien je nach Land. Ich benutze Lotus Notes und habe den ganzen Code eingerichtet, um eine Datei zu senden und anzuhängen. Mein Makro zum Senden von E-Mails verwendet Offsets für die aktive Zelle. Momentan klicke ich auf eine bestimmte Zelle und drücke dann eine Taste, um die E-Mail zu senden.Hyperlink oder Schaltfläche zum Ausführen von Makros mit aktiven Zellenversätzen

Allerdings möchte ich es ändern, so dass Menschen auf einen Hyperlink oder eine Schaltfläche in jeder Zeile klicken können, um die E-Mail zu erstellen. Ich habe es versucht, Tasten aus dem Formular und ActiveX-Steuerelemente, aber das machte meine Datei zu langsam.

Ich schaute dann in eine Möglichkeit, ein Makro zu aktivieren, wenn Sie auf einen Hyperlink klicken.

Ich fand dies im Internet.

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
    Select Case Target.Range.Address 
    Case "$B$3" 
    Call myMacro 
    Case Else 
    End Select 
    End Sub 

Das funktioniert aber nur für den Link in der Zelle B3. Wie mache ich es so, dass wenn ich auf einen Link in der Spalte B klicke, das Makro ausgeführt wird?

Zögern Sie nicht, lassen Sie mich wissen, wenn es auch andere Lösungen gibt.

Mit freundlichen Grüßen

Edit1:

Dies ist der Code für die E-Mail-

Sub myMacro(Target As Range) 
'Send an e-mail & attachment using Lotus Not(s) 
'Original Code by Nate Oliver (NateO) 
'Declare Variables for file and macro setup 
Dim UserName As String, MailDbName As String, Recipient As String, ccRecipient As String, Attachment1 As String 
Dim Maildb As Object, MailDoc As Object, AttachME As Object, Session As Object 
Dim EmbedObj1 As Object 
With Application 
.ScreenUpdating = False 
.DisplayAlerts = False 

' Open and locate current LOTUS NOTES User 
Set Session = CreateObject("Notes.NotesSession") 
UserName = Session.UserName 
MailDbName = _ 
Left$(UserName, 1) & Right$(UserName, (Len(UserName) - InStr(1, UserName, " "))) & ".nsf" 
Set Maildb = Session.GETDATABASE("", MailDbName) 
If Maildb.IsOpen = True Then 
Else 
Maildb.OPENMAIL 
End If 

Set MailDoc = Maildb.CreateDocument 
MailDoc.Form = "Memo" 
Recipient = Target.Offset(0, 1).Value 
MailDoc.SendTo = Recipient 
ccRecipient = Target.Offset(0, 2).Value 
MailDoc.CopyTo = ccRecipient 
MailDoc.Subject = Target.Offset(0, 3).Value 
MailDoc.Body = Target.Offset(0, 4).Value 

Dim Orderno 
Dim myPath 
Dim myFile 

Orderno = Target.Offset(0, 5).Value 
myPath = ThisWorkbook.Path & "D:\Berry\Order Confirmations\VBAtest\" 
myFile = Dir(myPath & "*" & Orderno & "*.pdf*") 
Attachment1 = (myPath & myFile) 
MsgBox (Attachment1) 
If Attachment1 <> "" Then 
On Error Resume Next 
Set AttachME = MailDoc.CREATERICHTEXTITEM("attachment1") 
Set EmbedObj1 = AttachME.embedobject(1454, "attachment1", (myPath & myFile), "") 
On Error Resume Next 
End If 

Set workspace = CreateObject("Notes.NotesUIWorkspace") 
Call workspace.EDITDOCUMENT(True, MailDoc).GOTOFIELD("Body") 

Set Maildb = Nothing 
Set MailDoc = Nothing 
Set AttachME = Nothing 
Set Session = Nothing 
Set EmbedObj1 = Nothing 

.ScreenUpdating = True 
.DisplayAlerts = True 
End With 

errorhandler1: 

Set Maildb = Nothing 
Set MailDoc = Nothing 
Set AttachME = Nothing 
Set Session = Nothing 
Set EmbedObj1 = Nothing 
+0

einfach eine Beobachtungs Frage:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) Select Case Target.Range.Column Case 2 'Two being the column number Call myMacro(Target.Range) Case Else End Select End Sub 

dann in Ihrem Makro Sie Folgendes tun könnte, wäre ist es möglich, Ihre Excel-Anwendung in eine Notes-Anwendung umzuwandeln? Keine Antwort erforderlich. –

Antwort

1

das Makro Um zu laufen, wenn alles auf Spalte B geklickt wird:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
Select Case Target.Range.Column 
    Case 2 'Two being the column number 
     Call myMacro 
    Case Else 
End Select 
End Sub 

Da Sie Offset verwenden, um die Werte für Ihre E-Mails zu erhalten, würden Sie versetzen das Ziel, die richtigen Werte zu erhalten, wenn Sie also ein Argument ot Yourmacro so etwas wie passieren waren:

Sub myMacro(Target as Range) 
    Target.offset(0,1).value 'to get the value to the right of the clicked cell  
..... 

End sub 
+0

Hiya danke für die schnelle Antwort. Das hat nicht funktioniert, es gibt 'Laufzeitfehler 438, Objekt unterstützt diese Eigenschaft oder Methode nicht' Fehler. Zeigen auf ausgewählte case target.column – Daheb

+0

Mmh, bekomme ich einen Typ nicht übereinstimmen auf dem Aufruf myMacro (Ziel) Ich habe meine E-Mail-Makro zum OP – Daheb

+0

Ich habe meine Antwort noch einmal aktualisiert, ich habe es diesmal getestet und es funktioniert für mich habe ich zufällig weggelassen .Range von Call myMacro (Target.Range) – Xabier

Verwandte Themen