Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
796to800
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
796to800
796to800
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

bekomme es nicht hin. Bitte um Hilfe!

bekomme es nicht hin. Bitte um Hilfe!
28.08.2006 14:12:12
{mskro}
Hallo liebe ExcelFreunde,
ich möchte ein für mich schwieriges Problem gelöst bekommen.
Ich möchte aus einer Datei, in der Geburtstage (TT.MM.) stehen, die Einträge herauslesen und in einer zweiten Datei am richtigen Ort einfügen. Normales Kopieren und Einfügen reicht hier nicht aus. Ich habe zu besseren Verständnis mal die beiden Musterdateien hochgeladen und eine nähere Beschreibung steht auch in der Datei drin. Ansonsten bitte nachfragen.
Es wäre toll das seit langem bestehende Problem per VBA zu lösen, denn es geht hier um ein Kalendermakro, das mit verschiedenen Datenbanken arbeitet, sodass die Daten nicht direkt in die Druckvorlage übernommen werden können.
https://www.herber.de/bbs/user/36218.xls

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

Gruss Manfred
PS: Mein VBA Level ist ein reines HobbyLevel, aber ich bezeichne es mal als gut, da es keine andere Auswahlmöglichkeit gibt.

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: bekomme es nicht hin. Bitte um Hilfe!
28.08.2006 14:58:52
Alex
Hi Manfred,
Frage:
Ist es richtig, dass, wie im Beispiel 26219.xls auf verschiedene Arbeitsblätter verteilt werden, oder können alle Monate in Reihenfolge auf einem Arbeitsblatt augeführt werden.
Wenn 2 Personen am selben Tag geburtstag haben, soll der Tag 2x augeführtwerden oder am selben Tag durch "," hintereinader angezeigt werden.
Gruss Alex
AW: bekomme es nicht hin. Bitte um Hilfe!
28.08.2006 15:10:52
{mskro}
Hallo Alex,
1.) ja, es ist richtig. nein, die müssen schon verteilt werden, weil sonst der spätere Ausdruck nicht richtig gewährleistet ist. Es handelt sich um Vorder- und Rückseite beim Ausdrucken für ein Kalendersystem.
2.) bei 2 Einträgen werden diese auch so in der GeburtstagsListe eingetragen. Es taucht dieser Tag dann auch nur 1x auf.
3.) das Makro sollte in einer separaten reinen MakroDatei stehen und von dort aus die beiden Dateien Öffnen, Finden, Kopieren, Einfügen, Drucken und Schliessen ohne zu Speichern.
Die Dateien heissen:
succes-geburtstage.xls
succes-druckvorlage.xls
Gruss Manfred
Anzeige
vergessen die Frage offen zu halten o.T.
28.08.2006 15:49:11
{mskro}
.
Wo sind die Spezialisten?
30.08.2006 09:12:37
{mskro}
Hallo Spezi's,
wie schon angenommen, ist hier die Hilfe eines richtigen Excel Spezialisten gefragt. Ist denn keiner hier, der diese Aufgabe lösen könnte, oder mir hilfreich zur Seite stehen könnte? Ich beisse mir daran die Zähne aus. :-(
Gruss Manfred
AW: Wo sind die Spezialisten?
31.08.2006 12:54:26
ingUR
Hallo, Manfred,
ob es wirklich nur ein Spezialisten bedarf, der Dich bei Deinem Vorhaben unterstützt, ist für mich schwer zu entscheiden, denn denn Ablauf hast Du nach Deinen Vorstellung schon so beschrieben, und zu fast jedem Elemnt aus diesem Plan, gab es seit Ende Juli, dem Zeitpunkt des Beginns meines Überblickes über die Beiträge hier, den einen und anderen Beitag, so dass man nur noch das "Puzzle" zusammenstzen brauchte.
Einzig die Verteilung der Einträge auf die Tabellen der Druckvorlage könnte Sorgen bereiten, nicht weil es dafür kein Intrument geben würde, die SELECT-Anweisung drängt sich da nahezu auf, sondern weil für mich nicht erkennbar, wie Mehrfacheinträge bzw. eine Namensreihe für einen bestimmten Tag, layoutmäßig in die Druckvorlage eingefügt werden soll. Da wäre eine Ansichtsvorlage hilfreich, die die Lösung dieses Falles demonstriert.
Hier also nun eine Grundidee, die als erste Arbeitsunterlage dienen kann un bei der die Warntexte beim Schliessen noch nicht unterdrückt sind und der strWorkDir-Variablen noch die richtige Angaben zugewiesen werden muß, Ergänzungen und Änderungen, die mit VBA-gut-Kenntnissen schnell zu erledigen sind.

Option Explicit
Sub Start()
Dim wbG As Workbook, _
wbD As Workbook
Dim shtG As Worksheet, shtD(3) As Worksheet
Dim rngG As Range, rngD() As Range
Dim lngMaxRecs As Long
Dim strGFName As String, strDFName As String
Dim strDay As String, iPosDot As Integer, TT As Integer, MM As Integer
Dim wsDNr As Integer, cDNr As Integer, strName As String, iDRowOffset As Integer
Dim strDirName As String, strWorkDir As String
strGFName = "succes-geburtstage.xls"
strDFName = "succes-druckvorlage.xls"
strWorkDir = "C:\Dokumente und Einstellungen\" & _
Environ("Username") & _
"\Eigene Dateien\EXCEL\ExcelHerbers\Manfred\"
Set wbG = Application.Workbooks.Open(strWorkDir & strGFName)
If wbG Is Nothing Then
MsgBox strGFName & vbLf & "konnte nicht geöffnet werden"
Set wbG = Nothing
Set wbD = Nothing
Exit Sub
End If
Set wbD = Workbooks.Open(strWorkDir & strDFName)
If wbG Is Nothing Then
MsgBox strDFName & vbLf & "konnte nicht geöffnet werden"
Set wbG = Nothing
Set wbD = Nothing
Exit Sub
End If
Set shtG = wbG.Sheets("Tabelle1")
Set shtD(1) = wbD.Sheets("Seite1") 'Monate 7 8 1 2
Set shtD(2) = wbD.Sheets("Seite2") 'Monate 3 4 5 6
Set shtD(3) = wbD.Sheets("Seite3") 'Monate 11 12 9 10   ?
iDRowOffset = 2 'Kopfzeilen in der Druckvorlage vor dem ersten Monatstag
With shtG
lngMaxRecs = .Cells(Rows.Count, 1).End(xlUp).Row
For Each rngG In .Range("A2:A" & lngMaxRecs)
strDay = rngG.Value
iPosDot = InStr(strDay, ".")
TT = Val(Left(strDay, iPosDot - 1))
MM = Val(Mid(strDay, iPosDot + 1))
'Bestimme Druckseite nach MM
Select Case MM
Case 7, 8, 1, 2: wsDNr = 1
Case 3, 4, 5, 6: wsDNr = 2
Case 11, 12, 9, 10: wsDNr = 3
Case Else
MsgBox "Unzulässige Monatszahl in " & strDay
wsDNr = 0
End Select
If wsDNr Then
'Bestimme Druckspalte nach MM
'(Spalten auf Druckvorlageseite 3 prüfen!)
Select Case MM
Case 7, 3, 9: cDNr = 5 'Spalte E
Case 8, 4, 10: cDNr = 9 'Spalte I
Case 1, 5, 11: cDNr = 18 'Spalte R
Case 2, 6, 12: cDNr = 22 'Spalte V
End Select
strName = rngG.Offset(0, 1) 'Geburtstagseintrag
If shtD(wsDNr).Cells(TT + iDRowOffset, cDNr).Value Then
MsgBox "Zelle bereits belegt"
Else
'-------------- Nur für die Testphase
'                   shtD(wsDNr).Select
'                   shtD(wsDNr).Cells(TT + iDRowOffset, cDNr).Select
'                   MsgBox "Der Eintrag für " & _
'                          vbLf & vbTab & strDay & " | " & strName & _
'                          vbLf & "erfolgt in Adresse " & _
'                          shtD(wsDNr).Cells(TT + iDRowOffset, cDNr).Address
'Nachfolgende Zeile (über-)schreibt den Namenseintrag _
'in der Druckvorlage
shtD(wsDNr).Cells(TT + iDRowOffset, cDNr) = strName
End If
End If
Next
End With
'Druckvoralage ist ausgefüllt
'das Löschen von 31. in den Monaten 2,4,6,9 und 11 soltte im Laxout der Vorlage
'erledigt werden,
'Das Löschen des 30. und schaltjahrabhängig des 29. beding die Vorgabe des Jahres,
'das hier nicht eingeführt wurde
For wsDNr = 1 To 3
shtD(wsDNr).PrintPreview
'shtD(wsDNr).Printout '... ggf. parameter
Next wsDNr
wbG.Close
wbD.Close
Set wbG = Nothing
Set shtD(1) = Nothing: Set shtD(2) = Nothing: Set shtD(3) = Nothing
End Sub

Bei der Programmgestalltung habe ich mich mit Bedacht um einen "linearen" Programmierablaufauf bemüht, so dass das Hineinfinden in den Programmcode wohl leicht möglich ist, denn ich werde nur noch heute in der Intensität der letzen Wochen die Beiträge hier studieren und, wo es mir möglich ist, darauf antworten können.
Für die zahlreichen Anregungen die ich erhalten habe, möchte ich mich bei Fragern und Antwortern bedanken.
Gruß,
Uwe
Anzeige
AW: Das sieht schon richtig GUT aus, aber ;o)
01.09.2006 08:34:51
{mskro}
Hallo Uwe,
ich finde es toll, das du dich meines Problems mal angenommen hast. Ich habe es auf meinem Rechner laufen lassen. Es ist noch nicht ganz funktionsfähig, aber doch schon sehr gut. *ich bin begeistert*
Lasse mich noch ein paar Erklärungen dazu abgeben, was noch nicht so richtig funktioniert.
Wie du gesehen hast, habe ich in der Druckvorlage 2 Vorlagen, die es gilt für die 4 benötigten Ausdrucke zu benutzen. Darum müßen die Tageszahlen der Monate angepasst werden.
Ebenfalls werden die Monatsnamen noch nicht eigetragen.
Ich habe nun mal folgendes gemacht (mit meinen VBA Kenntnissen)
Ich habe einfach mal ein 3. und 4. Blatt in der Druckvorlage eingefügt und das Makro dementsprechen eingefügt. (Besser wäre allerdings, es bleibt bei den 2)
Nur werden jetzt die Geburtstage, die ich dann in die Tabelle eingefügt habe leider nicht immer den richtigen Monaten zugeordnet.
Ich füge das geänderte Makro mal bei, vielleicht erkennst du ja Fehler, die ich bei der Umsetzung gemacht habe.
Achja... Das Schaltjahr ist in diesem Fall egal, da es sich nur um einen Geburtstagskalender handelt und nicht Jahresgebunden ist. Der Februar sollte dann einfach mit "28" eingetragen werden. Falls dann doch mal einer auf dem 29. Geburtstag haben sollte, steht eben vor dem Namen kein 29.
Option Explicit

Sub Start()
Dim wbG As Workbook, _
wbD As Workbook
Dim shtG As Worksheet, shtD(4) As Worksheet
Dim rngG As Range, rngD() As Range
Dim lngMaxRecs As Long
Dim strGFName As String, strDFName As String
Dim strDay As String, iPosDot As Integer, TT As Integer, MM As Integer
Dim wsDNr As Integer, cDNr As Integer, strName As String, iDRowOffset As Integer
Dim strDirName As String, strWorkDir As String
strGFName = "succes-geburtstage.xls"
strDFName = "succes-druckvorlage.xls"
strWorkDir = "C:\Dokumente und Einstellungen\" & _
Environ("Username") & _
"\Desktop\"
Set wbG = Application.Workbooks.Open(strWorkDir & strGFName)
If wbG Is Nothing Then
MsgBox strGFName & vbLf & "konnte nicht geöffnet werden"
Set wbG = Nothing
Set wbD = Nothing
Exit Sub
End If
Set wbD = Workbooks.Open(strWorkDir & strDFName)
If wbG Is Nothing Then
MsgBox strDFName & vbLf & "konnte nicht geöffnet werden"
Set wbG = Nothing
Set wbD = Nothing
Exit Sub
End If
Set shtG = wbG.Sheets("Tabelle1")
Set shtD(1) = wbD.Sheets("Seite1") 'Monate 7 8 1 2
Set shtD(2) = wbD.Sheets("Seite2") 'Monate 3 4 5 6
Set shtD(3) = wbD.Sheets("Seite1") 'Monate 1 1 9 10
Set shtD(4) = wbD.Sheets("Seite4") 'Monate 11 12 1 1
iDRowOffset = 2 'Kopfzeilen in der Druckvorlage vor dem ersten Monatstag
With shtG
lngMaxRecs = .Cells(Rows.Count, 1).End(xlUp).Row
For Each rngG In .Range("A2:A" & lngMaxRecs)
strDay = rngG.Value
iPosDot = InStr(strDay, ".")
TT = Val(Left(strDay, iPosDot - 1))
MM = Val(Mid(strDay, iPosDot + 1))
'Bestimme Druckseite nach MM
Select Case MM
Case 7, 8, 1, 2: wsDNr = 1
Case 3, 4, 5, 6: wsDNr = 2
Case 13, 13, 9, 10: wsDNr = 3'die 13 darum, weil ich dachte schon vorhandene Monate machen Schwierigkeiten
Case 11, 12, 13, 13: wsDNr = 4
Case Else
MsgBox "Unzulässige Monatszahl in " & strDay
wsDNr = 0
End Select
If wsDNr Then
'Bestimme Druckspalte nach MM
'(Spalten auf Druckvorlageseite 3 prüfen!)
Select Case MM
Case 7, 3, 3, 11: cDNr = 5 'Spalte E
Case 8, 4, 4, 12: cDNr = 9 'Spalte I
Case 1, 5, 9, 1: cDNr = 18 'Spalte R
Case 2, 6, 10, 12: cDNr = 22 'Spalte V
End Select
strName = rngG.Offset(0, 1) 'Geburtstagseintrag
If shtD(wsDNr).Cells(TT + iDRowOffset, cDNr).Value Then
MsgBox "Zelle bereits belegt"
Else
'-------------- Nur für die Testphase
'                   shtD(wsDNr).Select
'                   shtD(wsDNr).Cells(TT + iDRowOffset, cDNr).Select
'                   MsgBox "Der Eintrag für " & _
'                          vbLf & vbTab & strDay & " | " & strName & _
'                          vbLf & "erfolgt in Adresse " & _
'                          shtD(wsDNr).Cells(TT + iDRowOffset, cDNr).Address
'Nachfolgende Zeile (über-)schreibt den Namenseintrag _
'in der Druckvorlage
shtD(wsDNr).Cells(TT + iDRowOffset, cDNr) = strName
End If
End If
Next
End With
'Druckvoralage ist ausgefüllt
'das Löschen von 31. in den Monaten 2,4,6,9 und 11 soltte im Laxout der Vorlage
'erledigt werden,
'Das Löschen des 30. und schaltjahrabhängig des 29. beding die Vorgabe des Jahres,
'das hier nicht eingeführt wurde
For wsDNr = 1 To 3
shtD(wsDNr).PrintPreview
'shtD(wsDNr).Printout '... ggf. parameter
Next wsDNr
wbG.Close
wbD.Close
Set wbG = Nothing
Set shtD(1) = Nothing: Set shtD(2) = Nothing: Set shtD(3) = Nothing
End Sub

Gruss Manfred
PS: Auf jeden Fall schon mal meinen RIESEN DANK dafür, was du mir hier gebastelt hast. Vielleicht werden meine Wünsche ja doch noch wahr und ich habe mal die Lösung für das Problem.
Anzeige
AW: Das sieht schon richtig GUT aus, aber ;o)
01.09.2006 12:18:21
ingUR
Hallo, Manfred,
wie angekündigt, komme ich leider nicht mehr dazu, mich länger mit den Beiträgen auseinader zu setzen. Doch beim ersten Überblick über Deine Eintragungen ist mir nicht erkennbar, wozu Du einen 13.Monat eingeführt hast.
Bitte gehe doch einfach die Programmschritte im Debug-Modus durch und untersuche die Variablen TT und MM. Wenn dort etwas anderes als die Zahlen 1 bis 31 bzw. 1 bis 12 erscheinen sollte, dann wäre in der Tat etwas in diesem Bezug am Programm nicht in Ordnung.
Das Eintragen von Monatnamen in den Vordruck scheint mir allerdings dan doch nicht die schwierige Übung zu sein. Einzig man sollte sie außerhalb des Geburtstagslisten-Durchgangs vorsehen.
Darüber hinas dient der Programmcode einzig als Startidee zur Weiterentwicklung ohne den Anspruch auf Vollständigkeit!
Viel Erfolg!
Uwe
Anzeige
Danke für die Tatkräftige Unterstützung
01.09.2006 13:10:02
{mskro}
Hallo Uwe,
nur zum Verständnis. Ich habe den 13. Monat nur deswegen eingefügt, weil beim Durchlauf auch Geburtstage anderer Monate sonst in die falsche Spalte geschrieben wurden. Ich dachte damit könnte ich das verhindern. (leider nein, muß eben weiter testen.)
Der Ansatz ist aber sehr gut und ich werde mich damit weiter befassen.
Vielen Dank
Gruss Manfred
PS: Bin auch schon wieder etwas weiter gekommen.
AW: Danke für die Tatkräftige Unterstützung
01.09.2006 13:49:59
ingUR
Hallo, Manfred,
die Aufteilung der Spalten wird allein über den betreffend bezeichneten Select-Block gesteuert. wenn also hier ein Monat in die falsche Spalte gerät, dann sind eingentlich nur die entsprechenden Werte nach den Fall, also nach Case, zu verändern.
Gruß!
Anzeige
AW: Danke für die Tatkräftige Unterstützung
01.09.2006 14:07:08
{mskro}
Danke Uwe,
das habe ich mir auch schon herausarbeiten können. Ich sage ja, ich bin schon weiter gekommen und den Rest bekomme ich auch noch hin. ;-)
Gruss Manfred

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige