Vor ein paar Wochen habe ich ein kleines Bestelltool in Excel gebaut, um die Bestellungen bei Danielz‘ Foodtruck zu vereinfachen.
Ausgangspunkt ist eine kleine Tabelle, in der die einzelnen Gerichte mit den Preisen aufgeführt sind. Über die Menge wird dann der jeweilige Preis ausgerechnet und die Summe gebildet. Es sind verschiedene Ranges definiert (für die Ziel-E-Mail-Adresse, den Standard-Betreff, etc.) die wichtigste ist aber die Auswahl-Range, die die gesamte Tabelle mit den Gerichten umfasst.

Mit ein wenig VBA wird dann die Outlook-Mail erzeugt.
Den Namen des Benutzers könnte man theoretisch per VBA.Environ("Username")
ermitteln, dies liefert aber nur das Login und nicht den Klarnamen. Dazu ist eine Abfrage des Active Directory (siehe https://technet.microsoft.com/en-us/library/2007.08.heyscriptingguy.aspx) notwendig:
Function GetUsername()
Set objAD = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objAD.UserName)
GetUsername = objUser.DisplayName
End Function |
Function GetUsername()
Set objAD = CreateObject("ADSystemInfo")
Set objUser = GetObject("LDAP://" & objAD.UserName)
GetUsername = objUser.DisplayName
End Function
Über die getOrder()
Funktion erstellen wir den String für den jeweiligen Besteller aus der Tabelle.
Function getOrder()
auswahl = Range("Auswahl")
bestellstring = "* " & GetUsername() & ": "
Order = 0
For i = 1 To UBound(auswahl)
If (auswahl(i, 3)) > 0 Then
If Order > 0 Then
bestellstring = bestellstring & ", "
End If
bestellstring = bestellstring & auswahl(i, 3) & " x " & auswahl(i, 1)
Order = 1
End If
Next i
Debug.Print bestellstring
getOrder = bestellstring
End Function |
Function getOrder()
auswahl = Range("Auswahl")
bestellstring = "* " & GetUsername() & ": "
Order = 0
For i = 1 To UBound(auswahl)
If (auswahl(i, 3)) > 0 Then
If Order > 0 Then
bestellstring = bestellstring & ", "
End If
bestellstring = bestellstring & auswahl(i, 3) & " x " & auswahl(i, 1)
Order = 1
End If
Next i
Debug.Print bestellstring
getOrder = bestellstring
End Function
Im letzten Schritt gilt es nur noch, den erzeugten String per Mail zu versenden. Hier waren die Code-Schnipsel von http://www.rondebruin.nl/win/winmail/Outlook/tips.htm sehr hilfreich. Hinweis: Der Button im Bestellformular ist an diese Sub gebunden.
Sub Mail_small_Text_Outlook()
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "Hier ist meine Bestellung:" & vbNewLine & vbNewLine & vbNewLine
body = getOrder()
If Len(Range("kommentar") > 0) Then
body = body & vbNewLine & Range("kommentar")
End If
On Error Resume Next
With OutMail
.To = Range("receiver")
.CC = ""
.BCC = ""
.Subject = Range("subject")
.body = strbody & body
.Display
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub |
Sub Mail_small_Text_Outlook()
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
strbody = "Hier ist meine Bestellung:" & vbNewLine & vbNewLine & vbNewLine
body = getOrder()
If Len(Range("kommentar") > 0) Then
body = body & vbNewLine & Range("kommentar")
End If
On Error Resume Next
With OutMail
.To = Range("receiver")
.CC = ""
.BCC = ""
.Subject = Range("subject")
.body = strbody & body
.Display
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub