Mehrere Dateien erstellen

Hallo zusammen, (Excel Vers. 2003)

aus dem Tabellenblatt2 sollen mehrere Dateien, die als Name Bericht&Name aus der Liste (Tabellenblatt1) erhalten, in einem Verzeichnis C:\daten\Bericht…xls abgelegt werden. Allerdings sollen die Dateien ohne Formeln erzeugt werden, nur mit den Werten.
Es sollen ca. 30 Dateien erzeugt werden, soviele Dateien wie Namen in der Liste stehen. Im Anschluss sollen diese dann per Email verschickt werden, wieder nach einer Liste von Usern.
Wie geht man hier am besten das Problem per VBA an. Für Hinweise, Tipps bin ich Dankbar.
Für mich, ist dies eine schwierige Aufgabe, aber ich weiss, dass es im Forum Fachleute gibt die dies umsetzen könnten.

L.G. Wolfgang

Hallo Wolfgang,

schonmal vorab: Die Aufgabe lässt sich nur mit VBA lösen.

aus dem Tabellenblatt2 sollen mehrere Dateien, die als Name
Bericht&Name aus der Liste (Tabellenblatt1) erhalten, in einem
Verzeichnis C:\daten\Bericht…xls abgelegt werden.
Allerdings
sollen die Dateien ohne Formeln erzeugt werden, nur mit den
Werten.
Es sollen ca. 30 Dateien erzeugt werden, soviele Dateien wie
Namen in der Liste stehen.
Im Anschluss sollen diese dann per
Email verschickt werden, wieder nach einer Liste von Usern.

Ich setze jetzt mal voraus:

  1. Jeder Empfänger bekommt den gleichen Bericht (Tabelle2)
  2. In Tabelle1 ist eine Liste mit den (genau 30) Empfängernamen (A2:A31) und deren Emailadressen (B2:B31)

(Sollte 1. nicht zutreffen, (wird es kompliziert) wäre eine weitere VBA-Funktion notwendig, mit der ich die Daten in Tabelle2 einschränken würde. Einen solchen Bericht würde ich dann vorzugsweise als Pivottabelle konstruieren.)

Was soll das Makro machen:
Du musst in einem Programm mit einer Schleife die Tabelle mit den 30 Einträgen durchgehen. Bei jedem Durchgang liest du den Namen der Person, und die Email-Adresse aus. Dann bestimmst du den Namen der neuen Datei und übergibst diesen einer Funktion, die das gewünschte Blatt in einen neue Mappe kopiert, alles darauf kopiert und nur noch die Werte einfügt, die Datei speichert, die Datei verschickt, die Datei schließt. Das wars.

Für mich, ist dies eine schwierige Aufgabe, aber ich weiss,
dass es im Forum Fachleute gibt die dies umsetzen könnten.

Prinzipiell ist das nix Besonderes. Ich habe den Code der genau das Beschriebene macht(siehe unten) mal schnell zusammengeschrieben. Ich habe den Code aber nicht getestet, deshalb könnten noch Bugs drinnen sein. Etwas Arbeit muss auch noch für Dich übrigbleiben. :wink:

Achtung:
Je nachdem wie Dein Outlook eingestellt ist, ballert er Dir sofort die erstellten Emails raus.

PS: Mit dem „Click-Yes“ Tool brauchst du später nicht jede Email bestätigen.

MfG
Stephan

Code:
Sub Programm()

Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual

Dim i As Integer
Dim strName As String
Dim strEmail As String
Dim strBetreff As String
Dim strTabelleListe As String
Dim strTabelleBericht As String
Dim strDateiName As String
Dim strDatum As String

strDatum = Format(Now(), „YYYY-MM-DD“)

'Tabelle, in die Personen stehen
strTabelleListe = „Tabelle1“
'Tabelle die als Bericht gespeichert werden soll
strTabelleBericht = „Tabelle2“

Sheets(strTabelleListe).Activate

For i = 2 To 31

strName = Range(„A“ & i).Value
strEmail = Range(„B“ & i).Value
strDateiName = "C:\daten\Bericht - " & strName & " - " & strDatum & „.xls“
strBetreff = "Bericht für " & strName & " - " & strDatum
Call fn_KopierenSpeichern(strDateiName, strTabelleBericht, strEmail, strBetreff)

Next i

MsgBox „Fertisch“

Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic

End Sub

Function fn_KopierenSpeichern(strDatei As String, strBlatt As String, strEmail As String, strBetreff As String)

Sheets(strBlatt).Copy
Cells.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range(„A1“).Select

ActiveWorkbook.SaveAs Filename:=strDatei
ActiveWorkbook.SendMail Recipients:=strEmail, Subject:=strBetreff
ActiveWindow.Close

End Function

Hallo Stephan,
zunächst vielen Dank für Deine prächtige Hilfe. Ja die Liste ist so wie du geschrieben hast nur, dass ich Namen vergeben habe und auf keine Zellbezüge zugreife. Aber das macht ja nichts aus.
Werde den Code einbauen und Dir Rückmeldung geben!

In einer anderen Sache versuche ich über die MsgBox die Zellen A1:B6 anzuzeigen. Das funktioniert aber nur mit der Ersten Zelle A1. Und die Meldung, Typen unverträglich erscheint. Wo könnte der Fehler liegen.
Code:
Sub Feiertag()
MsgBox Worksheets(„Feiertage“).[A1]
MsgBox Worksheets(„Feiertage“).Range(„A1:B6“)
MsgBox Worksheets(„Feiertage“).Cells(1, 1)
End Sub

Liebe Grüße
Wolfgang

In einer anderen Sache versuche ich über die MsgBox die Zellen
A1:B6 anzuzeigen. Das funktioniert aber nur mit der Ersten
Zelle A1. Und die Meldung, Typen unverträglich erscheint. Wo
könnte der Fehler liegen.
MsgBox Worksheets(„Feiertage“).Range(„A1:B6“)

Hallo Wolfgang,

ein Zellbereich hat keinen Wert.

Was willst du überhaupt angezeigt bekommen, die Werte der zellen?

Dann so

Msgbox range(„A1“).value & " - " & range(„B1“).value

Oder das Ganze in einer For-Schleife.

For each Zelle in Range(„A1:B6“)
msgbox Zelle.value
next zelle

Gruß
Reinhard

Hallo Reinhard,

ja ich möchte alles, A1:B6 in der Box ausgeben lassen.Es ist ein Kalender zum Urlaubseintrag u. dabei möchte ich aus dem Arbeitsblatt Feiertage die Tage mittels Button anzeigen lassen.

Liebe Grüße
Wolfgang

ja ich möchte alles, A1:B6 in der Box ausgeben lassen.Es ist
ein Kalender zum Urlaubseintrag u. dabei möchte ich aus dem
Arbeitsblatt Feiertage die Tage mittels Button anzeigen
lassen.

Hallo Wolfgang,

meinst du es so:

Option Explicit

Sub Ausgabe()
Dim strAusgabe As String, Zelle As Range
For Each Zelle In Worksheets("Feiertage").Range("A1:B6")
 strAusgabe = strAusgabe & Zelle.Address(0, 0) & " - " & Zelle.Value & Chr(10)
Next Zelle
MsgBox Left(strAusgabe, Len(strAusgabe) - 1)
End Sub

Gruß
Reinhard

Hallo Reinhard,

nein nicht die Spaltenbezeichnung A1 mit Text u. A2, B1 usw. Ich meinte nur den Text der in den Zellen steht, z.B.
SpalteA------SpalteB
01.01.2012-- Neujahr
06.01.2012—Hl.Dreikönig





Liebe Grüße
Wolfgang

nein nicht die Spaltenbezeichnung A1 mit Text u. A2, B1 usw.
Ich meinte nur den Text der in den Zellen steht, z.B.
SpalteA------SpalteB
01.01.2012-- Neujahr
06.01.2012—Hl.Dreikönig

Hallo Wolfgang,

okay, dann halt so:

Sub Ausgabe()
Dim strAusgabe As String, rngZei As Range
With Worksheets("Feiertage")
 For Each rngZei In .Range("A1:B6").Rows
 strAusgabe = strAusgabe & .Cells(rngZei.Row, 1).Value & " - " & .Cells(rngZei.Row, 2).Value & Chr(10)
 Next rngZei
End With
MsgBox Left(strAusgabe, Len(strAusgabe) - 1)
End Sub

Gruß
Reinhard

Hallo Reinhard,

super, genau das ist es was ich Mühevoll seit Tagen versucht habe zu erreichen. Danke!

Liebe Grüße
Wolfgang

Hallo Stephan,
wie gesagt hier meine Rückmeldung zu deiner tollen Hilfe von letzter Woche. Ich habe den Code für das erstellen von Dateien u. das kopieren (Code: Wertebereich umwandeln) ohne Formeln eingebaut. Das funktioniert auch bestens.
Das mit dem Email Anhang u. versenden möchte ich auch gerne extra abfragen, (Emailadressen stehen in Spalte C2:C70, dann wie das kopieren auch in den Code einbauen. Da habe ich noch kein Ergebnis gefunden. Denn ich weiß nicht rechtwo der Code hin soll damit eine Adress nach dr anderen abgefragt wird. Kannst du mir hier nochmals Hilfe leisten?
Es werden in jede Datei aus dem Bereich „r_PC“ (Spalte A2:A70) in den Bereich „CC_Liste“ (z.B.=A5 anderes Arbeitsblatt) die Namen als Überschrift geschrieben. Aus Spalte B2:B70 werden die Dateinamen vergeben ("DestBook & „.xls“).

Ich sende mal den Code:
Sub gen_Files()

Dim a_Liste As String
Dim DestBook As String
Dim i As Integer

’ Stop calculations and screen updating
Application.ScreenUpdating = False
Application.Cursor = xlWait
Application.StatusBar = "Dateien erzeugen … "

For i = 1 To Range(„CC_Liste“).Rows.Count
If Range(„CC_Liste“).Cells(i, 1).Value = „“ Then
'nix machen
Else
Range(„r_PC“).Value = Range(„CC_Liste“).Cells(i, 1).Value
DestBook = Range(„CC_Liste“).Cells(i, 2).Value
Application.Calculate

ActiveWorkbook.SaveAs Filename:= _
„Q:\Controlling\Palo_FCT_Master“ & DestBook & „.xls“ _
, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Wertbereiche_umwandeln

End If
Next

With Application
.Calculate
.Calculation = xlCalculationAutomatic
.StatusBar = „Fertig!“

.ScreenUpdating = True
.Cursor = xlDefault
End With

End Sub

Liebe Grüße
Wolfgang

Hallo Reinhard,

habe versucht einen neuen Bereich von B1:G22 zur Anzeige zu bringen. Ist mir nicht gelungen. Die Spalte B enthält Namen von Personen, die restl. sind zahlen.
Würdest du bitte nochmals so nett sein u. mir dabei helfen!

Liebe Grüße
Wolfgang

habe versucht einen neuen Bereich von B1:G22 zur Anzeige zu
bringen. Ist mir nicht gelungen. Die Spalte B enthält Namen
von Personen, die restl. sind zahlen.
Würdest du bitte nochmals so nett sein u. mir dabei helfen!

Hallo Wolfgang,

heut nicht mehr, schau grad Sean Connery, danach leg ich mich flach.
Aber lad mal eine Beispielmappe hoch mit http://www.uploadagent.de/
und zeig hier den Link.

Gruß
Reinhard

Hallo Reinhard,
hier der Link.
das Arbeitsblatt Übersicht soll per MsgBox mit Klick auf Button zu sehen sein. Danke!

http://www.uploadagent.de/show-179421-1319659767.html

Liebe Grüße
Wolfgang