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

Wenn Spalte leer dann, ansonsten ...

Wenn Spalte leer dann, ansonsten ...
19.11.2013 08:19:54
flacus
Guten Morgen,
ich scheitere gerade an einer einfachen Schleife. Wenn die Spalte D leer ist, dann soll Zelle F6 in Tabelle 2 leer bleiben, ansonsten soll ein X eingetragen werden. Hier der Auszug von meinem Code. Bisher wird das Kreuzchen gesetzt, aber ständig wieder überschrieben, wo es aber hingehört.
If .Cells(iZeile, 4).Value Empty Then
Worksheets("Tabelle2").Cells(6, 6) = "x"
End If
If Not .Cells(iZeile, 4).Value Empty Then
Worksheets("Tabelle2").Cells(6, 6) = ""
End If

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wenn Spalte leer dann, ansonsten ...
19.11.2013 08:38:45
hary
Moin
So?
Worksheets("Tabelle2").Cells(6, 6) = IIf(Application.CountIf(.Columns(4), ""), "x", "")

gruss hary

oder mit "else . . ." owt
19.11.2013 08:51:24
GuentherH
.

AW: Wenn Spalte leer dann, ansonsten ...
19.11.2013 09:48:28
flacus
Das funktioniert leider nicht so, wie ich es wollte oder ich weiß nicht wie ich es in meinem Code richtig einbauen soll. Vielleicht hilft doch eher eine Beispiel Datei. Bei der Beispiel Datei soll es nun so sein, wenn Spalte C leer ist, dann gibt es kein x und andersrum.
https://www.herber.de/bbs/user/88149.xlsm
Grüße

AW: Wenn Spalte leer dann, ansonsten ...
19.11.2013 10:27:04
hary
Moin
Koennen noch mehr Module in Blatt2 stehen?
gruss hary

Anzeige
AW: Bsp. Code
19.11.2013 10:33:07
hary
Moin nochmal
Muss jetzt weg. Vlt hilft es.
Sub Xsetzen()
Dim a As Variant
a = Application.Match(Worksheets("Tabelle2").Range("B4"), Columns(1), 0)
If IsNumeric(a) Then
With Worksheets("Tabelle1").Cells(a, 1)
Worksheets("Tabelle2").Cells(6, 6) = IIf(Application.CountIf(Cells(.CurrentRegion.Row, 3). _
Resize(.CurrentRegion.Rows.Count), ""), "x", "")
End With
Else
MsgBox "Modul nicht vorhanden"
End If
End Sub

gruss hary

AW: Wenn Spalte leer dann, ansonsten ...
19.11.2013 10:37:01
flacus
Ich geh mal davon aus, du meinst Blatt 1. Ja es können auch mehrere Module sein.
Wenn ich das bisschen Code von mir eingebaut habe, dann macht er fast alles richtig, nur bei Modul 4 nicht. Es wird scheinbar nur auf die erste Zeile geschaut, ob was darin steht.
Grüße
If .Cells(iZeile, 3).Value Empty Then
Worksheets("Tabelle2").Cells(5, 3) = "x"
End If
If Not .Cells(iZeile, 3).Value Empty Then
Worksheets("Tabelle2").Cells(5, 3) = ""
End If

Anzeige
AW: Wenn Spalte leer dann, ansonsten ...
19.11.2013 10:55:07
flacus
Hi Hary, das hat mich leider auch nicht weiter gebracht.

Läuft der PgmAusschnitt zyklisch, ...
19.11.2013 14:13:09
Luc:-?
…Flacus?
Dann wäre nämlich klar, dass Worksheets("Tabelle2").Cells(6, 6) immer wieder überschrieben wird, denn iZeile variiert die Zeile der Quelle. Außerdem schreibt man den Vgl nicht so, sondern verwendet die vbFkt IsEmpty(…).
Unter der Voraussetzung, dass es sich um einen zyklischen Vgl handelt, sollte/könnte das wie folgt geschrieben wdn:
For Each zelle In .Range("D1:D…")
If Not IsEmpty(zelle) Then
Worksheets("Tabelle2").Cells(6, 6) = "x": Exit For
End If
Next zelle
Damit kann ein 1× gesetztes x nicht wieder überschrieben wdn. Das Setzen von LeerString führte nämlich zum Löschen des x.
Gruß Luc :-?

Anzeige
AW: Läuft der PgmAusschnitt zyklisch, ...
19.11.2013 15:10:12
flacus
Hallo Luc,
danke für deine Erklärung. Und ja, das ganze läuft zyklisch. Ich habe deinen Code abgeändert eingebaut, aber wahrscheinlich fehlerhaft. Mir wird mein x dauerhauft überschrieben. Ich glaube, die Lösung ist nicht weit entfernt. :) Ich brauche trotzdem nochmal Hilfe.
Grüße
For Each zelle In .Range("C8:C100")
If Not IsEmpty(zelle) Then
Worksheets("Tabelle2").Cells(5, 3) = "x": Exit For
End If
If IsEmpty(Zelle) Then
Worksheets("Tabelle2").Cells(5, 3) = "": Exit For
End If
Next Zelle

Deine Ergänzung ist überflüssig, ...
19.11.2013 16:26:36
Luc:-?
…flacus!
Das Exit For bricht die Schleife ab, wenn ein x geschrieben wurde, denn du willst ja wohl wissen, ob überhpt ein Wert enthalten ist oder die ganze Spalte leer ist.
Deine Ergänzung bewirkt genau dasselbe, nur wird dann gelöscht. Es wird also nichts überschrieben, sondern es kommt so nur darauf an, was in C8 steht; ist C8 leer wird Tabelle2!C5 gelöscht, anderenfalls ein x notiert. Damit wäre dann der ganze Zyklus überflüssig.
Wenn du also unbedingt (etwas evtl bereits Vorhandenes) löschen musst, sähe das so aus:
Const adRelBer$ = "C8:C100", adZZelle$ = "C5", naRelZTab$ = "Tabelle2"
…
For Each zelle In .Range(adRelBer)
With Worksheets(naRelZTab).Range(adZZelle)
If IsEmpty(zelle) Then
If Not IsEmpty(.Value) Then .ClearContents
Else: .Value = "x": Exit For
End If
End With
Next zelle
Die Angabe von Konstanten für Adressen u.a. im Pgm benutzte feste Werte am PgmAnfang ist anzuraten, weil so das Pgm leichter und schneller an evtl zukünftige Änderungen angepasst wdn kann.
Gruß Luc :-?
Besser informiert mit …

Anzeige
AW: Deine Ergänzung ist überflüssig, ...
20.11.2013 08:11:04
flacus
Hey Luc,
danke für die super Erklärung und für den Code, dass hilft mir schon ungemein. Trotzdessen brauche ich ein letztes mal Hilfe. Ich bekomme den Code nicht richtig in mein vorhandenes Makro eingebaut. Demzufolge will das irgendwie nicht mit den Kreuzchen funktionieren. Wenn ich mir die Einzelschritte anschaue, dann sieht das eher nach blödsinn aus. Wie macht man es richtig?
https://www.herber.de/bbs/user/88157.xlsm
Grüße
flacus

Ich arbeite dran, ...
20.11.2013 19:16:07
Luc:-?
…flacus;
aber hattest du erwähnt, dass es sich real um ein DruckPgm handelt und nicht um die x-Signierung einer (immer gleichen) Zelle? Finde keinen Hinweis auf Letzteres in deinem Pgm!
Gruß Luc :-?

Anzeige
AW: Ich arbeite dran, ...
21.11.2013 07:28:42
flacus
Hi,
ja es handelt sich um ein Druckmakro, wo ich versuchen wollte das einzubauen. Erwähnt habe ich das nicht, sorry. Ich habe mir das wohl zu einfach vorgestellt. :)
Etwas schwierig zu erklären, wozu die x-Signierung im Druckmakro benötigt wird. Das x soll aussagen, dass es zu Druck 1 (Modul 1-5), noch einen dazugehörigen Druck 2 (....) gibt. Das soll aber mal außen vor sein.
Gruß

So wird das nichts, ...
22.11.2013 04:11:59
Luc:-?
…flacus;
ich kann mich des Gefühls nicht erwehren, von falschen Voraussetzungen ausgegangen zu sein, was deiner TeilInfo zu verdanken ist. Dein Pgm sieht so anders aus als das, was du ursprgl gefragt hast (auch hast du zwischendurch mal eben die Bezugsadressen geändert), dass ich höchstens sagen kann, setze meinen Zyklus vor deinen! Aber ob das die angestrebte Lösung ist…?
Schreibe doch einfach mal, welcher CodeTeil nun wirklich ersetzt wdn soll, nebst genauer Angabe der ZellBezüge (außerdem sieht dein Pgm etwas chaotisch aus → Einrückungen → Tab-Taste benutzen)! So macht das jedenfalls keine Freude… :-/
Morrn, Luc :-?

Anzeige
AW: So wird das nichts, ...
22.11.2013 11:02:24
flacus
Hallo,
also erst mal Danke für deine Bemühungen. Ich bin noch Leie und es ist noch nicht ganz einfach manche Dinge in Worte zu fassen. Von falschen Voraussetzungen würde ich nicht reden, eher von einer schlechten Erklärung meinerseits. Mein Ziel ist es nicht etwas von dem Druckmakro zu ersetzen, sondern etwas hinzufügen. Den Druckmakro habe ich bewusst weggelassen, um mich selbst zu testen, wie ich den Spaß in meinen eigentlichen Makro einbaue, was dann doch nicht geklappt hat.
Das bisschen Quellcode zu Beginn des Threads hat eingebaut schon fast das gemacht, was es sollte, nämlich ein x an eine bestimmte Stelle in Tabelle 2 einzufügen bzw. keins bei bestimmter Bedingung. Wenn die Spalte C gefüllt ist, dann gibt es ein X, ansonsten soll es wieder gelöscht werden.
Ich habe den Quellcode fürs Lesen benutzerfreundlicher gemacht. Was ich genau für Angaben zu den Zellbezügen machen soll, weiß ich leider nicht.
https://www.herber.de/bbs/user/88208.xlsm
Grüße

Anzeige
So, hat etwas gedauert (auch wg diverser ...
25.11.2013 19:10:23
Luc:-?
…anderer Ablenkungen, Auseinandersetzungen und Aufgaben, flacus; ;-]
aber, falls ich das alles richtig interpretiere und du nur feststellen willst, ob über den Löschbereich hinaus in C des Ausgabebereichs noch Daten vorhanden sind, könnte das mit Folgendem feststellbar sein:
Option Explicit
Const naRelZTab$ = "Tabelle2"
Private Sub AusgabeLeeren()
Const adDelBer$ = "A8:C60"
Sheets(naRelZTab).Range(adDelBer).Cells.Delete
End Sub
Sub Drucken()
Const adRelBer$ = "C8:C100", adZZelle$ = "C5", naRelQTab$ = "Tabelle1"
Dim iZeile As Long, iZeileAusgabe As Long, lAnzahl As Long, lngZeile_L As Long
Dim iDruck As Boolean, lAnzahl2 As String
Dim wksAusgabe As Worksheet, zelle As Range
With Application
.ScreenUpdating = False
End With
AusgabeLeeren
With ThisWorkbook.Worksheets(naRelQTab)
Set wksAusgabe = ThisWorkbook.Worksheets(naRelZTab)
With wksAusgabe.Range(adZZelle)
If Not IsEmpty(.Value) Then .ClearContents
For Each zelle In wksAusgabe.Range(adRelBer)
If Not IsEmpty(zelle) Then .Value = "x": Exit For
Next zelle
If Not zelle Is Nothing Then Set zelle = Nothing
End With
'letzte Zeile mit Daten
…
Allerdings weiß ich nicht, ob du das vor dem ErstDruck oder erst danach feststellen willst (während des Drucks wird ja auch schon zyklisch die Ausgabe geleert!). Das musst du wissen und ggf erneut fragen (hier ist nämlich ab heute um Mitternacht Schluss)!
Gruß Luc :-?
Anzeige

368 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige