Markierte Zeilen übetragen

Hallo forum!
Ich wäre Euch für jede Hilfe/ jeden Ansatz seeehr dankkbar!
Eine grobe Schilderung meines Problems:

Es gibt 2 Excel-Dateien: eine Ausgangsdatei VL, die ständig wächst und gedeiht und eine Etikettendatei E, in die Werte aus der Ausgangsdatei VL eingefügt werden. E dient dazu, bestimmte Werte aus VL auf Klebeetiketten auszudrucken. Auf einer Seite sind 8 Klebetiketten, d.h. das Makro könnte max. 8 Zeilen von VL auf einmal in E einfügen und dann ausdrucken.
Ich möchte jetzt, dass ein Makro mir automatisch bestimmte Zellen aus markierten Zeilen der VL in bestimmte Zellen von E überträgt.
Da aber nicht alle Zellen jeder Zeile von VL in E übertragen werden sollen, gibt es die Möglichkeit, die zu übertragenden Zeilen mit einem „X“ zu markieren.

Die Probleme, die ich jetzt habe:

  1. Es gibt schon einen Code (s.u.), der dafür sorgt, dass ich das 1. der 8 Etiketten automatisch füllen kann. Was ich aber nicht hinbekomme, ist, dass jede Zeile in einem neuen Etikett „angesiedelt“ wird. Wie produziere ich „Sprünge“ nach rechts?

Das 2. und vielleicht größere Problem ist der Abruf der X-Markierung einer Zeile, d.h. dass er wirklich nur die Zeilen mit einem X betrachtet. In einem vorherigen Eintrag gab es ein Makro bezüglich SVERWEIS (war schon ganz lehrreich), aber ich bekomme die Verknüpfung zwischen diesem und meinem eigenen Makro nicht hin.

Hier ist nochmal mein Code, vielleicht sorgt er dafür, dass meine Fragestellung etwas klarer wird. Außerdem enthält er meine Zellebzüge, die benötigt werden.

Ich danke für jede Antwort!! Es wäre schön, wenn jemand schnell einen Ansatz hätte, da ich Samstag in Urlaub fahre und die Lösung meines Problems mich brennend interessiert!!! (Oder zumindest die Aussicht, dass ich es lösen könnte)

MfG, Excel-Puttmacher

Option Explicit
'Etikettenbezüge:
'1. Etikett: Beginn $B$9
'2. Etikett: Beginn $G$9
'3. Etikett: Beginn $L$9
'4. Etikett: Beginn $Q$9
'5. Etikett: Beginn $B$30
'6. Etikett: Beginn $G$30
'7. Etikett: Beginn $L$30
'8. Etikett: Beginn $Q$30
Sub Testliste()
Dim Ernte As Worksheet
Dim Partie As Integer
Set Test = Worksheets(„Testliste“)
Partie = 2
Do Until IsEmpty(Test.Cells(Partie, 17))
Range("$B$9") = (Test.Cells(Partie, 17))
Partie = Partie + 1
Loop
'PartieNr. wird eingetragen
'Dim Etiketten As Worksheet
'Set Etiketten = Worksheets(„Etiketten“)
'Dim etik As Long

Dim Name As Integer
Set Test = Worksheets(„Testliste“)
Name = 2
Do Until IsEmpty(Test.Cells(Name, 8))
Range("$B$7") = (Test.Cells(Name, 8))
Name = Name + 1
Loop
'Name wird eingetragen

Dim kf As Integer
Set Test = Worksheets(„Testliste“)
kf = 2
Do Until IsEmpty(Test.Cells(kf, 39))
Range("$B$13") = (Test.Cells(kf, 39))
kf = kf + 1
Loop
'kf wird eingetragen

Dim TKG As Integer
Set Test = Worksheets(„Testliste“)
TKG = 2
Do Until IsEmpty(Test.Cells(TKG, 38))
Range("$B$15") = (Test.Cells(TKG, 38))
TKG = TKG + 1
Loop
'TKG wird eingetragen

Dim Gewicht As Integer
Set Test = Worksheets(„Testliste“)
Gewicht = 2
Do Until IsEmpty(Test.Cells(Gewicht, 44))
Range("$B$17") = (Test.Cells(Gewicht, 44))
Gewicht = Gewicht + 1
Loop
'Gewicht wird eingetragen

Dim Behandlung As Integer
Set Test = Worksheets(„Testliste“)
Behandlung = 2
Do Until IsEmpty(Test.Cells(Behandlung, 41))
Range("$A$20") = (Test.Cells(Behandlung, 41))
Behandlung = Behandlung + 1
Loop 'Behandlung wird eingetragen
End Sub

Hallo Excel-Puttmacher.

Als ersten Ansatz könntest Du Deinen Etiketten Namen geben. Dazu müsstest Du den Bereich markieren, der Etikett 1 darstellt (wenn ich das richtig herausgelesen habe, dann B9:F29). Klicke dann ins Namenfeld (links neben der Bearbeitungsleiste, wo jetzt „B9“ drinsteht) und schreibe dort hinein „Etikett1“. Diesen Vorgang kannst Du für alle acht Etiketten wiederholen.

Das Ganze hat dann den Vorteil, dass Du ein Etikett im VBA-Code direkt mit seinem Namen ansprechen kannst, etwa so: Range(„Etikett1“)

Innerhalb eines Etikettes kannst Du auch weitere Namen vergeben, falls erforderlich.

Ich denke, das würde den Programmcode schon mal wesentlich übersichtlicher machen.

Viele Grüße
Carsten

Hallo Carsten!
Danke erstmal für Deine Antwort!
Ich schicke Dir mal meine datei, wenns Recht ist. Ansonsten bitte ich um eine kurze Nachricht.
Die Etikettenbezüge, die ich aufgelistet habe, sind nämlich die Zellen, wo er anfangen kann, die Daten reinzuschreiben.
Jetzt alles aufzulisten wäre aber Quatsch, es ist eh anschaulischer mit der Datei.
würdest Du es Dir einmal ansehen oder ist das zuviel von mir verlangt? (Stichwort Freizeit der Helfer…)

Es gibt in meiner Datei ein Blatt Testliste und ein Blatt Etiketten (über das wir uns gerade unterhalten haben.) Wahrscheinlich ist mein Makro dort auch enthalten…

Danke!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi ramolo,

Name = 2
Do Until IsEmpty(test.Cells(Name, 8))
Range("$B$7") = test.Cells(Name, 8)
Name = Name + 1
Loop

kannst du auch abkürzen auf:

Range("$B$7") = test.Cells(test.Range(„H65536“).End(xlUp).Row, 8)

und verschick deine Beispieldatei nicht einzeln, sondern lade sie irgendwo hoch, z.B. www.badongo.com und poste hier den Link.

Gruß
Reinhard

Hallo Reinhard, danke für den Tip.
Die datei steht jetzt bei Badongo.com. Wusste gar nict, dass es so was for free gibt. Wie finanzieren die sich bzw. wo ist der Haken? Oder ist doch nicht alles misstruaisch zu betrachten, was sich im Internet an guten Seiten findet.
Wie auch immer, habe Deinen ratschlag und das enthalltene Makro etwas verkürzt.

http://www.badongo.net/file/440328

Gruß´, Excel-Puttmacher

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Reinhard, danke für den Tip.
Die datei steht jetzt bei Badongo.com. Wusste gar nict, dass
es so was for free gibt. Wie finanzieren die sich bzw. wo ist
der Haken? Oder ist doch nicht alles misstruaisch zu
betrachten, was sich im Internet an guten Seiten findet.

Hi Excel-Puttmacher,
k.A. wie die sich finanzieren, mein Englisch ist auch nicht so gut um mal schnell deren Impreesum , die AGBs usw durchzuschauen wer die sind.
Gruß
Reinhard

Wie auch immer, habe Deinen ratschlag und das enthalltene
Makro etwas verkürzt.

http://www.badongo.net/file/440328

Gruß´, Excel-Puttmacher

Hi ramolo,

Name = 2
Do Until IsEmpty(test.Cells(Name, 8))
Range("$B$7") = test.Cells(Name, 8)
Name = Name + 1
Loop

kannst du auch abkürzen auf:

Range("$B$7") = test.Cells(test.Range(„H65536“).End(xlUp).Row,
8)

und verschick deine Beispieldatei nicht einzeln, sondern lade
sie irgendwo hoch, z.B. www.badongo.com und poste hier den
Link.

Gruß
Reinhard

Hi Excelkiller*g,
das erste Etikett hast du ausgefüllt.
Was soll da Makro in die anderen 7 Etiketten schreiben, bzw auch in das erste Etikett schreiben?
Die entsprechenden Spaltenwerte von Zeile 2 - 9 in Testliste?
Gruß
Reinhard

Hallo Excel-Puttmacher.

Ich habe mal ein weinig in Deiner Datei herumgefuhrwerkt. Ich hoffe, es entspricht so ziemlich Deinen Vorstellungen. Falls Du noch einige Erklärungen brauchst, die dann aber später. Vielleicht morgen. Falls nicht, wünsche ich Dir (oder Euch) einen schönen Urlaub.

Viele Grüße
Carsten

Frage beantwortet, danke
Hallo an alle, die mit mir nachgedacht haben!
Mein Problem ist dankenswerter Weise für mich gelöst worden. Folgender Code liest mir genau die Zellen dorthin ein, wohin ich sie haben will. Siht auch ganz eingfach aus, das Verstehen im Einzelnen verschiebe ich aber auf nach Ostern.
Danke für Deine Mühe und Dein Makro, Carsten!

Public ListeBisZeile As Long

Public Const AnzahlEtiketten As Long = 8
Public Const Spaltenbeschriftung As Long = 1

Public Enum Lese
S = 7 'repräsentiert Spalte G auf dem Tabellenblatt Testliste
N = 8 'repräsentiert Spalte H auf dem Tabellenblatt Testliste
PNr = 17 'repräsentiert Spalte Q auf dem Tabellenblatt Testliste
T = 38 'repräsentiert Spalte AL auf dem Tabellenblatt Testliste
K = 39 'repräsentiert Spalte AM auf dem Tabellenblatt Testliste
B = 41 'repräsentiert Spalte AO auf dem Tabellenblatt Testliste
Gewicht = 44 'repräsentiert Spalte AR auf dem Tabellenblatt Testliste
End Enum

Public Enum Schreibe
N = 7 'repräsentiert Zeile 7 auf dem Tabellenblatt Etiketten
PNr = 9 'repräsentiert Zeile 9 auf dem Tabellenblatt Etiketten
T = 15 'repräsentiert Zeile 15 auf dem Tabellenblatt Etiketten
K = 13 'repräsentiert Zeile 13 auf dem Tabellenblatt Etiketten
B = 20 'repräsentiert Zeile 20 auf dem Tabellenblatt Etiketten
Gewicht = 17 'repräsentiert Zeile 17 auf dem Tabellenblatt Etiketten
End Enum

Public Sub Schreibe_Etiketten()
Dim BlattKomplett As Boolean
Dim Eintrag As Long
Dim Etikett As Long
Dim EtikettSpalte As Long
Dim EtikettZeile As Long
ListeBisZeile = 65536 - Application.WorksheetFunction.CountBlank(Testliste.Columns(Lese.N))
For Eintrag = (1 + Spaltenbeschriftung) To ListeBisZeile
If EtikettSpalte = 4 Then
EtikettZeile = EtikettZeile + 1
EtikettSpalte = 0
End If
If Testliste.Cells(Eintrag, Lese.S) „“ Then
Etiketten.Cells(Schreibe.N + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.N)
Etiketten.Cells(Schreibe.PNr + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.PNr)
Etiketten.Cells(Schreibe.T + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.T)
Etiketten.Cells(Schreibe.K + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.K)
Etiketten.Cells(Schreibe.B + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.B)
Etiketten.Cells(Schreibe.Gewicht + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.Gewicht)
EtikettSpalte = EtikettSpalte + 1
Etikett = Etikett + 1
End If
If Etikett = AnzahlEtiketten Then
MsgBox „Alle acht Etiketten wurden ausgefüllt“
BlattKomplett = True
Exit For
End If
Next
If BlattKomplett = False Then
For Etikett = Etikett To AnzahlEtiketten
If EtikettSpalte = 4 Then
EtikettZeile = EtikettZeile + 1
EtikettSpalte = 0
End If
Etiketten.Cells(Schreibe.Namen + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)).ClearContents
Etiketten.Cells(Schreibe.PartieNr + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)).ClearContents
Etiketten.Cells(Schreibe.TKG + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)).ClearContents
Etiketten.Cells(Schreibe.KF + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)).ClearContents
Etiketten.Cells(Schreibe.Behandlung + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)).ClearContents
Etiketten.Cells(Schreibe.Gewicht + (23 * EtikettZeile), 2 + (5 * EtikettSpalte)).ClearContents
EtikettSpalte = EtikettSpalte + 1
Next
End If
'Code für Blatt ausdrucken
End Sub

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo an alle, die mit mir nachgedacht haben!
Mein Problem ist dankenswerter Weise für mich gelöst worden.
Folgender Code liest mir genau die Zellen dorthin ein, wohin
ich sie haben will. Siht auch ganz eingfach aus, das Verstehen
im Einzelnen verschiebe ich aber auf nach Ostern.
Danke für Deine Mühe und Dein Makro, Carsten!

Hi Ramolo,
das ist doch nicht der ganze Code!
Schreibe.Namen, Schreibe.PartieNr, Schreibe.TKG, usw. werden nirgends deklariert.
Gruß
Reinhard

Hallo Reinhard.

Doch, es ist wirklich der ganze Code.

Viele Grüße
Carsten

Doch, es ist wirklich der ganze Code.

Hallo Carsten,
bei F8 kommt bei mir eine Fehlermeldung (Excel2000):
http://www.badongo.com/pic/146901
Gruß
Reinhard

Hallo Reinhard.

Wenn ich auf den Link klicke, wird zwar die Seite geöffnet, aber es wird nichts angezeigt, also kein Bild oder so. Und wenn ich auf „Bild in Original-Größe anzeigen“ klicke, wird sie Seite nicht gefunden.

Viele Grüße
Carsten

Wenn ich auf den Link klicke, wird zwar die Seite geöffnet,
aber es wird nichts angezeigt, also kein Bild oder so. Und
wenn ich auf „Bild in Original-Größe anzeigen“ klicke, wird
sie Seite nicht gefunden.

Hallo Carsten,
k.A. was da schiefläuft, ich kann zwar das Bild downloaden über „Vergrößertes Bild“, aber Irvanview meldet Bildfehler bwohl ichs grad vorhin mit Irfanview erstellt habe. Naja, Technik halt :smile:

Jedenfalls ist das bild nicht wichtig, man sieht darauf dass der Debugger „Schreibe.Namen“ anmeckert und .Namen ist markiert.

Gruß
Reinhard

Hallo Reinhard.

Excel-Puttmacher hat die Mitglider der Enummeration umbenannt, dass müsstest Du dann auch machen.
Die Enummeration „Schreibe“ enthält nicht das Mitglied „Namen“, sondern stattdessen das Mitglied „N“.

Public ListeBisZeile As Long
 
Public Const AnzahlEtiketten As Long = 8
Public Const Spaltenbeschriftung As Long = 1
 
Public Enum Lese
 S = 7 'repräsentiert Spalte G auf dem Tabellenblatt Testliste
 N = 8 'repräsentiert Spalte H auf dem Tabellenblatt Testliste
 PNr = 17 'repräsentiert Spalte Q auf dem Tabellenblatt Testliste
 T = 38 'repräsentiert Spalte AL auf dem Tabellenblatt Testliste
 K = 39 'repräsentiert Spalte AM auf dem Tabellenblatt Testliste
 B = 41 'repräsentiert Spalte AO auf dem Tabellenblatt Testliste
 Gewicht = 44 'repräsentiert Spalte AR auf dem Tabellenblatt Testliste
End Enum
 
Public Enum Schreibe
 N = 7 'repräsentiert Zeile 7 auf dem Tabellenblatt Etiketten
 PNr = 9 'repräsentiert Zeile 9 auf dem Tabellenblatt Etiketten
 T = 15 'repräsentiert Zeile 15 auf dem Tabellenblatt Etiketten
 K = 13 'repräsentiert Zeile 13 auf dem Tabellenblatt Etiketten
 B = 20 'repräsentiert Zeile 20 auf dem Tabellenblatt Etiketten
 Gewicht = 17 'repräsentiert Zeile 17 auf dem Tabellenblatt Etiketten
End Enum
 
Public Sub Schreibe\_Etiketten()
 Dim BlattKomplett As Boolean
 Dim Eintrag As Long
 Dim Etikett As Long
 Dim EtikettSpalte As Long
 Dim EtikettZeile As Long
 ListeBisZeile = 65536 - Application.WorksheetFunction.CountBlank(Testliste.Columns(Lese.N))
 For Eintrag = (1 + Spaltenbeschriftung) To ListeBisZeile
 If EtikettSpalte = 4 Then
 EtikettZeile = EtikettZeile + 1
 EtikettSpalte = 0
 End If
 If Testliste.Cells(Eintrag, Lese.S) "" Then
 Etiketten.Cells(Schreibe.N + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.N)
 Etiketten.Cells(Schreibe.PNr + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.PNr)
 Etiketten.Cells(Schreibe.T + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.T)
 Etiketten.Cells(Schreibe.K + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.K)
 Etiketten.Cells(Schreibe.B + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.B)
 Etiketten.Cells(Schreibe.Gewicht + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)) = Testliste.Cells(Eintrag, Lese.Gewicht)
 EtikettSpalte = EtikettSpalte + 1
 Etikett = Etikett + 1
 End If
 If Etikett = AnzahlEtiketten Then
 MsgBox "Alle acht Etiketten wurden ausgefüllt"
 BlattKomplett = True
 Exit For
 End If
 Next
 If BlattKomplett = False Then
 For Etikett = Etikett To AnzahlEtiketten
 If EtikettSpalte = 4 Then
 EtikettZeile = EtikettZeile + 1
 EtikettSpalte = 0
 End If
 Etiketten.Cells(Schreibe.Namen + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)).ClearContents
 Etiketten.Cells(Schreibe.PartieNr + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)).ClearContents
 Etiketten.Cells(Schreibe.TKG + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)).ClearContents
 Etiketten.Cells(Schreibe.KF + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)).ClearContents
 Etiketten.Cells(Schreibe.Behandlung + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)).ClearContents
 Etiketten.Cells(Schreibe.Gewicht + (23 \* EtikettZeile), 2 + (5 \* EtikettSpalte)).ClearContents
 EtikettSpalte = EtikettSpalte + 1
 Next
 End If
 'Code für Blatt ausdrucken
End Sub

Desweiteren gehört dieser Code in ein Modul. Sämtlichen anderen Code, der in der Datei mal enthalten war, habe ich entfernt.

Viele Grüße
Carsten

aha, danke für die Info o.w.T.