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

Zellen in Schleife variabel ansprechen

Zellen in Schleife variabel ansprechen
11.04.2014 16:29:38
Heinz
Hallo Gemeinde,
ih habe ein Workbook, in dem es in allen Sheets verschiedene fest definierte Pflichtfelder gibt. Nun möchte ich über eine Schleife diese Zellen ansprechen um abzufragen, ob diese befüllt sind. Klingt simpel und ist es auch, aber ich hab n Brett vorm Kopf :o
SO funktioniert es natürlich immer nur für den ersten Range ("B6"). Ich wollte die Variable "Zelle(n)" "variabel" machen, hab es aber nicht hingekriegt:
Set Wb = ActiveWorkbook
Dim n As Integer, Anz As Integer
' PRÜFUNG PFLICHTEINTRÄGE ALLE
Anz = 3 'Anzahl Pflichtfelder im sheet
Zelle1 = "B6"
Zelle2 = "C11"
Zelle3 = "C12"
For Each Sh In Wb.Worksheets
For n = 1 To Anz
If Sh.Range(Zelle1).Value = "" Then
MsgBox "Pflichteintrag fehlt in: " & Sh.Name & " " & Sh.Range(Zelle1).Address
End If
Next n
Next Sh
Vielleicht denk ich auch völlig quer.. Danke schonmal!
Heinz

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen in Schleife variabel ansprechen
11.04.2014 17:27:20
Tino
Hallo,
hier mal eine Variante.
Sub test()
Dim n As Integer
Dim Wb As Workbook, Sh As Worksheet
Dim sFehler$, rngRange As Range
Dim Zellen(1 To 3) As String 'Array an Pflichtfelder anpassen
Set Wb = ActiveWorkbook
' PRÜFUNG PFLICHTEINTRÄGE ALLE
Zellen(1) = "B6"
Zellen(2) = "C11"
Zellen(3) = "C12"
For Each Sh In Wb.Worksheets
For n = LBound(Zellen) To UBound(Zellen)
If Sh.Range(Zellen(n)).Value = "" Then
If rngRange Is Nothing Then
Set rngRange = Sh.Range(Zellen(n))
Else
Set rngRange = Union(rngRange, Sh.Range(Zellen(n)))
End If
End If
Next n
If Not rngRange Is Nothing Then
sFehler = sFehler & Sh.Name & " " & rngRange.Address & vbCr
Set rngRange = Nothing
End If
Next Sh
If sFehler  "" Then
MsgBox "Pflichteintrag fehlt in: " & vbCr & vbCr & Left$(sFehler, Len(sFehler) - 1)
End If
End Sub
Gruß Tino

Anzeige
AW: Zellen in Schleife variabel ansprechen
14.04.2014 14:45:02
Heinz
Schön, großen Dank dafür! Das funktioniert auch recht schick. Einzig hinderlich ist nur der feste Array. Denn: Die Pflichtfelder sind von sheet zu sheet unterschiedlich. Also wollte ich diese "Zellen(1), ..." in einer vorgeschalteten Prozedur für jeden sheet definieren und dann in der einen Schleife darauf Bezug nehmen. Das geht aber nicht, da der zusammengesetzte String (Array) innerhalb der Schleifenprozedur deklariert werden muß, richtig? Hmm.. Viell. gibt ja doch eine Möglichkeit, den Array aus der "Vor"-Prodezur an die Schleifenprozedur zu übergeben? Da ich hier nicht weitergekommen bin, habe ich auch noch in eine andere Richtung gedacht:
Jedes Pflichtfeld in meinem Wb ist bedingt formatiert mit der Regel: Ausfüllen=Rot, wenn Eintrag=0. Also hab ich eine Schleife gebastelt, die diese Zellen aufspürt und meldet wenn kein Eintrag drin steht: Diese hat nur den Nachteil, dass sie eben unperformant ist, weil sie Zeile für Zeile und Spalte für Spalte durchläuft:
Sub Test1() 'TEST Bedingte Formate für Plausiprüfung benutzen (Zellenschleife)
'(Bedingtes Format Ausfüllen=ROT muß an Prio(1) stehen)
Dim AnzBedF As Integer, z As Integer
zGes = 104 'diese Werte würde ich aus der "Vorprozedur" übergeben
sGes = 42
Application.ScreenUpdating = False 'das machts zwar etwas fixer, aber bei vielen sheets...
AnzBedF = Cells.FormatConditions.Count
If AnzBedF > 0 Then
For z = 1 To zGes
For s = 1 To sGes
If Cells(z, s).FormatConditions.Count > 0 Then
Cells(z, s).Select
With Cells(z, s).FormatConditions(1)
If .Interior.Color = 255 And .Formula1 = "=0" And _
Cells(z, s).Value = "" Then
MsgBox "Leeres Pflichtfeld in: " & s & "/" & z
Exit Sub
End If
End With
End If
Next s
Next z
End If
Application.ScreenUpdating = True
End Sub
So dachte ich mir, dass ich die Bedingt formatierten Zellen eines sheets direkt anspreche. Aber das geht nur bis zur Nummer eben. Welche Zellen dahinter stehen, quasi an den "wird angewendet auf .." - Zellbezug komm ich nicht ran, oder?
Sub Test2() 'TEST Bedingte Formate für Plausiprüfung benutzen
Set bedf = Cells.FormatConditions
For bedf = 1 To AnzBedF
With Cells.FormatConditions(bedf)
If .Interior.Color = 255 And .Formula1 = "=0" Then
MsgBox "Bed.Format-Nr.: " & bedf
End If
End With
Next bedf
End Sub
Die bessere Variante wäre sicher die erste oben über den Array, zumal das Ganze auch unter Excel 11 laufen soll und ich weiß. dass ab Excel 2007 die Bedingten Formatierungen ganz schön angebohrt wurden.
Gruß Heinz

Anzeige
AW: Zellen in Schleife variabel ansprechen
15.04.2014 10:23:29
Tino
Hallo,
wenn die Zellen bekannt sind, könnte man dies auch so machen.
In der Zeile "PRÜFUNG PFLICHTEINTRÄGE ALLE" muss für jede Tabelle
der Zellebereich einzeln angegeben werden.
Sub test()
Dim n As Integer
Dim Wb As Workbook, Sh As Worksheet
Dim sFehler$, rngRange As Range, rngTmp As Range
Dim Zellen(), varTemp 'Array an Pflichtfelder anpassen
Set Wb = ActiveWorkbook
' PRÜFUNG PFLICHTEINTRÄGE ALLE
Zellen = Array("Tabelle1!C7:C9,D9,E11:E13", "Tabelle2!B6,C11:C12,A2", "Tabelle3!A5")
For n = LBound(Zellen) To UBound(Zellen)
varTemp = Split(Zellen(n), "!")
For Each rngTmp In Wb.Sheets(varTemp(0)).Range(varTemp(1)).Cells
If rngTmp.Value = "" Then
If rngRange Is Nothing Then
Set rngRange = rngTmp
Else
Set rngRange = Union(rngRange, rngTmp)
End If
End If
Next rngTmp
If Not rngRange Is Nothing Then
sFehler = sFehler & rngRange.Parent.Name & " " & rngRange.Address(0, 0) & vbCr
Set rngRange = Nothing
End If
Next n
If sFehler  "" Then
MsgBox "Pflichteintrag fehlt in: " & vbCr & vbCr & Left$(sFehler, Len(sFehler) - 1)
End If
End Sub
Gruß Tino
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige