Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1136to1140
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

Tabelle per Mail versenden

Tabelle per Mail versenden
liese
Hallo,
habe folgendes Anliegen.
Ich möchte gerne, wenn eine Mappe geöffnet wird,
eine bestimmte Tabelle im Hintergrund mit dem
Standardmailprogramm ohne Rückfragen versenden.
Wie geht das.
Danke schon mal für Hilfe.
Viele Grüsse
Anneliese
AW: Tabelle per Mail versenden
liese
Hallo Sepp!
Mei änglisch is nott so...
schäm
Viele Grüße
Anneliese
AW: Tabelle per Mail versenden
liese
Hallo Sepp und die anderen Helfer!
Habe mich jetzt doch mal mit meinem miesen ääänglisch
an den Link getraut und war schon ein wenig erfolgreich.
Siehe Datei.
https://www.herber.de/bbs/user/68126.xls
Kann jemand den Code so anpassen, dass nicht das
aktive Sheet, sondern z.B. Tabelle5, die auch noch auf
verryhidden gesetzt ist, gesendet wird?
Wäre für Hilfe dankbar.
Viele Grüße
Anneliese
Anzeige
AW: Tabelle per Mail versenden
Reinhard
Hallo Anneliese,
ersetze
ActiveSheet.Copy
durch
Worksheets("Tabelle5").Copy
Gruß
Reinhard
AW: Tabelle per Mail versenden
liese
Hallo Reinhard,
danke für die Hilfe.
In einer Beispieldatei klappt es wunderbar.
In meinem Originalprojekt bekomme ich die Fehlermeldung 1004,
die Copy-Methode des Worksheet-Objektes konnte nicht ausgeführt werden.
Habe schon versucht, den Blattschutz vorm kopieren auszuschalten.
Das war es aber wohl nicht.
Lässt es sich vermeiden, dass das Mailprogramm sichtbar geöffnet wird,
bzw. als offenes Anwendungsfenster zurückbleibt?
Viele Grüße
Anneliese
Anzeige
AW: Tabelle per Mail versenden
Reinhard
Moin Anneliese,
probiers mal so:
Dim Merker
With ThisWorkbook.Worksheets("Tabelle5")
Merker = .Visible
.Visible = True
.Copy
.Visible = Merker
End With

Gruß
Reinhard
AW: Tabelle per Mail versenden
liese
Hallo Reinhard,
jetzt funzt es.
Bleibt noch meine Frage offen:
wie lässt es sich vermeiden, dass das Mailprogramm sichtbar geöffnet wird,
bzw. als offenes Anwendungsfenster zurückbleibt?
Hast Du oder weiterer Könner eine Idee?
Viele Grüße
Anneliese
AW: Tabelle per Mail versenden
Reinhard
hallo Anneliese,
welches Mailprogramm? Outlook?
Gruß
Reinhard
AW: Tabelle per Mail versenden
Reinhard
Hallo Anneliese,
oder nimm gleich Outlook zum Senden.
Nicht weil ich es mag, es wird halt von MS gut unterstützt im Gegensatz zu Fremdprodukten :-(
Gib mal hier oben in das linke Eingabefenster Outlook ein, dann Enter, da wirste reichlich fündig und es ist auf Deutsch *lächel*
Gruß
Reinhard
Anzeige
AW: Tabelle per Mail versenden
liese
Hallo Reinhard,
trotz *lächel*, meine Firma nutzt eine andere Software.
Deshalb wieder die Frage, wie vermeide ich beim benannten
Vorgang das sichtbare öffnen des Standardbrowserprogramms?
Viele Grüße
Anneliese
AW: Tabelle per Mail versenden
liese
Hallo Reinhard,
trotz *lächel*, meine Firma nutzt eine andere Software.
Deshalb wieder die Frage, wie vermeide ich beim benannten
Vorgang das sichtbare öffnen des Standardbrowserprogramms?
Viele Grüße
Anneliese
AW: Tabelle per Mail versenden
Reinhard
Hallo Anneliese,
okay, dann schiessen wir per API dieses Fenster ab.
Wie heißt der genaue Titel des Fensters dieses Programmes?
Und vergeß kein Leerzeichen o.ä., den ganz exakten Titel braucht man/ich/du *gg*
Starte mal das Mailprogramm, dann laß in einer neuen leeren Mappe den nachfolgenden Code laufen.
Option Explicit
Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As  _
Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long,  _
ByVal wIndx As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal  _
hWnd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long,  _
ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, _
ByVal lpWindowName As Long) As Long
Const GW_HWNDFIRST = 0
Const GW_HWNDNEXT = 2
Const GWL_STYLE = (-16)
Const WS_VISIBLE = &H10000000
Const WS_BORDER = &H800000
Public Sub GetWindowList()
Dim hWnd As Long, sTitle As String, lStyle As Long, Task_name() As String
Dim count As Integer, index As Integer, gefunden As Boolean
hWnd = FindWindow(ByVal 0&, ByVal 0&)
hWnd = GetWindow(hWnd, GW_HWNDFIRST)
Do
gefunden = False
lStyle = GetWindowLong(hWnd, GWL_STYLE)
lStyle = lStyle And (WS_VISIBLE Or WS_BORDER)
sTitle = GetWindowTitle(hWnd)
If (lStyle = (WS_VISIBLE Or WS_BORDER)) = True Then
If Trim(sTitle)  "" Then
For index = 1 To count
If Task_name(index) = sTitle Then
gefunden = True
Exit For
End If
Next index
If Not gefunden Then
count = count + 1
ReDim Preserve Task_name(1 To count)
Task_name(count) = sTitle
End If
End If
End If
hWnd = GetWindow(hWnd, GW_HWNDNEXT)
Loop Until hWnd = 0
For index = 1 To count
Cells(index + 1, 1) = Task_name(index)
'MsgBox Task_name(index)
Next index
End Sub
Private Function GetWindowTitle(ByVal hWnd As Long) As String
Dim lResult As Long, sTemp As String
lResult = GetWindowTextLength(hWnd) + 1
sTemp = Space(lResult)
lResult = GetWindowText(hWnd, sTemp, lResult)
GetWindowTitle = Left(sTemp, Len(sTemp) - 1)
End Function

Gruß
Reinhard
Anzeige
AW: Tabelle per Mail versenden
liese
Hallo Reinhard,
habe den Code voll verstanden ?!?!?!?
Hier die Ausgabe in einer neuen Mappe:
Microsoft Visual Basic - Mappe1 [Aktiv] - [Modul1 (Code)]
Microsoft Excel - Mappe1
Posteingang von 123@abc.de - Thunderbird
Herbers Excel-Forum - ExcelMeetingPoint - Windows Internet Explorer
D:\
Anmerkung: in der Firma wird Groupwise eingesetzt.
Hoffe, Du kannst weiter helfen.
Viele Grüße
Anneliese
Groupwise? Thunderbird?
Reinhard
Hallo Anneliese,
ach, der Code ist nicht von mir und APIs verstehe ich nicht, ich benutze sie, gnauer ich benutze Code wo andere APIs verwenden :-)
Übrigens, es ist nie ratsam Emailadressen in Foren sichtbar zu machen. Dieser "anpap" wird jetzt auf ewig von jeder Suchmaschine gefunden die gezielt emailadressen sucht um zu spammen.
Wenn du das nicht willst, mail an Hans den Betreiber des Forums und bitte ihn das zu schwärzen o.ä.
So wie das aussieht ist Thunderbird dein Standardmailprogramm. Jetz verstehe ich das mit Groupwise nicht, da ich gar nicht weiß was das genau ist, deshalb Frage noch offen.
Machen wir es bitte mal anders. Nimm den anderen Code der die Mail sendet und sende.
Du sagst dann wäre das Mailprogramm anschließend noch offen. In diesem Moment lasse mal meinen Code laufen zur Ermittlung der Fenstertitel.
Microsoft Visual Basic - Mappe1 [Aktiv] - [Modul1 (Code)]
Microsoft Excel - Mappe1
Herbers Excel-Forum - ExcelMeetingPoint - Windows Internet Explorer
D:\
sind uninteressant, wichtig ist alles Andere wie:
Posteingang von abc@xyz.de - Thunderbird
Zeige das mal und anonymisiere ggfs. die Mailadresse wie ich es tat.
Wnn alles gut läuft kriegste du dann eine Lösung die sich auf abc@xyz.de bezieht, wo du dann bei dir den richtigen Namen einsetzen mußt.
Gruß
Reinhard
Anzeige
AW: Tabelle per Mail versenden
Josef
Hallo Anneliese,

warum nicht gleich einen Code, der unabhängig vom Mailprogramm läuft, und wo kein Fenster eingeblendet wird?
http://www.rondebruin.nl/cdo.htm

Gruß Sepp

AW: Tabelle per Mail versenden
liese
Hallo Sepp,
wäre ja genial.
Aber der Code bleibt bei
.send
hängen?
Da weiss ich nicht weiter.
Viele Grüsse
Anneliese
AW: Tabelle per Mail versenden
Josef
Hallo Anneliese,

dann poste doch mal deinen Code, so wie du ihn bisher verwendest.

Gruß Sepp

Anzeige
AW: Tabelle per Mail versenden
liese
Guten Morgen!
Hier der Code:
Sub Active_Sheet()
'Working in 97-2007
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim iMsg As Object
Dim iConf As Object
'    Dim Flds As Variant
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
'Copy the ActiveSheet to a new workbook
ActiveSheet.Copy
'Or if you want to copy more then one sheet use:
'Sourcewb.Sheets(Array("Sheet1", "Sheet3")).Copy
Set Destwb = ActiveWorkbook
'Determine the Excel version and file extension/format
With Destwb
If Val(Application.Version) 
Sub when your answer is NO in the security dialog that you only
'see  when you copy a sheet from a xlsm file with macro's disabled.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is NO in the security dialog"
Exit Sub
Else
Select Case Sourcewb.FileFormat
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
Case 56: FileExtStr = ".xls": FileFormatNum = 56
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With
'    'Change all cells in Destwb to values if you want
'    For Each sh In Destwb.Worksheets
'        sh.Select
'        With sh.UsedRange
'            .Cells.Copy
'            .Cells.PasteSpecial xlPasteValues
'            .Cells(1).Select
'        End With
'        Application.CutCopyMode = False
'    Next sh
'    Destwb.Worksheets(1).Select
'Save the new workbook/Mail it/Delete it
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
.Close savechanges:=False
End With
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
'    iConf.Load -1    ' CDO Source Defaults
'    Set Flds = iConf.Fields
'    With Flds
' .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
' .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "Fill in your SMTP  _
server here"
' .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
'        .Update
'    End With
With iMsg
Set .Configuration = iConf
.To = "123@xyz.de.de"
.CC = ""
.BCC = ""
.From = """Pseudo"" "
.Subject = "This is a test"
.TextBody = "Hi there"
.AddAttachment TempFilePath & TempFileName & FileExtStr
.Send
End With
'Delete the file you have send
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

Wobei zusätzlich immer noch das Problem ist, dass ich nicht die aktive,
sondern eine "bestimmte Tabelle" senden möchte.
Danke für die Bemühungen.
Viele Grüße
Anneliese
Anzeige
AW: Tabelle per Mail versenden
Josef
Hallo Anneliese,

ich habe dir im Code gekennzeichnet, wo du deine Änderungen eintragen musst.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Active_Sheet()
  'Working in 97-2007
  Dim FileExtStr As String
  Dim FileFormatNum As Long
  Dim Sourcewb As Workbook
  Dim Destwb As Workbook
  Dim TempFilePath As String
  Dim TempFileName As String
  Dim iMsg As Object
  Dim iConf As Object
  Dim Flds As Variant
  Dim lngVisible As Long
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
  End With
  
  Set Sourcewb = ThisWorkbook
  
  'Copy the ActiveSheet to a new workbook
  With Sourcewb.Sheets("Tabelle1") 'Tabellenname anpassen!
    lngVisible = .Visible
    .Copy
    .Visible = lngVisible
  End With
  'Or if you want to copy more then one sheet use:
  'Sourcewb.Sheets(Array("Sheet1", "Sheet3")).Copy
  
  Set Destwb = ActiveWorkbook
  
  'Determine the Excel version and file extension/format
  With Destwb
    If Val(Application.Version) < 12 Then
      'You use Excel 97-2003
      FileExtStr = ".xls": FileFormatNum = -4143
    Else
      'You use Excel 2007
      'We exit the Sub when your answer is NO in the security dialog that you only
      'see when you copy a sheet from a xlsm file with macro's disabled.
      If Sourcewb.Name = .Name Then
        With Application
          .ScreenUpdating = True
          .EnableEvents = True
        End With
        MsgBox "Your answer is NO in the security dialog"
        Exit Sub
      Else
        Select Case Sourcewb.FileFormat
          Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
          Case 52:
            If .HasVBProject Then
              FileExtStr = ".xlsm": FileFormatNum = 52
            Else
              FileExtStr = ".xlsx": FileFormatNum = 51
            End If
          Case 56: FileExtStr = ".xls": FileFormatNum = 56
          Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
        End Select
      End If
    End If
  End With
  
  ' 'Change all cells in Destwb to values if you want
  ' For Each sh In Destwb.Worksheets
  ' sh.Select
  ' With sh.UsedRange
  ' .Cells.Copy
  ' .Cells.PasteSpecial xlPasteValues
  ' .Cells(1).Select
  ' End With
  ' Application.CutCopyMode = False
  ' Next sh
  ' Destwb.Worksheets(1).Select
  
  
  'Save the new workbook/Mail it/Delete it
  TempFilePath = Environ$("temp") & "\"
  TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
  
  With Destwb
    .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
    .Close savechanges:=False
  End With
  
  Set iMsg = CreateObject("CDO.Message")
  Set iConf = CreateObject("CDO.Configuration")
  
  iConf.Load -1 ' CDO Source Defaults
  Set Flds = iConf.Fields
  With Flds
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    'Hier deinen SMTP-Server eintragen! Den korrekten Servernamen findest du in deinem Mailprogramm
    'in den Kontoeinstellungen!
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "Hier SMTP-Server eintragen" 'SMTP-Server
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    .Update
  End With
  
  With iMsg
    Set .Configuration = iConf
    .To = "123@xyz.de.de" 'Empfängeradresse
    .CC = ""
    .BCC = ""
    .From = """Pseudo"" <123@xyz.de>" 'Sendername/Adresse
    .Subject = "Dein Betreff" 'Betreff
    .TextBody = "Dene Nachricht" 'Mailtext
    .AddAttachment TempFilePath & TempFileName & FileExtStr
    .Send
  End With
  
  
  'Delete the file you have send
  Kill TempFilePath & TempFileName & FileExtStr
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
  End With
End Sub

Gruß Sepp

Anzeige
AW: Tabelle per Mail versenden
liese
Hallo Sepp,
auch nach der Anpassung kommt folgende Fehlermeldung (s. Anhang)
Userbild
Viele Grüße
Anneliese
AW: Tabelle per Mail versenden
Josef
Hallo Liese

was hast du den wo eingetragen?

Gruß Sepp

AW: Tabelle per Mail versenden
liese
Hallo Sepp,
habe den Tabellennamen und die versendende Mailadresse korrigiert.
Das hattest Du so doch empfohlen.
Viele Grüße
Anneliese
Anzeige
AW: Tabelle per Mail versenden
Josef
Hallo Liese,

hast du das auch angepasst?

'Hier deinen SMTP-Server eintragen! Den korrekten Servernamen findest du in deinem  _
Mailprogramm
'in den Kontoeinstellungen!
Gruß Sepp

AW: Tabelle per Mail versenden
liese
Hallo Sepp,
Wo ist da der Wurm drin
Adressen sind Pseudo's
Muss ich noch anderen Eintragungen machen?
Jetzt kommt auch noch die Fehlermeldung,
dass die Varialble Flds nicht definiert ist?
Bin nicht blond...
hier mein Code.
Viele Grüsse
Anneliese
Sub Active_Sheet()
'Working in 97-2007
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim iMsg As Object
Dim iConf As Object
'    Dim Flds As Variant
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set Sourcewb = ActiveWorkbook
'Copy the ActiveSheet to a new workbook
ActiveSheet.Copy
'Or if you want to copy more then one sheet use:
'Sourcewb.Sheets(Array("Sheet1", "Sheet3")).Copy
Set Destwb = ActiveWorkbook
'Determine the Excel version and file extension/format
With Destwb
If Val(Application.Version) 
Sub when your answer is NO in the security dialog that you only
'see  when you copy a sheet from a xlsm file with macro's disabled.
If Sourcewb.Name = .Name Then
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
MsgBox "Your answer is NO in the security dialog"
Exit Sub
Else
Select Case Sourcewb.FileFormat
Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
Case 52:
If .HasVBProject Then
FileExtStr = ".xlsm": FileFormatNum = 52
Else
FileExtStr = ".xlsx": FileFormatNum = 51
End If
Case 56: FileExtStr = ".xls": FileFormatNum = 56
Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
End Select
End If
End If
End With
'    'Change all cells in Destwb to values if you want
'    For Each sh In Destwb.Worksheets
'        sh.Select
'        With sh.UsedRange
'            .Cells.Copy
'            .Cells.PasteSpecial xlPasteValues
'            .Cells(1).Select
'        End With
'        Application.CutCopyMode = False
'    Next sh
'    Destwb.Worksheets(1).Select
'Save the new workbook/Mail it/Delete it
TempFilePath = Environ$("temp") & "\"
TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
With Destwb
.SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
.Close savechanges:=False
End With
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
iConf.Load -1    ' CDO Source Defaults
'    Set Flds = iConf.Fields
With Flds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.unitybox.de"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
.Update
'    End With
With iMsg
Set .Configuration = iConf
.To = "123@abc.de"
.CC = ""
.BCC = ""
.From = """Liese"" "
.Subject = "This is a test"
.TextBody = "Hi there"
.AddAttachment TempFilePath & TempFileName & FileExtStr
.Send
End With
'Delete the file you have send
Kill TempFilePath & TempFileName & FileExtStr
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

AW: Tabelle per Mail versenden
Josef
Hallo Anneliese,

über deine Haarfarbe kann ich nichts sagen;-))
Warum hast du nicht den von mir angepassten Code genommen und angepasst?
Du hast bei einigen Zeilen die ' nicht entfernt, deshalb die Fehlermeldung.
Hier noch mal der Code, den SMTP-Server hab ich schon eingetragen.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Mail_Sheet()
  'Working in 97-2007
  Dim FileExtStr As String
  Dim FileFormatNum As Long
  Dim Sourcewb As Workbook
  Dim Destwb As Workbook
  Dim TempFilePath As String
  Dim TempFileName As String
  Dim iMsg As Object
  Dim iConf As Object
  Dim Flds As Variant
  Dim lngVisible As Long
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
  End With
  
  Set Sourcewb = ThisWorkbook
  
  'Copy the ActiveSheet to a new workbook
  With Sourcewb.Sheets("Tabelle1") 'Tabellenname anpassen!
    lngVisible = .Visible
    .Copy
    .Visible = lngVisible
  End With
  'Or if you want to copy more then one sheet use:
  'Sourcewb.Sheets(Array("Sheet1", "Sheet3")).Copy
  
  Set Destwb = ActiveWorkbook
  
  'Determine the Excel version and file extension/format
  With Destwb
    If Val(Application.Version) < 12 Then
      'You use Excel 97-2003
      FileExtStr = ".xls": FileFormatNum = -4143
    Else
      'You use Excel 2007
      'We exit the Sub when your answer is NO in the security dialog that you only
      'see when you copy a sheet from a xlsm file with macro's disabled.
      If Sourcewb.Name = .Name Then
        With Application
          .ScreenUpdating = True
          .EnableEvents = True
        End With
        MsgBox "Your answer is NO in the security dialog"
        Exit Sub
      Else
        Select Case Sourcewb.FileFormat
          Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
          Case 52:
            If .HasVBProject Then
              FileExtStr = ".xlsm": FileFormatNum = 52
            Else
              FileExtStr = ".xlsx": FileFormatNum = 51
            End If
          Case 56: FileExtStr = ".xls": FileFormatNum = 56
          Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
        End Select
      End If
    End If
  End With
  
  ' 'Change all cells in Destwb to values if you want
  ' For Each sh In Destwb.Worksheets
  ' sh.Select
  ' With sh.UsedRange
  ' .Cells.Copy
  ' .Cells.PasteSpecial xlPasteValues
  ' .Cells(1).Select
  ' End With
  ' Application.CutCopyMode = False
  ' Next sh
  ' Destwb.Worksheets(1).Select
  
  
  'Save the new workbook/Mail it/Delete it
  TempFilePath = Environ$("temp") & "\"
  TempFileName = "Part of " & Sourcewb.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
  
  With Destwb
    .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
    .Close savechanges:=False
  End With
  
  Set iMsg = CreateObject("CDO.Message")
  Set iConf = CreateObject("CDO.Configuration")
  
  iConf.Load -1 ' CDO Source Defaults
  Set Flds = iConf.Fields
  With Flds
    .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    'Hier deinen SMTP-Server eintragen! Den korrekten Servernamen findest du in deinem Mailprogramm
    'in den Kontoeinstellungen!
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.unitybox.de" 'SMTP-Server
    .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    .Update
  End With
  
  With iMsg
    Set .Configuration = iConf
    .To = "123@xyz.de.de" 'Empfängeradresse
    .CC = ""
    .BCC = ""
    .From = """Pseudo"" <123@xyz.de>" 'Sendername/Adresse
    .Subject = "Dein Betreff" 'Betreff
    .TextBody = "Dene Nachricht" 'Mailtext
    .AddAttachment TempFilePath & TempFileName & FileExtStr
    .Send
  End With
  
  
  'Delete the file you have send
  Kill TempFilePath & TempFileName & FileExtStr
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
  End With
End Sub

Gruß Sepp

AW: Tabelle per Mail versenden
liese
Hallo Sepp,
mein Rechner spinnt glaub ich.
Jetzt kann ich die Codezeilen Deines letzten Postings
nicht mehr verwenden.
Alles wird ohne Absätze eingefügt, heisst "Endlostext?"
Würdest Du mir die (Beispieldatei) per Mail senden?
123@abc.de
Farbe war nur Scherz...
Viele Grüße
Anneliese
AW: Tabelle per Mail versenden
liese
Hallo Sepp,
er hängt wieder bei
.send
?

Die Datei https://www.herber.de/bbs/user/68168.xls wurde aus Datenschutzgründen gelöscht


Viele Grüße
Anneliese
AW: Tabelle per Mail versenden
Josef
Hallo Anneliese,

stimmt der SMTP-Server?
wenn ja, dann probier noch den Benutzernamen und das Passwort des Mailkontos mitzugeben,
ich hab die im Code entsprechende Kommentare gesetzt.
Die Fehlermeldung lässt mich allerdings eher an einen falschen SMTP-Servernamen glauben.
https://www.herber.de/bbs/user/68169.xls

Gruß Sepp

AW: Tabelle per Mail versenden
liese
Hallo Sepp,
alles ausprobiert.
Es bleibt beim alten Zustand ... ?
Bin jetzt down.
Gruss
Anneliese
AW: Tabelle per Mail versenden
Josef
Hallo Anneliese,

leider kann ich in Ermangelung von GroupWise nichts testen, aber probier mal den folgenden Code für GroupWise. Ich hab Im Code gekennzeichnet, wo du deine Angaben machen musst.

' **********************************************************************
' Modul: Modul4 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Sub Mail_GroupWise()
  'src:=unknown
  'changed by j.ehrensberger
  Dim objGroupWise As Object
  Dim objAccount As Object
  Dim objMessages As Object
  Dim objMessage As Object
  Dim objMailBox As Object
  Dim objRecipients As Object
  Dim objRecipient As Object
  Dim objAttachment As Object
  Dim objAttachments As Object
  Dim objMessageSent As Variant
  Dim Subject As String, Attachment As String, Recipient As String, Bodytext As String
  
  On Error GoTo Errorhandling
  
  '###############################################################
  
  'ANPASSEN - Tabellenname!
  Attachment = SheetToSend(ThisWorkbook.Sheets("Tabelle1"))
  
  'ANPASSEN - Betreff!
  Subject = "Dein Betreff"
  
  'ANPASSEN - Empfänger!
  Recipient = "empfänger@abc.com"
  
  'ANPASSEN - Text!
  Bodytext = "Hallo" & vbLf & vbLf & "Hier die Tabelle."
  
  '###############################################################
  
  Set objGroupWise = CreateObject("NovellGroupWareSession")
  Set objAccount = objGroupWise.Login
  Set objMailBox = objAccount.MailBox
  Set objMessages = objMailBox.Messages
  Set objMessage = objMessages.Add("GW.MESSAGE.MAIL", "Draft")
  Set objRecipients = objMessage.Recipients
  Set objRecipient = objRecipients.Add(Recipient)
  Set objAttachments = objMessage.Attachments
  
  If Attachment <> "" Then Set objAttachment = objAttachments.Add(Attachment)
  
  With objMessage
    .Subject = Subject
    .Bodytext = Bodytext
  End With
  
  Set objMessageSent = objMessage.Send
  
  If Attachment <> "" Then Kill Attachment
  
  ExitHere:
  Set objGroupWise = Nothing
  Set objAccount = Nothing
  Set objMailBox = Nothing
  Set objMessages = Nothing
  Set objMessage = Nothing
  Set objRecipients = Nothing
  Set objAttachments = Nothing
  Set objRecipient = Nothing
  Set objAttachment = Nothing
  Exit Sub
  Errorhandling:
  MsgBox Err.Description & " " & Err.Number
  Resume ExitHere
End Sub

Private Function SheetToSend(objSheet As Worksheet) As String
  'original from http://www.rondebruin.nl/mail/folder2/mail2.htm
  Dim FileExtStr As String
  Dim FileFormatNum As Long, lngVisible As Long
  Dim Destwb As Workbook
  Dim TempFilePath As String
  Dim TempFileName As String
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
  End With
  
  With objSheet
    lngVisible = .Visible
    .Visible = xlSheetVisible
    .Copy
    .Visible = lngVisible
  End With
  
  Set Destwb = ActiveWorkbook
  
  'Determine the Excel version and file extension/format
  With Destwb
    If Val(Application.Version) < 12 Then
      'You use Excel 97-2003
      FileExtStr = ".xls": FileFormatNum = -4143
    Else
      'You use Excel 2007
      'We exit the Sub when your answer is NO in the security dialog that you only
      'see when you copy a sheet from a xlsm file with macro's disabled.
      If objSheet.Parent.Name = .Name Then
        With Application
          .ScreenUpdating = True
          .EnableEvents = True
        End With
        MsgBox "Your answer is NO in the security dialog"
        Exit Function
      Else
        Select Case objSheet.Parent.FileFormat
          Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
          Case 52:
            If .HasVBProject Then
              FileExtStr = ".xlsm": FileFormatNum = 52
            Else
              FileExtStr = ".xlsx": FileFormatNum = 51
            End If
          Case 56: FileExtStr = ".xls": FileFormatNum = 56
          Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
        End Select
      End If
    End If
  End With
  
  'Save the new workbook/Mail it/Delete it
  TempFilePath = Environ$("temp") & "\"
  TempFileName = "Part of " & objSheet.Parent.Name & " " & Format(Now, "dd-mmm-yy h-mm-ss")
  
  With Destwb
    .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
    .Close savechanges:=False
  End With
  
  SheetToSend = TempFilePath & TempFileName & FileExtStr
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
  End With
  
End Function

Gruß Sepp

AW: Tabelle per Mail versenden
liese
Hallo Sepp,
seit gestern habe ich folgendes Problem.
Wenn ich den Code hier aus dem Forum rauskopiere
wird er als Zeichenkette ohne Absatzmarken eingefügt?
Desweiteren, ich möchte das garnicht am Groupwise aufhängen,
sondern der Code soll neutral mit jedem Standard-Email-Programm laufen.
Hatte mal folgendes gefunden:
Sub mail()
ActiveWorkbook.FollowHyperlink Address:="mailto:empfänger@abc.de.de?subject=Tabelle1&body=Hallo  _
123,%0a%0awie geht es?.%0a%0aGrüsse xyz", NewWindow:=True
End Sub

Wenn da jetzt noch ein Tabellenblatt angehangen werden könnte und das Mailprogramm
sich nicht sichbar öffnen würde, wäre es perfekt.
Den Groupwise-Code kann ich nicht ausprobieren, da ich eine Weile nicht in der Firma bin.
Vielleicht hast Du/Ihr noch eine andere Idee.
Danke für Deine aufwendige Mühe.
Viele Grüße
Anneliese
AW: Tabelle per Mail versenden
liese
Hallo,
habe folgende Codezeilen gefunden, die mit dem Standardmailprogramm
(egal welches) eine benannte Tabelle senden.
Sub Blatt_senden()
Dim blatt As Integer
Application.DisplayAlerts = False
Worksheets("Tabelle3").Copy
ActiveWorkbook.SendMail "empfänger@abc.de", "Betreffzeile"
ActiveWindow.Close
Application.DisplayAlerts = True
End Sub

Aber wie vermeide ich, dass das Mailprogramm geöffnet zurückbleibt?
Viele Grüße
Anneliese
AW: Tabelle per Mail versenden
Josef
Hallo Anneliese,

lass uns hier weitermachen, mein Bildschirm ist nicht mehr breitgenug!

' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Mail_Sheet()
  'src:=http://www.rondebruin.nl/mail/folder1/mail2.htm
  'Working in 97-2007
  Dim FileExtStr As String
  Dim FileFormatNum As Long, lngVisible As Long
  Dim Sourcewb As Workbook
  Dim Destwb As Workbook
  Dim TempFilePath As String
  Dim TempFileName As String
  
  With Application
    .ScreenUpdating = False
    .EnableEvents = False
  End With
  
  Set Sourcewb = ActiveWorkbook
  
  With ThisWorkbook.Sheets("Tabelle1") 'Tabellenname anpassen!
    lngVisible = .Visible
    .Visible = xlSheetVisible
    .Copy
    .Visible = lngVisible
  End With
  
  Set Destwb = ActiveWorkbook
  
  'Determine the Excel version and file extension/format
  With Destwb
    If Val(Application.Version) < 12 Then
      'You use Excel 97-2003
      FileExtStr = ".xls": FileFormatNum = -4143
    Else
      'You use Excel 2007, we exit the sub when your answer is
      'NO in the security dialog that you only see when you copy
      'an sheet from a xlsm file with macro's disabled.
      If Sourcewb.Name = .Name Then
        With Application
          .ScreenUpdating = True
          .EnableEvents = True
        End With
        MsgBox "Your answer is NO in the security dialog"
        Exit Sub
      Else
        Select Case Sourcewb.FileFormat
          Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
          Case 52:
            If .HasVBProject Then
              FileExtStr = ".xlsm": FileFormatNum = 52
            Else
              FileExtStr = ".xlsx": FileFormatNum = 51
            End If
          Case 56: FileExtStr = ".xls": FileFormatNum = 56
          Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
        End Select
      End If
    End If
  End With
  
  ' 'Change all cells in the worksheet to values if you want
  ' With Destwb.Sheets(1).UsedRange
  ' .Cells.Copy
  ' .Cells.PasteSpecial xlPasteValues
  ' .Cells(1).Select
  ' End With
  ' Application.CutCopyMode = False
  
  'Save the new workbook/Mail it/Delete it
  TempFilePath = Environ$("temp") & "\"
  TempFileName = "Part of " & Sourcewb.Name & " " _
    & Format(Now, "dd-mmm-yy h-mm-ss")
  
  With Destwb
    .SaveAs TempFilePath & TempFileName & FileExtStr, _
      FileFormat:=FileFormatNum
    On Error Resume Next
    .SendMail "empfänger@adresse.com", "Betreff"
    On Error GoTo 0
    .Close SaveChanges:=False
  End With
  
  'Delete the file you have send
  Kill TempFilePath & TempFileName & FileExtStr
  
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
  End With
End Sub

Gruß Sepp

AW: Tabelle per Mail versenden
liese
Hallo Sepp,
der Code läuft sauber ab.
Das gewählte Blatt wird auch korrekt gemailt,
aber das Problem mit dem offen stehendem
Mailprogramm besteht nach wie vor?
Viele Grüße
Anneliese
AW: Thema beendet
liese
Hallo,
habe alles mal auf einem anderen System getestet.
Klappt wunderbar.
Danke noch einmal für die Hilfe, besonders Sepp.
Viele Grüße
Anneliese

323 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige