62 Aufrufe
Gefragt in Tabellenkalkulation von benny111081 Einsteiger_in (35 Punkte)
Bearbeitet von benny111081
Hallo zusammen,

ich bin ein Neuling im Bereich VBA.

Ich bin bisher relativ gut durchgekommen, aber bleibe bei der Überprüfung von Pflichtfeldern hängen.

Meine Excel wird in eine PDF generiert mit Betreffzeile. Jetzt wollte ich Pflichtfelder einbauen, das Überprüfen funktioniert, wenn ein Feld nicht gefüllt ist, meckert er, aber wenn alle Felder gefüllt sind, dann gehts nicht weiter zum Senden der E-Mail.

Und wie bring ich Kontrollkästchen in den Code die ich über Entwicklertools einfügen, eingebaut habe?

Hier mein Code, mit der bitte um Überprüfung

Sub e_Mail()
 
'** Dimensionierung der Variablen
Dim strPDF As String
Dim OutlookApp As Object, strEmail As Object
 
'** Vorgaben definieren
Set OutlookApp = CreateObject("Outlook.Application")
Set strEmail = OutlookApp.CreateItem(0)
 
'** PDF erzeugen
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
  ThisWorkbook.Path & "\Excel-File.pdf", Quality:=xlQualityStandard _
  , IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish _
  :=False
  
  '**Sub Pruefung()
  
   Dim rngZelle As Range
   Dim rngBereich As Range
   Dim strZelle As String
   Set rngBereich = Union(Range("F5"), Range("M5"), Range("F15"), Range("J15"), Range("M15"), Range("P15"), Range("R15"), Range("L18"), Range("L19"), Range("F25"), Range("J25"), Range("N25"), Range("P25")) '<== hier alle Prüfzellen einbinden
   For Each rngZelle In rngBereich
      If rngZelle = "" Then strZelle = strZelle & vbLf & rngZelle.Address
   Next rngZelle
   If strZelle <> "" Then MsgBox "Bitte alle Pflichtfelder ausfüllen, ansonsten kann ihr Antrag nicht bearbeitet werden:", vbAbortRetry
   
  
   Exit Sub
   
   '** E-Mail versenden
strPDF = ThisWorkbook.Path & "\Excel-File.pdf"
With strEmail
  xxxx
  .To = "
  .Subject = Worksheets("Tabelle1").Range("F25").Value & " " & Range("G134").Value & " " & Range("N25").Value & " " & Range("H134").Value & " " & Range("P25").Value & " " & Range("G134").Value & " " & Range("M5").Value & " " & Range("A134").Value & " " & Range("F15").Value & " " & Range("D134").Value & " " & Range("F41").Value
  .Body = "In Anlage befindet sich ein Antrag auf Fremdfirmenausweis."
  .Attachments.Add strPDF
  .Display
  '.Send 'Damit wir die E-Mail sofort versendet
  Kill strPDF
End With
   
'** Objektvariablen wieder löschen
Set OutlookApp = Nothing
Set strEmail = Nothing
End Sub

3 Antworten

0 Punkte
Beantwortet von m-o Profi (20.4k Punkte)

Hallo Benny,

ich habe nur mal über deinen Code geschaut. Nach der Prüfung, ob alle Pflichtfelder ausgefüllt sind, hast du ein Exit Sub eingebaut. Daher wird der Senden-Code gar nicht mehr ausgeführt.

Ändere den Code

  If strZelle <> "" Then MsgBox "Bitte alle Pflichtfelder ausfüllen, ansonsten kann ihr Antrag nicht bearbeitet werden:", vbAbortRetry
   Exit Sub

in

  If strZelle <> "" Then

     MsgBox "Bitte alle Pflichtfelder ausfüllen, ansonsten kann ihr Antrag nicht bearbeitet werden:", vbAbortRetry
     Exit Sub

End If

Willst du Checkboxen abfragen? Das kannst du so machen:

If CheckBox1 = True Then MsgBox "Hallo"

Wobei True bedeutet, dass ein Haken gesetzt ist.

Gruß

M.O.

0 Punkte
Beantwortet von benny111081 Einsteiger_in (35 Punkte)
Bearbeitet von benny111081
Hallo M.O,

vielen dank, das hat mir geholfen.

Nun hab ich die Checkbox 81, aber diese findet er nicht :-( wo muss ich den Befehl hin setzen bzw. wie schreib ich ihn, da ich mehrere Boxen habe.

Sub e_Mail()
 
'** Dimensionierung der Variablen
Dim strPDF As String
Dim OutlookApp As Object, strEmail As Object
 
'** Vorgaben definieren
Set OutlookApp = CreateObject("Outlook.Application")
Set strEmail = OutlookApp.CreateItem(0)
 
'** PDF erzeugen
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
  ThisWorkbook.Path & "\Excel-File.pdf", Quality:=xlQualityStandard _
  , IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish _
  :=False
  
  '**Sub Pruefung()
  
   Dim rngZelle As Range
   Dim rngBereich As Range
   Dim strZelle As String
   Set rngBereich = Union(Range("F5"), Range("M5"), Range("F15"), Range("J15"), Range("M15"), Range("P15"), Range("R15"), Range("L18"), Range("L19"), Range("F25"), Range("J25"), Range("N25"), Range("P25")) '<== hier alle Prüfzellen einbinden
   For Each rngZelle In rngBereich
      If rngZelle = "" Then strZelle = strZelle & vbLf & rngZelle.Address
   Next rngZelle
   

    
    If strZelle <> "" Then

     MsgBox "Bitte alle Pflichtfelder ausfüllen, ansonsten kann ihr Antrag nicht bearbeitet werden:", vbAbortRetry
     Exit Sub
     
    
     
End If

'**Sub Frage CheckBox81_Click()

If CheckBox81 = True Then
MsgBox "Checkbox Häkchen gesetzt!"
Else
MsgBox "Checkbox Häkchen nicht gesetzt!"
Exit Sub

End If

   
   
 

'** E-Mail versenden
strPDF = ThisWorkbook.Path & "\Excel-File.pdf"
With strEmail
  
  .To = "xxxxx
  .Subject = Worksheets("Tabelle1").Range("F25").Value & " " & Range("G134").Value & " " & Range("N25").Value & " " & Range("H134").Value & " " & Range("P25").Value & " " & Range("G134").Value & " " & Range("M5").Value & " " & Range("A134").Value & " " & Range("F15").Value & " " & Range("D134").Value & " " & Range("F41").Value
  .Body = "In Anlage befindet sich ein Antrag auf Fremdfirmenausweis."
  .Attachments.Add strPDF
  .Display
  '.Send 'Damit wir die E-Mail sofort versendet
  Kill strPDF
End With
   
'** Objektvariablen wieder löschen
Set OutlookApp = Nothing
Set strEmail = Nothing
End Sub
0 Punkte
Beantwortet von m-o Profi (20.4k Punkte)
Bearbeitet von m-o

Hallo Benny,

falls du ein Kontrollkästchen (Formularsteuerlement) eingefügt hast, dann kannst du den Wert so abfragen:

If ActiveSheet.CheckBoxes("Kontrollkästchen 2").Value = 1 Then MsgBox "aktiviert"

Falls du eine Checkbox (ActiveX-Steuerelement) eingefügt hast, dann schau mal, ob der Name der Checkbox richtig geschrieben ist.

Falls du die Checkbox in ein Arbeitsblatt eingefügt hast, dann probiere mal eine der folgenden Abfragen:

If ActiveSheet.CheckBox1 = True Then MsgBox "Checkbox aktiviert"

If Worksheets("Tabelle1").CheckBox1 = True Then MsgBox "Checkbox aktiviert"

Den Blattnamen sowie den Namen des Kontrollkästchens und der Checkboxen musst du natürlich auf deine Verhältnisse anpassen.

Ansonsten erkläre mal, wie du dir das mit den Checkboxen vorstellst bzw. was du erreichen willst.

Gruß

M.O.

...