Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellenbezug zur Schaltfläche

Zellenbezug zur Schaltfläche
02.02.2023 11:08:21
Ben
Hi und Hallo zusammen,
bisher bin ich nur stiller "Mitleser" gewesen um mir bei den ein oder anderen Excellisten oder Makros etwas abzuschauenn und zu lernen.
Da ich noch recht unerfahren in VBA bin, komme ich tatsächlich mit meinem Problem alleine nicht mehr weiter und hoffe durch euch weiterzukommen.
Folgendes habe ich vor:
Da ich seit neustem die Kaffeekasse bei uns im Betrieb übernommen habe, möchte ich eine realtiv einfache und halbautomatisierte Excel Liste führen.
Hierzu möchte ich nun in der Spalte "P13" - "P32" eine Schaltfläche generieren die für den jeweiligen Mitarbeiter eine autmatiseirte Email mit den Bezügen aus den jeweiligen Zellen des Mitarbeiters verschickt.(siehe Bild)
Durch die Suchfunktion hier im Forum habe ich auch einen entsprechenden Code dafür gefunden und für meine Zwecke angepasst. (siehe Makro)
Ich hoffe ich konnte es bis hierhin gut erklären ;-)
Wenn ich die Schaltfläche nutze (habe ein Formularsteuerelemt benutzt) öffnet er auch auch Outlook und fragt ob er Zugriff bekommt oder ob ich es verweigern möchte.(siehe Bild)
Nach Erteilung erhalte ich auch tatsächlich eine Email mit allen Infos wie ich es mir vorgestellt habe.
Ich habe in der Spalte "Q" die E-Mail-Adressen der jeweiligen Kollegen hinterlegt, woher der "Empfänger" entnommen wird.
Jetzt zum eigentlichen Problem:
Ich habe im Code alle Info Bezüge händisch eingetragen, wie zum Beispiel an wenn die Email gehen soll ".to = Sheets("Kassenbuch").Range("Q16").Value, ,
oder aus welchen Zellen er welchen Wert nehmen soll.
Ich möchte jetzt nicht für jeden Button der für den Mitarbeiter steht, den Code manuell anpassen. (sonst könnte ich die Email gleich händisch erstellen)
Gibt es die Möglichkeit diese Schaltfläche zu duplizieren  und diese im VBA die Bezüge auotmatisch für die jeweilige "Reihe" übernommen werden?
Wie zum Beispiel wenn ich eine Formel für eine Zelle erstelle, kann ich diese ja auch herunterziehen und wird automatisch an die nächste "Reihe" übernommen.
Da ich den Kalender für die nächsten Monate erstellt habe, wäre eine händische Programmierung sehr sehr aufwändig.
Ich hoffe ich konnte alles gut erklären und bitte habt Nachsicht, wenn ich noch nicht jede Bezeichnung richtig weiß.
Wäre spitze wenn mir jemand Auskunft gibt, oder mich mit dem Code unterstützt.
Vielen lieben Dank im Voraus und Grüße Ben 
Hier noch der bisherige Code( hoffe ich füge es richtig ein)
Sub Engert_Klicken()
    On Error GoTo ErrHandler
    
    ' SET Outlook APPLICATION OBJECT.
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")
    
    ' CREATE EMAIL OBJECT.
    Dim objEmail As Object
    Set objEmail = objOutlook.CreateItem(olMailItem)
    With objEmail
        .to = Sheets("Kassenbuch").Range("Q16").Value
        .Subject = "Abrechnung Kaffeeliste " & Date & " "
        ' Text
.Body = "Hallo," & vbCrLf & vbCrLf & _
        "ich bitte Dich den Betrag für den letzten Monat von " & Range("N16").Text & " bei mir im Büro zu bezahlen. " & vbCrLf & _
        "Der Betrag setzte sich wie folgt zusammen: " & vbCrLf & _
        "Anzahl Kaffee: " & Range("B16").Text & vbCrLf & _
        "Anzahl Tee: " & Range("D16").Text & vbCrLf & _
        "Anzahl Softdrinks: " & Range("H16").Text & vbCrLf & _
        "Betrag offen aus Dezember 12/22: " & Range("L16").Text & vbCrLf & _
        "Guthaben Dezember 12/22: " & Range("M16").Text & vbCrLf & vbCrLf & _
        "Vielen Dank "
'                .Attachments.Add ("W:\TP\12 TPM\Übergeordnetes\Übergeordnetes\Küche TPM\2023_Kaffeekasse")
        .Send
    End With
    
    ' CLEAR.
    Set objEmail = Nothing:    Set objOutlook = Nothing
    
ErrHandler:
End Sub
Userbild
Userbild

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
siehe Bild
02.02.2023 11:29:37
Rudi
Hallo,
da sieht man fast nichts.
Schaltflächen haben eine TopLeftCell-Eigenschaft. Daraus kannst du die Zeile auslesen.
z.B.
Sub test01_Klicken()
  MsgBox ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
End Sub
Gruß
Rudi
AW: siehe Bild
02.02.2023 13:32:51
Ben
Ich komme mit dieser Info leider nicht weiter, da ich nicht genau weiß wo ich diesen Code einsetzen soll.
Ich möchte wissen wie ich eine Schaltfläche duliziere und aber der Inhalt des Makros sich auf die nächste Reihe anpasst und die Infos sich aus den Zellen nimmt.
Vorher war wir in meinem Code steht der Quellbezug für die Email "Q16" die Schaltfläche ist auf "P16"der Text aus verschiedenen Zellen stammte aus "B16" .
Ich möchte nun das wenn ich eine Schaltfläche eine Reihe weiter unten kopiere oder dupliziere in "P17", er Automatisch die Bezüge aus der Reihe 17 nimmt, wie zum Beispiel "B17" (siehe angehängten Code im Hauptthread.
Hoffe ich konnte es verständlich erklären.
Userbild
Anzeige
AW: siehe Bild
02.02.2023 13:53:12
Rudi
Hallo,
diese Prozedur einem Button zuweisen und den dann x-mal kopieren.
Sub SendEMail()
      On Error GoTo ErrHandler
      Dim objOutlook As Object
      Dim objEmail As Object
      Dim lngRow As Long
      
      lngRow = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
      ' SET Outlook APPLICATION OBJECT.
      Set objOutlook = CreateObject("Outlook.Application")
      
      ' CREATE EMAIL OBJECT.
      Set objEmail = objOutlook.CreateItem(olMailItem)
  
      With objEmail
          .to = Sheets("Kassenbuch").Range("Q" & lngRow).Value
          .Subject = "Abrechnung Kaffeeliste " & Date & " "
          ' Text
          .Body = "Hallo," & vbCrLf & vbCrLf & _
          "ich bitte Dich den Betrag für den letzten Monat von " & Range("N" & lngRow).Text & " bei mir im Büro zu bezahlen. " & vbCrLf & _
          "Der Betrag setzte sich wie folgt zusammen: " & vbCrLf & _
          "Anzahl Kaffee: " & Range("B" & lngRow).Text & vbCrLf & _
          "Anzahl Tee: " & Range("D" & lngRow).Text & vbCrLf & _
          "Anzahl Softdrinks: " & Range("H" & lngRow).Text & vbCrLf & _
          "Betrag offen aus Dezember 12/22: " & Range("L16").Text & vbCrLf & _
          "Guthaben Dezember 12/22: " & Range("M" & lngRow).Text & vbCrLf & vbCrLf & _
          "Vielen Dank "
  '        .Attachments.Add ("W:\TP\12 TPM\Übergeordnetes\Übergeordnetes\Küche TPM\2023_Kaffeekasse")
          .Send
      End With
      
      ' CLEAR.
      Set objEmail = Nothing:    Set objOutlook = Nothing
      
ErrHandler:
  
  End Sub
Ich würde das aber ohne Buttons machen. Evtl. per Doppelklick in eine bestimmte Spalte.
Gruß
Rudi
Anzeige
AW: siehe Bild
02.02.2023 14:58:02
Ben
Hey Rudi,
vielen Dank erstmal für deine tolle Unterstützung, bin echt sehr dankbar.
Habe den geänderten Code nun eingefügt und ein neuen Butto angelegt,leider passiert nichts mehr. Es kommt auch kein Dialog zur Abfrage ob ich den Zugriff erlauben möchte.
Du meintest ich soll das per Doppelklick machen, wie muss ich mir das genau vorstellen?
Würd gerne in der Spalte "P" bei "Mail versenden "hinter jedem Betrag gerne diese Möglichkeit die du genannt hast nutzen.
So das ich Benutzer " Rudi" aus Zeile 13 mit dem "Betrag Gesamt" (6,60€ aus Zelle N13 mit dem Doppelklick in Zelle P13 eine Mail verschicke.
Könntest du mir bei der Umsetzung helfen?
Vilen Dank nochmals
Userbild
Anzeige
AW: siehe Bild
02.02.2023 14:59:44
Ben
Hey Rudi,
vielen Dank erstmal für deine tolle Unterstützung, bin echt sehr dankbar.
Habe den geänderten Code nun eingefügt und ein neuen Butto angelegt,leider passiert nichts mehr. Es kommt auch kein Dialog zur Abfrage ob ich den Zugriff erlauben möchte.
Du meintest ich soll das per Doppelklick machen, wie muss ich mir das genau vorstellen?
Würd gerne in der Spalte "P" bei "Mail versenden "hinter jedem Betrag gerne diese Möglichkeit die du genannt hast nutzen.
So das ich Benutzer " Rudi" aus Zeile 13 mit dem "Betrag Gesamt" (6,60€ aus Zelle N13 mit dem Doppelklick in Zelle P13 eine Mail verschicke.
Könntest du mir bei der Umsetzung helfen?
Vilen Dank nochmals
Userbild
Anzeige
per Doppelklick
02.02.2023 15:14:15
Rudi
Hallo,
im Klassenmodul des Blatts:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Column = 16 Then
    Cancel = True
    Call SendMail(Target.Row)
  End If
End Sub
In einem allg. Modul:

 Sub SendEMail(lngRow As Long)
      On Error GoTo ErrHandler
      Dim objOutlook As Object
      Dim objEmail As Object
      
      ' SET Outlook APPLICATION OBJECT.
      Set objOutlook = CreateObject("Outlook.Application")
      
      ' CREATE EMAIL OBJECT.
      Set objEmail = objOutlook.CreateItem(olMailItem)
  
      With objEmail
          .to = Sheets("Kassenbuch").Range("Q" & lngRow).Value
          .Subject = "Abrechnung Kaffeeliste " & Date & " "
          ' Text
          .Body = "Hallo," & vbCrLf & vbCrLf & _
          "ich bitte Dich den Betrag für den letzten Monat von " & Range("N" & lngRow).Text & " bei mir im Büro zu bezahlen. " & vbCrLf & _
          "Der Betrag setzte sich wie folgt zusammen: " & vbCrLf & _
          "Anzahl Kaffee: " & Range("B" & lngRow).Text & vbCrLf & _
          "Anzahl Tee: " & Range("D" & lngRow).Text & vbCrLf & _
          "Anzahl Softdrinks: " & Range("H" & lngRow).Text & vbCrLf & _
          "Betrag offen aus Dezember 12/22: " & Range("L16").Text & vbCrLf & _
          "Guthaben Dezember 12/22: " & Range("M" & lngRow).Text & vbCrLf & vbCrLf & _
          "Vielen Dank "
  '        .Attachments.Add ("W:\TP\12 TPM\Übergeordnetes\Übergeordnetes\Küche TPM\2023_Kaffeekasse")
          .Send
      End With
      
      ' CLEAR.
      Set objEmail = Nothing:    Set objOutlook = Nothing
      
ErrHandler:
  
  End Sub
Gruß
Rudi
Anzeige
AW: per Doppelklick
02.02.2023 15:31:18
Ben
Hey Rudi,
danke nochmals für die tolle und sehrt schnelle Hilfe. Der erste Code funktioniert übrigens auch, ich hatte versehntlich noch eine alte Zuweisung drin.
Freue mich ein Teil von dieser Community zu sein und ggfs. künftig auch andere Unterstützen zu können.
Grüße an Dich Rudi, sowie allen anderen die diesen Thread aufgreifen und dadurch Hilfe erlangen.
Grüße Ben

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige