Anzeige
Archiv - Navigation
636to640
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
636to640
636to640
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tabellenblatt aufteilen

Tabellenblatt aufteilen
16.07.2005 11:11:20
Wolfgang
Hallo zusammen,
ich habe ein Tabellenblatt mit Mitarbeiter.
Die Mitarbeiternamen stehen in Spalte B Zeile 35 bis XXX.
Pro Mitarbeiter soll ein neues Blatt angelegt werden und ihm per Mail zur Verfügung gestellt werden.
Wie kann man sowas per VBA machen?
Die Daten werden wöchentlich neu eingespielt und es ist sehr mühsam es jedesmall per Hand zu machen.
Gruß
Wolfgang
Danke

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

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt aufteilen
16.07.2005 12:34:46
AS
Vielleicht hilft dir vorerst dass hier:
Um die nächste Zelle dahinter auszuwählen, benutze diesen Befehl:
Dim InhaltderZelledahinter As String
InhaltderZelledahinter = ActiveCell.Offset ( 1,0 ).text
AW: Tabellenblatt aufteilen
16.07.2005 12:35:15
AS
.. offen ..
AW: Tabellenblatt aufteilen
16.07.2005 14:10:44
Nepumuk
Servus,
und wie soll das Programm an die Mailadressen der Mitarbeitern kommen? Wo und wie wird das neue Blatt erstellt? Wie ist der Bezug zwischen neuem Blatt und dem Mitarbeiter herzustellen?
Gruß
Nepumuk
Excel & VBA – Beispiele
AW: Tabellenblatt aufteilen
16.07.2005 14:49:29
AS
Genau! - Soll die E-Mail über die Glaskugel am Lpt1 - Anschluss etwa die Antwort finden?!
AS
Anzeige
AW: Tabellenblatt aufteilen
16.07.2005 15:02:42
Ramses
Hallo
mal ein Beispiel.
Der Code gehört in ein Modul deiner Arbeitsmappe
In deiner Mappe "Alt"+"F11" drücken
Unter "VBA Projekt "DeineMappe.xls". Rechte Maustaste - Einfügen Modul.
Den Code hier kopieren, dort dann einfügen.
Deine Ausgangstabelle sieht im Beispiel mal so aus:
 
 ABC
1NameMailadresse 
2Rainerramses@gmxpro.netz 
3Ramses'ramses@gmxpro.nez 
4Ramses  
5Max Mustermann, der einhunderdste Mailempfängermax.mustermann@irgendwo.netz 
6   
 

Dann lass diesen Code laufen
Option Explicit

Sub Excel_Serienmail_via_Outlook_mit_Anhang_Senden()
'(C) Ramses
Dim tWks As Worksheet, qWks As Worksheet, qWB As Workbook
Dim tmpWB As String, tmpFolder As String
Dim wksFound As Boolean, notSend As Boolean
Dim NotSendSheet As Worksheet
Dim NotSendRow As Integer
Dim MyOutApp As Object
Dim MyMessage As Object
Dim mySender As String, MyDefPath As String, tmpName As String
Dim i As Integer, n As Integer, NameCol As Integer, MailCol As Integer
'Fehlerbehandlung einschalten
On Error GoTo MyErrorHandler
'Überschrift steht in Zeile 1
'Namen stehen in Spalte NameCol
'E-Mail Addressen in Spalte MailCol
'Sonderzeichen in den Namen werden NICHT berücksichtigt
'Fehlerprotokoll wird erstellt
'--------------------------
'Tabelle wo die Namen und Adressen stehen
Set qWks = ThisWorkbook.Worksheets("Tabelle1")
'Spalte wo die Namen stehen
'1 = Spalte A
NameCol = 1
'Spalte wo die E-Mailadressen stehen
'2 = Spalte B
MailCol = 2
'Temporäres DokuSheet anlegen wenn Dateien nicht erstellt werden können
Set NotSendSheet = Worksheets.Add
NotSendSheet.Name = Date & " " & Format(Time, "hh_mm_ss")
'Temporäres Verzeichnis anlegen für die Zwischenspeicherung der Daten
tmpFolder = "C:\" & Date & "_" & Format(Time, "hh_mm_ss")
MkDir tmpFolder
NotSendRow = 1
notSend = False
'Absender
mySender = "Herzliche Grüsse" & vbCrLf & "Ramses"
'Default Speicherpfad
MyDefPath = Application.DefaultFilePath
'Outlook Object erstellen
Set MyOutApp = CreateObject("Outlook.Application")
'Start der Sendeschleife
With qWks
    For i = 2 To .Cells(Rows.Count, NameCol).End(xlUp).row
        'Controlflag für zu sendendes Object erstellen
        wksFound = False
        'Sendeschleife starten
        NewStart:
        For n = 1 To Worksheets.Count
            If Worksheets(i).Name = .Cells(i, NameCol) Then
                wksFound = True
                Exit For
            End If
        Next n
        If IsEmpty(.Cells(i, MailCol)) Then
            notSend = True
            EnterErrorMessage NotSendSheet.Name, NotSendRow, i, qWks.Cells(i, NameCol).Text, "Keine Mailadresse"
            NotSendRow = NotSendRow + 1
            GoTo SendNextMessage
        End If
        If wksFound = False Then
            'Outlook Mail erstellen
            Set MyMessage = MyOutApp.CreateItem(0)
            Set tWks = Worksheets.Add
            tWks.Name = .Cells(i, NameCol)
            tWks.Copy
            Application.DisplayAlerts = False
            ActiveWorkbook.SaveAs tmpFolder & "\" & .Cells(i, NameCol).Text & ".xls"
            Application.DisplayAlerts = True
            Set qWB = Workbooks(ActiveWorkbook.Name)
            With MyMessage
                .To = qWks.Cells(i, MailCol).Text '"irgendwer@irgendein-provider.de"
                .Subject = "Ihre Datei" 'oder z.B. qwks.Cells(i, 4) 'Betreff in Spalte D
                .Body = "Zu Ihrer Info" & vbCrLf & mySender 'oder z.B. qwksCells(i, 5) 'Infotext in Spalte E
                .Attachments.Add qWB.FullName
                'Hier wird die Mail zuerst angezeigt
                '.Display
                'Hier wird die Mail gleich in den Postausgang gelegt
                .Send
            End With
            'Name temporär speichern
            tmpName = qWB.FullName
            'Erstelltes Workbook schliessen
            qWB.Close
            'Löschen des erstellten temporären Workbooks
            Kill tmpName
            'Variablen zurücksetzen
            Set MyMessage = Nothing
            'Application.Wait (Now + TimeValue("0:00:02"))
        End If
        Set qWB = Nothing
        Set tWks = Nothing
        SendNextMessage:
    Next i
End With

MyErrorExit:
Application.ScreenUpdating = True
Set MyOutApp = Nothing
On Error GoTo 0
'Löschen des temporären Folders
RmDir tmpFolder
If notSend = False Then
    'Wenn keine Sendefehler auftraten
    'Kann das Protokollsheet gelöscht werden
    Application.DisplayAlerts = False
    NotSendSheet.Delete
    Application.DisplayAlerts = True
Else
    'Anzeigen der Fehlerdatei in der aktiven Mappe
    NotSendSheet.Select
    MsgBox "Es konnten diverse Namen nicht gesendet werden"
End If
Exit Sub

MyErrorHandler:
Select Case Err
    Case 1004
        notSend = True
        'Löschen einer temporär erstellten Datei in der aktiven Mappe
        Application.DisplayAlerts = False
        tWks.Delete
        Application.DisplayAlerts = True
        If Len(qWks.Cells(i, NameCol)) > 31 Then
            EnterErrorMessage NotSendSheet.Name, NotSendRow, i, qWks.Cells(i, NameCol).Text, "Name zu lang"
        Else
            EnterErrorMessage NotSendSheet.Name, NotSendRow, i, qWks.Cells(i, NameCol).Text, "Unerlaubte Zeichen"
        End If
        NotSendRow = NotSendRow + 1
        Resume SendNextMessage
    Case Else
        MsgBox "Unerwarteter Fehler" & vbCrLf & vbCrLf & Err.Number & ", " & Err.Description, vbCritical, "Sende Makro wird abgebrochen"
        Resume MyErrorExit
End Select
End Sub

Function EnterErrorMessage(shToWrite As String, shRow As Integer, shNotSendRow, SendName As String, Reason As String)
Worksheets(shToWrite).Cells(shRow, 1) = "Zeile " & shNotSendRow
Worksheets(shToWrite).Cells(shRow, 2) = SendName
Worksheets(shToWrite).Cells(shRow, 3) = Reason
End Function

Danach sollte die Protokolldatei in etwa so aussehen
 
 ABCD
1Zeile 3Ramses'Unerlaubte Zeichen 
2Zeile 4RamsesKeine Mailadresse 
3Zeile 5Max Mustermann, der einhunderdste MailempfängerName zu lang 
4    
 

Viel Spass
Gruss Rainer
@Nepumuk: Das war ein Notfall :-))
Anzeige
@ User-Maat-Rê setep-en-Rê
16.07.2005 19:50:42
Nepumuk
Hi Rainer,
&gt&gtDas war ein Notfall&lt&lt
Du meinst bestimmt, bevor unser AS noch mehr ... schreibt. :-))
Gruß
Nepumuk
AW: Tabellenblatt aufteilen
17.07.2005 19:09:37
Ramses
Hallo
Nö,... Notfall bezog sich mehr auf meine U-Meldung im MOD-Forum :-))
Wenn ich AS lese oder eine seiner zahlreichen neuen Namen antworte ich gar nicht mehr wenn ich es/ihn erkenne.
Ausserdem ein hübsche Variante als Ersatz für http://www.online-excel.de/excel/singsel_vba.php?f=86
Gruss Rainer

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige