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

Inhalt in Tabellenblätter schreiben

Inhalt in Tabellenblätter schreiben
12.05.2009 15:38:14
StefanS
Hallo,
kurz vor Feierabend hätte ich noch eine kleine Frage an Euch:
Wie stelle ich es an, dass wenn der Inhalt der Zelle (1, 6) doppelt oder mehrfach vorkommt, das Register mit der nächsten Zahl beschrieben wird.
Beispiel:
Zelle (1, 6) hat den Wert 11 und folgt 4x untereinander, danach folgt der Wert 12 usw.
Jetzt soll nicht 4-mal je ein Register mit den Inhalt von 11 beschrieben werden, sondern der nächste Register gleich mit 12 weitermachen.
Mein VBA-Code sieht bis hierhin wie folgt aus:

Sub C_Register_Fuellen()
' Uebertrag der Daten
Sheets("Register_1").Select
Dim Bereich As Range
Dim I As Integer
I = 0
With Tabelle4
Set Bereich = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
End With
Dim Zelle As Range
For Each Zelle In Bereich
If Zelle  "" Then
I = I + 1
End If
'MsgBox ("Register_" & I)
If Worksheets("Content").Cells(I, 6) = Zelle Then
Worksheets("Register_" & I).Cells(21, 4) = Worksheets("Content").Cells(I, 5)
Worksheets("Register_" & I).Cells(24, 4) = Worksheets("Content").Cells(I, 2)
Worksheets("Register_" & I).Cells(30, 4) = Worksheets("Content").Cells(I, 4)
Worksheets("Register_" & I).Cells(27, 4) = Worksheets("Content").Cells(I, 3)
Worksheets("Register_" & I).Cells(11, 5) = Worksheets("Content").Cells(I, 6)
Worksheets("Register_" & I).Cells(15, 5) = Worksheets("Content").Cells(I, 1)
Else
End If
Next Zelle
End Sub


14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Inhalt in Tabellenblätter schreiben
13.05.2009 23:21:26
Monika
Hallo StefanS,
ich hoffe ich habe die Frage korrekt verstanden.
- Die Daten liegen in sortierter Form vor.
- Sollen der Reihe nach abgearbeitet werden in einer Schleife
- in der Schleife soll etwas getan werden
- Allerdings nur wenn sich der Wert in einer bestimmten Zelle geändert hat
(Die Anzahl wieviele Werte untereinander gleich sind - ist nicht fest
- weil sonst könnte man ja einfach immer um diesen Abstand erhöhen)
wenn korrekt, mein Vorschlag:
Dim Alt As 'Typ je nachdem, welche Werte die Zelle enthalten kann
Alt = 'je nach Typ für einen String "" oder ein Wert, den Deine Tabelle sicher nicht enthält
For Each ...
'hier verstehe ich nicht ganz, warum Du in der Schleife zwei If-Abfragen hast
'frage mich wieso Du wenn Zelle leer ist, den Index erhöhst und
'dann trotz daß die Zelle leer war und Du den Index erhöht hast
'abhängig von einer weiteren Bedingung etwas verarbeitest?
'aber das ändert nichts am Grundprinzip innerhalb der Schleife -
'vor den Dingen, die dann ev. nicht gemacht werden sollen
If Alt Aktuell 'wenn Du einen String vergleichen musst nimm If strcomp(Alt, Aktuell, 0) ...
'beim 1. Schleifendurchgang sollte aufgrund der Vorbelegung der Variablen Alt
'auf alle Fälle Ungleichheit bestehen,
'so wird also beim 1. Schleifendurchlauf und bei jedem Wert der vom letzten
'abweicht eine Verarbeitung durchgeführt, und ansonsten nichts getan
Hier dann Deine Verarbeitung
Alt = Aktuell 'nicht vergessen, der jetzige aktuelle Wert, wird für den nächsten Durchlauf der Wert Alt
End If
Habe schon gesehen, dass Du schon gestern gepostet hast - vielleicht hilft es Dir ja trotzdem noch.
Hoffe ich habe Dein Anliegen richtig verstanden.
Gruß Monika
Anzeige
AW: Inhalt in Tabellenblätter schreiben
14.05.2009 07:06:26
StefanS
Hallo Monika,
vielen Dank für Deine Antwort. Habe versucht Deinen Vorschlag umsetzen - stehe aber irgendwie auf dem Schlauch!
Dim Alt As Integer
Alt = Columns("F:F").Select
For Each Zelle In Bereich
If Alt Aktuell Then
I = I + 1
Alt = Aktuell
End If
Könntest Du evtl. nochmal schauen, danke.
Gruß, Stefan
P.S. Ach ja, Du hast mein Problem voll und ganz richtig erkannt.
AW: Inhalt in Tabellenblätter schreiben
14.05.2009 07:59:23
Monika
Würde Dir ja gerne ausführlich helfen, verstehe nur die Aufgabenstellung nicht.
Schau mal ob ich das so richtig verstehe - meine Kommentare stimmen.

Sub C_Register_Fuellen()
' Uebertrag der Daten
Sheets("Register_1").Select
Dim Bereich As Range
Dim I As Integer
I = 0
With Tabelle4
'Du setzt einen Bereich der aus einem Ausschnitt in Tabell4 besteht
Set Bereich = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
End With
Dim Zelle As Range
For Each Zelle In Bereich
If Zelle  "" Then    'Du prüfst ob die Zelle einen Wert enthält, willst Du die gleiche   _
_
Zelle prüfen
'ob der Wert sich geändert hat?
'Hier hast Du ja einen Range aus Tabelle4?
'ist das die in demen Beispiel erwähnte Zelle
' "die Zelle (1, 6) hat den Wert 11 und folgt 4x  _
untereinander, danach folgt
'  der Wert 12 usw"  ?
I = I + 1
End If
'MsgBox ("Register_" & I)
'hier vergleichst Du den Inhalt einer Zelle in Tabelle "Content"
'mit dem Wert der Zelle aus "Tabelle4"
If Worksheets("Content").Cells(I, 6) = Zelle Then
'übernimmst hier jeweis Werte vom Tabellenblatt "Content" in
'ein Tabelleblatt dessen Namen Du variabel festlegst
'aus dem 1. Teil "Register_" und dem Zähler I
Worksheets("Register_" & I).Cells(21, 4) = Worksheets("Content").Cells(I, 5)
Worksheets("Register_" & I).Cells(24, 4) = Worksheets("Content").Cells(I, 2)
Worksheets("Register_" & I).Cells(30, 4) = Worksheets("Content").Cells(I, 4)
Worksheets("Register_" & I).Cells(27, 4) = Worksheets("Content").Cells(I, 3)
Worksheets("Register_" & I).Cells(11, 5) = Worksheets("Content").Cells(I, 6)
Worksheets("Register_" & I).Cells(15, 5) = Worksheets("Content").Cells(I, 1)
Else
End If
Next Zelle
End Sub


Bin erst einmal ca. 20 Minuten weg - melde mich dann wieder.
Gruß Monika

Anzeige
AW: Inhalt in Tabellenblätter schreiben
14.05.2009 08:23:45
StefanS
Hallo Monika,
ich möchte mich zuerst mal für Deine Unterstützung bedanken - finde ich echt super!
Habe meinen VBA-Code überarbeitet (aufgrund Deiner Hinwiese - doppelt If usw.)

Sub C_Register_Fuellen()
' Uebertrag der Daten
Dim Bereich As Range
Dim Zelle As Range
Dim I As Integer
I = 1
Sheets("Register_1").Select
With Tabelle4
Set Bereich = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
End With
For Each Zelle In Bereich
If Worksheets("Content").Cells(I, 6) = Zelle Then
I = I + 1
Worksheets("Register_" & I).Cells(21, 4) = Worksheets("Content").Cells(I, 5)
Worksheets("Register_" & I).Cells(24, 4) = Worksheets("Content").Cells(I, 2)
Worksheets("Register_" & I).Cells(30, 4) = Worksheets("Content").Cells(I, 4)
Worksheets("Register_" & I).Cells(27, 4) = Worksheets("Content").Cells(I, 3)
Worksheets("Register_" & I).Cells(11, 5) = Worksheets("Content").Cells(I, 6)
Worksheets("Register_" & I).Cells(15, 5) = Worksheets("Content").Cells(I, 1)
End If
Next Zelle
End Sub


Deine Kommentare sind richtig! Ich möchte prüfen, ob sich der Wert in der Zelle geändert hat.
Wenn JA, dann sollen die Daten in ein Register übernommen werden. Wenn NEIN, dann soll das Programm so lange nichts machen (zu mindest nicht die Daten weiter in neue Register schreiben) bis ein neuer Wert (+1) in der Zelle steht.
Danke nochmal für Deine Zeit - bin jetzt auch mal länger Unterwegs.
Gruß, Stefan

Anzeige
AW: Inhalt in Tabellenblätter schreiben
14.05.2009 09:25:17
Monika
Hallo Stefan,
das mit dem Kommentaren im code erscheint mir Sinnvoll - so mach ich das weiter

Sub C_Register_Fuellen()
' Uebertrag der Daten
Dim Bereich As Range
Dim Zelle As Range
Dim I As Integer
I = 1
Sheets("Register_1").Select
With Tabelle4
Set Bereich = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
End With
For Each Zelle In Bereich
'----- ich bin mir nicht sicher, ob Du wirklich vergleichst, was Du vergleichen willst ---
'(Achtung das funktioniert so nur weil Du im Bereich nur eine Spalte hast
' sonst bin ich mir nicht sicher ob For Each erst alle Zeilen oder erst alle Spalten
' verarbeitet dann merke ich mir den alten Wert einer Zelle lieber in einer Variablen)
'aber prüfe erst einmal - ob Du das wolltest
'beim 1. Schleifendurchlauf entspricht dein Vergleich
'If Worksheets("Content").Cells(1,6) = Worksheets("Tabelle4).Range(.Cells(1, 6)
'bin mir auch nicht sicher, ob Du hier den Inhalt der Zelle vergleichst oder nur
'ob es sich um den gleichen Bereich handelt(was ja nicht sein kann, da der
'Bereich sich in anderen Tabellblättern befindet + was soweit ich das überblicke
'auch keinen Sinn macht)
'ich benutze den Automatismus mit Kurzschreibweisen und Standardeigenschaften eher selten
'weiß nicht ob die Value-Eigenschaft die Standardeigenschaft von Range ist
'würde immer schreiben Worksheets("Content").Cells(I, 6).value = Zelle.value Then
' Du kannst das ganz gut testen indem Du
'  MsgBox "Worksheets("Content").Cells(I, 6).value =" & Worksheets("Content").Cells(I, 6). _
value
'  MsgBox "zelle.Value =" & Zelle.Value
'  Bin mir nicht sicher, ob Du mit Msgbox den Unterschied merkst ob du .Value schreibst
'  oder nicht - könnte sein, daß dort immer auf den Inhalt zugegriffen wird (irgendeine  _
interne
'  Konvertierung zeigt glaube ich immer den Inhalt an) - falls die If-Anweisung nicht  _
funktioniert
'  einfach mal versuchshalber ".Value" verwenden
If Worksheets("Content").Cells(I, 6) = Zelle Then
'  MsgBox "Bedingung erfüllt"   'natürlich könntest Du das auch mit dem Debugger testen
'will es hier aber nicht übertreiben
I = I + 1
Worksheets("Register_" & I).Cells(21, 4) = Worksheets("Content").Cells(I, 5)
Worksheets("Register_" & I).Cells(24, 4) = Worksheets("Content").Cells(I, 2)
Worksheets("Register_" & I).Cells(30, 4) = Worksheets("Content").Cells(I, 4)
Worksheets("Register_" & I).Cells(27, 4) = Worksheets("Content").Cells(I, 3)
Worksheets("Register_" & I).Cells(11, 5) = Worksheets("Content").Cells(I, 6)
Worksheets("Register_" & I).Cells(15, 5) = Worksheets("Content").Cells(I, 1)
End If
Next Zelle
End Sub


Also falls Dir das nicht reicht sag mir:
-ob Du wirklich den Inhalt einer Zelle aus den Tabellenblatt "Content" mit einem
Inhalt einer Zelle aus dem Tabellenblatt "Tabelle4" verbleichen willst
-sag mir welche Werte ob nur Zahlen oder auch Text in den zu vergleichenden
Zellen enthalten sein können -
Gruß Monika

Anzeige
AW: Inhalt in Tabellenblätter schreiben
14.05.2009 13:23:14
StefanS
Hi Monika,
werde gerade nicht so ganz schlau aus Deiner Ausführung - sorry!
Zu Deinen Fragen:
...ob Du wirklich den Inhalt einer Zelle aus den Tabellenblatt "Content" mit einem
Inhalt einer Zelle aus dem Tabellenblatt "Tabelle4" vergleichen willst JA
...sag mir welche Werte ob nur Zahlen oder auch Text in den zu vergleichenden
Zellen enthalten sein können nur Zahlen
Gruß, Stefan
AW: Inhalt in Tabellenblätter schreiben
14.05.2009 13:44:58
Monika
Hallo Stephan,
habe hier gerade kein Excel - so dass ich ohne Aufwand testen kann.
Ändere einfach versuchshalber einmal
If Worksheets("Content").Cells(I, 6) = Zelle Then
in
If Worksheets("Content").Cells(I, 6).value = Zelle.value Then
Ich vermute, bin mir aber nicht sicher, dass
If Worksheets("Content").Cells(I, 6)
ein Range-Objekt das die Zelle darstellt zurückgibt - und nicht den Wert der Zelle.
Den Wert der Zelle bekommst Du sicher, indem Du ausdrücklich mit .value
auf den Inhalt der Zelle zugreifst.
Gruß Monika
Anzeige
AW: Inhalt in Tabellenblätter schreiben
14.05.2009 13:59:22
StefanS
Hi Monika,
funktioniert soweit - super.
Jedoch beschreibt mir das Programm weiterhin 4 Register mit den Inhalt aus 11 (weil11 4-mal untereinander steht), anstatt einen Register mit 11 zu beschreiben und dann den nächsten Register mit dem Inhalt aus 12 zu beschrieben.
Ich werde noch verrückt.....
Stefan
AW: Inhalt in Tabellenblätter schreiben
14.05.2009 15:02:44
Monika
Hi Stefan,
irgendwie habe ich Schwierigkeiten die richtigen Fragen bzgl. dem was ich nicht verstehe
in einem Zug korrekt zu stellen.
In welcher der Tabellenblätter steht die 11 viermal untereinander?
-In dem Bereich in Tabelle4 den Du mit der For Each-Anweisung Zelle für Zelle bearbeitest oder
-Worksheets("Content").Cells(I, 6)
Ev. willst Du das hier erreichen
-Tabelle4 in Bereich jede Zelle der Reihe nach bearbeiten
-wenn in Tabelle4 eine neuer Wert steht (ein vom letzten bearbeiteten
abweichender,
willst Du in Tabelle content alle Zeilen duchsuchen
bis Du in Tabelle content die Zeile mit gleichem Wert in Spalte 6
gefunden hast.
(was Du im Moment nicht tust - weil ja auch schon der nächste
Du vergleichst immer nur den Wert der einen Zeile und nimmst
dann den nächsten Wert aus Bereich)
-Dann willst Du für diese Zeile Daten aus anderen Spalten der
Tabelle Content in ein neues Tabellenblatt einfügen.
Gruß Monika
(wir schaffen es schon noch uns zu verständigen -
ich habe hier auch schon einige gute Ratschläge erhalten)
Anzeige
AW: Inhalt in Tabellenblätter schreiben
14.05.2009 15:22:09
StefanS
Hallo Monika,
zu Deinen Fragen:
In welcher der Tabellenblätter steht die 11 viermal untereinander? - im Tabellenblatt Content welches Tablle4 ist
-In dem Bereich in Tabelle4 den Du mit der For Each-Anweisung Zelle für Zelle bearbeitest oder
-Worksheets("Content").Cells(I, 6)
Ev. willst Du das hier erreichen
-Tabelle4 in Bereich jede Zelle der Reihe nach bearbeiten JA
-wenn in Tabelle4 eine neuer Wert steht (ein vom letzten bearbeiteten
abweichender,
willst Du in Tabelle content alle Zeilen duchsuchen
bis Du in Tabelle content die Zeile mit gleichem Wert in Spalte 6
gefunden hast. JA
(was Du im Moment nicht tust - weil ja auch schon der nächste
Du vergleichst immer nur den Wert der einen Zeile und nimmst
dann den nächsten Wert aus Bereich)
-Dann willst Du für diese Zeile Daten aus anderen Spalten der
Tabelle Content in ein neues Tabellenblatt einfügen. JA
Mir ist gerade ein Fehler aufgefallen - siehe VBA-Code:

Sub C_Register_Fuellen()
' Uebertrag der Daten
Dim Bereich As Range
Dim Zelle As Range
Dim I As Integer
I = 1
Sheets("Register_1").Select
With Sheets("Content")
Set Bereich = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
End With
For Each Zelle In Bereich
If Worksheets("Content").Cells(I, 6).Value = Zelle.Value Then
I = I + 1
Worksheets("Register_" & I).Cells(21, 4) = Worksheets("Content").Cells(I, 5)
Worksheets("Register_" & I).Cells(24, 4) = Worksheets("Content").Cells(I, 2)
Worksheets("Register_" & I).Cells(30, 4) = Worksheets("Content").Cells(I, 4)
Worksheets("Register_" & I).Cells(27, 4) = Worksheets("Content").Cells(I, 3)
Worksheets("Register_" & I).Cells(11, 5) = Worksheets("Content").Cells(I, 6)
Worksheets("Register_" & I).Cells(15, 5) = Worksheets("Content").Cells(I, 1)
End If
Next Zelle
End Sub


Nur jetzt wird die Zellen mit dem Wert 1 nicht mehr übertragen!
Gruß, Stefan
P.S. Ich hoffe, dass ich nicht zu sehr nerve!

Anzeige
AW: Inhalt in Tabellenblätter schreiben
15.05.2009 09:10:23
Monika
Hallo Stefan,
leider erst heute die Antwort - gestern gab es mit dem Forumsserver scheinbar ein Problem - ich konnte meinen Beitrag nicht absenden - nach mehrmaligen Versuchen stand die Headline mehrmals drin - man konnte aber nicht auf den Beitrag zugreifen - heute ist er ganz weg.
Was meinst Du mit: "Nur jetzt wird die Zellen mit dem Wert 1 nicht mehr übertragen!" ?
Dass Du in der ersten Zeile einen Vergleichswert hast, und in Deiner bisherigen If-Anweisung dafür sorgst, daß nur Daten der Zeilen, bei denen der Wert der Spalte 6 diesem Vergleichswert entspricht, in ein Tabellenblatt Register ... übernommen wird?
Nun versuch ichs nochmal, Dir ein paar Änderungen einzubauen, so wie ich die Aufgabenstellung verstanden habe. Falls da noch ein kleiner Irrtum ist, siehst Du so zumindest das Prinzip, wie Du vermeiden kannst, daß mehrfache Einträge mehrfach übernommen. Mein Programm setzt voraus, daß die Einträge so sortiert sind, daß Mehrfacheinträge hintereinander stehen.
Sub C_Register_Fuellen()
' Uebertrag der Daten
Dim Bereich As Range
Dim Zelle As Range
Dim I As Integer
Dim Alt As Integer '---------------------
I = 1
Sheets("Register_1").Select
With Sheets("Content")
Set Bereich = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
End With
Alt = 0 '---- einen Wert zuweisen, der keinesfalls in der 1. zu vergleichenden Zeile steht
'---- (oder sicher nie vorkommt - Achtung, daß eine Leere Zelle nicht auch 0 zurückgibt
'---- da bin ich mir im Moment nicht sicher)
'--- damit der If auch im 1. Durchlauf der Schleife richtig greift
For Each Zelle In Bereich
'------ hier mit einer UND-Verknüpfung dafür sorgen, daß eine weitere Bedingung
'------ abgefragt wird (bewirkt im Gegensatz zu einer ODER-Verknüpfung),
'------daß beide Bedingungen erfüllt sein müssen
'-- Achtung, hier wird ein Integer verglichen, schon bei der Dimensionierung von Alt
'-- wurde davon ausgegangen daß es sich um keine Zeichenkette handelt
'-- sonst müßtest Du mit strcomp Zeichenkettenvergleich arbeiten
If Worksheets("Content").Cells(I, 6).Value = Zelle.Value AND _
Zelle.Value <> Alt _
Then
I = I + 1
Worksheets("Register_" & I).Cells(21, 4) = Worksheets("Content").Cells(I, 5)
Worksheets("Register_" & I).Cells(24, 4) = Worksheets("Content").Cells(I, 2)
Worksheets("Register_" & I).Cells(30, 4) = Worksheets("Content").Cells(I, 4)
Worksheets("Register_" & I).Cells(27, 4) = Worksheets("Content").Cells(I, 3)
Worksheets("Register_" & I).Cells(11, 5) = Worksheets("Content").Cells(I, 6)
Worksheets("Register_" & I).Cells(15, 5) = Worksheets("Content").Cells(I, 1)
End If
Next Zelle
So das war es für heute, bin heute den ganzen Tag nicht erreichbar.
Kannst ja falls noch Probleme bestehen und es für Dich eilig ist, Einzelfragen in ein neues Thread stellen, damit sich jemand darum kümmert.
Gruss Monika
PS:
Kannst Du eigentlich mit einem Debugger umgehen? Schau Dir diesbezüglich mal die Hilfe an, das lohnt sich bestimmt - gerade so kleine Programmausschnitte kann auch als Einsteiger super damit testen.
Da kannst Du Programmcode Befehl für Befehl abarbeiten und den Inhalt der jeweiligen Variablen und
den Wert von Ausdrücken beobachten.
Anzeige
AW: Inhalt in Tabellenblätter schreiben
15.05.2009 09:26:13
StefanS
Hi Monika,
danke nochmal für Deine Hilfe - schönes WE.
Gruß, Stefan
AW: Inhalt in Tabellenblätter schreiben
15.05.2009 09:26:51
Monika
Hallo Stefan,
Achtung - hier habe ich noch eine Anweisung ergänzt.
Alt = Zelle.value
Leider erst heute die Antwort - gestern gab es mit dem Forumsserver scheinbar ein Problem - ich konnte meinen Beitrag nicht absenden - nach mehrmaligen Versuchen stand die Headline mehrmals drin - man konnte aber nicht auf den Beitrag zugreifen - heute ist er ganz weg.
Was meinst Du mit: "Nur jetzt wird die Zellen mit dem Wert 1 nicht mehr übertragen!" ?
Dass Du in der ersten Zeile einen Vergleichswert hast, und in Deiner bisherigen If-Anweisung dafür sorgst, daß nur Daten der Zeilen, bei denen der Wert der Spalte 6 diesem Vergleichswert entspricht, in ein Tabellenblatt Register ... übernommen wird?
Nun versuch ichs nochmal, Dir ein paar Änderungen einzubauen, so wie ich die Aufgabenstellung verstanden habe. Falls da noch ein kleiner Irrtum ist, siehst Du so zumindest das Prinzip, wie Du vermeiden kannst, daß mehrfache Einträge mehrfach übernommen. Mein Programm setzt voraus, daß die Einträge so sortiert sind, daß Mehrfacheinträge hintereinander stehen.
Sub C_Register_Fuellen()
' Uebertrag der Daten
Dim Bereich As Range
Dim Zelle As Range
Dim I As Integer
Dim Alt As Integer '---------------------
I = 1
Sheets("Register_1").Select
With Sheets("Content")
Set Bereich = .Range(.Cells(1, 6), .Cells(.Rows.Count, 6).End(xlUp))
End With
Alt = 0 '---- einen Wert zuweisen, der keinesfalls in der 1. zu vergleichenden
'---- Zeile steht (oder sicher nie vorkommt - Achtung, daß eine
'---- leere Zelle nicht auch 0 zurückgibt, da bin ich mir im Moment
'-----nicht sicher)
'--- damit der If auch im 1. Durchlauf der Schleife richtig greift
For Each Zelle In Bereich
'------ hier mit einer UND-Verknüpfung dafür sorgen, daß eine weitere
'------ Bedingung abgefragt wird (bewirkt im Gegensatz zu einer
'------ODER-Verknüpfung), daß beide Bedingungen erfüllt sein
'------müssen.
'-- Achtung, hier wird ein Integer verglichen, schon bei der
'-- Dimensionierung von Alt wurde davon ausgegangen daß es
'-- sich um keine Zeichenkette handelt, sonst müßtest Du mit
'-- strcomp Zeichenkettenvergleich arbeiten
If Worksheets("Content").Cells(I, 6).Value = Zelle.Value AND _
Zelle.Value <> Alt _
Then
I = I + 1
Worksheets("Register_" & I).Cells(21, 4) = Worksheets("Content").Cells(I, 5)
Worksheets("Register_" & I).Cells(24, 4) = Worksheets("Content").Cells(I, 2)
Worksheets("Register_" & I).Cells(30, 4) = Worksheets("Content").Cells(I, 4)
Worksheets("Register_" & I).Cells(27, 4) = Worksheets("Content").Cells(I, 3)
Worksheets("Register_" & I).Cells(11, 5) = Worksheets("Content").Cells(I, 6)
Worksheets("Register_" & I).Cells(15, 5) = Worksheets("Content").Cells(I, 1)
Alt = Zelle.Value '----------- den aktuellen Wert als Alten Wert merken
'----------- für die nächste Verarbeitungsschleife!
End If
Next Zelle
So das war es für heute, bin heute den ganzen Tag nicht erreichbar.
Kannst ja falls noch Probleme bestehen und es für Dich eilig ist, Einzelfragen in ein neues Thread stellen, damit sich jemand darum kümmert.
Gruss Monika
PS:
Kannst Du eigentlich mit einem Debugger umgehen? Schau Dir diesbezüglich mal die Hilfe an, das lohnt sich bestimmt - gerade so kleine Programmausschnitte kann auch als Einsteiger super damit testen.
Da kannst Du Programmcode Befehl für Befehl abarbeiten und den Inhalt der jeweiligen Variablen und
den Wert von Ausdrücken beobachten.
Anzeige
AW: Inhalt in Tabellenblätter schreiben
16.05.2009 19:10:47
Monika
Hallo Stefan,
heute ist mir noch eingefallen, daß ich Dir eine Info mitschicken wollte, als die Server-Probleme bestanden,
dies dann aber scheinbar irgendwie verloren ging.
Die If-Anweisung hat soweit ich das richtig lese bei Cells(I, 6)
die Zeile durch die Variable I und nicht die Ziffer 1 bestimmt wird.
Wäre das so, hättest Du bei den Schleifendurchläufen folgende Zellen angesprochen
Schleifendurchgang: 1
Variable i wenn if erfüllt war: 1
Du vergleichst Worksheets("Content").Cells(1, 6).Value
mit Zelle.Value Zelle zeigt im Durchlauf auch auf Zeile1 Spalte 6
Mit For Each wird ja jede Zelle von Bereich der Reihe nach über den Variablennamen Zelle adressiert.
Das würde bedeuten, Dein Vergleich vergleicht den Inhalt der gleichen Zelle nur über eine andere Art wird auf die Zelle verwiesen.
Frage:
Hast Du schon einmal mit dem Debugger gearbeitet?
Wenn Du magst helfe ich Dir bei den ersten Schritten, da findest Du solche Fehler sofort, da Du Befehl für Befehl prüfen kannst.
Dies hier wäre gerade ein richtig schönes Beispiel,
vor die For Each-Anweisung die folgende Anweisung einfügen:
Stop
Dann hält Dein Programm an und zeigt den Programmcode im Debugger an - Du kannst die Fenstergröße so ändern, daß Du gleichzeitig den Debugger und das Excel-Tabellenblatt siehst.
Nun ist die Zeile in der Stop steht markiert, Dein Programm ist angehalten.
Mit F8 kannst Du immer den nächsten Befehl ausführen (es geht auch mehr - aber bei dem kleinen Programm und zur 1. Übung nicht nötig)
Immer die nächste zu bearbeitende Programmzeile ist markiert. Wenn Du dann F8 drückst wird diese ausgeführt.
Du kannst nun mit dem Mauszeiger über eine Variable oder einen Ausdruck fahren und etwas warten, dann siehst Du den Wert den die Variable aktuell hat. (und zwar bis zu dem Befehl, bis zu dem Du das Programm abgearbeitet hast, sprich eine Variable die Ihren Wert erst nach der Stelle an der Du Stop eingefügt hast Ihren Wert erhält, zeigt noch nichts an - dann musst Du erst mit F8 weistere Programmschritte abarbeiten, bis der Wert gesetzt wurde, dann siehst Du den neuen Wert)
Gehe in dem Du immer wieder F8 drückst bis auf die If-Anweisung, wenn Du dann noch einmal F8 drückst siehst Du ob die Befehle im If-Block abgearbeitet werden, wenn nicht kannst Du mit der Maus auf einen Teil der If-Anweisung zeigen
z.B. auf Worksheets("Content").Cells(1, 6).Value und siehst den Wert der hier verglichen wird
oder Du zeigst auf Zelle.Value und siehst den Vergleichswert
so kannst Du auch sehen, welchen Wert z.B. die Variable i beim Schleifendurchlauf hat
Das alles geht noch besser - Du kannst Variableninhalte ohne mit der Maus darauf zeigen zu müssen,
in einem extra Fenster immer mitverfolgen(Ansicht Lokalfenster) - aber für den Anfang mal nicht soviel.
Wenn Du keine Lust hast das auszuprobieren ist es auch gut - dachte nur das würde Dir grundsätzlich bei der Fehlersuche in Programmen helfen.
Falls es Dich interessiert:
http://www.ku-eichstaett.de/Fakultaeten/WWF/Lehrstuehle/WI/Lehre/WI_bsc_VBA/HF_sections/content/106673247398977/Skript_Wirtschaftsinformatik
II WS 08089_Teil 1.pdf Seite 32
Was nicht heißen soll, daß ich Dir nicht Fragen direkt beantworte.
Gruß Monika

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige