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

Fehler in Range?

Fehler in Range?
27.10.2015 21:57:24
PQuest:-)
Hallo,
bei folgendem Code
Sub CalColor()
Dim CalRow As Long, CalLastRow As Long 'first/last Row Calendar
Dim CalCol As Long, CalLastCol As Long 'first/last Column Calendar
Dim LoPRow As Long, LoPLastRow As Long 'first/last Row LoP
Dim LoPCol As Long, LoPLastCol As Long 'first/last Column LoP
Dim wsLoP As Worksheet, wsCal As Worksheet
Dim CalDay As Range 'Date from Calendar
Dim Counter As Integer 'Counter for hits in LoP
Dim rngLoPDates As Range   'Date Area in LoP
Dim rngCalArea As Range 'Calendar Area
Dim rngValence As Range 'Row with valence of columns
Set wsLoP = Worksheets("ListOfPatients")
Set wsCal = Worksheets("Calendar")
CalRow = 3
CalCol = 1
CalLastRow = wsCal.Cells(Rows.Count, CalCol).End(xlUp).Row
CalLastCol = wsCal.Cells(CalRow, Columns.Count).End(xlToLeft).Column
Set rngCalArea = Range(Cells(CalRow, CalCol), Cells(CalLastRow, CalLastCol))
LoPRow = 8
LoPLastRow = wsLoP.Cells(Rows.Count, CalRow).End(xlUp).Row
LoPCol = 4
LoPLastCol = 20
Set rngValence = Range(Cells(6, LoPCol), Cells(6, LoPLastCol))
Set rngLoPDates = Range(Cells(LoPRow, LoPCol), Cells(LoPLastRow, LoPLastCol))
For Each CalDay In Range(rngCalArea)
Counter = DaysCount(CalDay, rngLoPDates, rngValence)
If Counter > 1 Then
CalDay.Interior.ColorIndex = 1 'big mistake workamount overflow
ElseIf Counter = 0.9 Or Counter = 1 Then
CalDay.Interior.ColorIndex = 2
ElseIf Counter = 0.6 Then
CalDay.Interior.ColorIndex = 3
ElseIf Counter = 0.3 Then
CalDay.Interior.ColorIndex = 4
End If
Next 'CalDay
End Sub
Steigt Excel mit der Fehlermeldung
Laufzeitfehler 1004 Anwendungs oder objektdefinierter Fehler
in der Zeile For Each CalDay In Range(rngCalArea)
aus.
Könnte mal jemand schauen, ob ich da einen Syntaxfehler eingebaut habe, oder ob es mal wieder meine verquerte Logik ist, die mir da ins Kreuz tritt?
Danke,
PQuest:-)

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler in Range?
27.10.2015 22:21:07
Peter
Hallo PQuest,
ich würde es einmal mit einer genaueren Referenzierung insbesondere bei den Set Befehlen versuchen
Set rngCalArea = Range(Cells(CalRow, CalCol), Cells(CalLastRow, CalLastCol))
In welchem Tabellenblatt bist du denn da gerade?
Das trifft ebenso auf die anderen Set zu und auch in dem For Each calDay In Range könnte evtl. eine Worksheet-Angabe gebrauchen.
Gruß Peter

AW: Fehler in Range?
27.10.2015 22:45:15
Luschi
Hallo PQuest,
Du mußt sauberer referenzieren:
With wsCal
   CalLastRow = .Cells(.Rows.Count, CalCol).End(xlUp).Row
   CalLastCol = .Cells(CalRow, .Columns.Count).End(xlToLeft).Column
   Set rngCalArea = .Range(.Cells(CalRow, CalCol), .Cells(CalLastRow, CalLastCol))
End With
Da mit 'rngCalArea' bereits ein Range-Objekt ist genügt:
For Each CalDay In rngCalArea
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Fehler in Range?
28.10.2015 11:52:32
PQuest:-)
Yepp, das war's. ABER:
Vielleicht erst mal kurz, was passieren soll:
Wenn im Tabellenblatt "ListofPatients" etwas geändert wird, soll die Sub ausgeführt werden.
Sub übergibt Wert an Funktion (danke für die Funktion nochmal an Daniel), Funktion liefert Ergebnis zurück und Zellen werden aufgrund des Ergebnisses eingefärbt.
Private Sub Worksheet_Change(ByVal Target As Range) 'CalColor()
Dim CalRow As Long, CalLastRow As Long 'first/last Row Calendar
Dim CalCol As Long, CalLastCol As Long 'first/last Column Calendar
Dim LoPRow As Long, LoPLastRow As Long 'first/last Row LoP
Dim LoPCol As Long, LoPLastCol As Long 'first/last Column LoP
Dim wsLoP As Worksheet, wsCal As Worksheet
Dim CalDay As Range 'Date from Calendar
Dim Counter As Integer 'Counter for hits in LoP
Dim rngLoPDates As Range   'Date Area in LoP
Dim rngCalArea As Range 'Calendar Area
Dim rngValence As Range 'Row with valence of columns
Set wsLoP = Worksheets("ListOfPatients")
Set wsCal = Worksheets("Calendar")
CalRow = 3
CalCol = 1
With wsCal
CalLastRow = .Cells(Rows.Count, CalCol).End(xlUp).Row
CalLastCol = .Cells(CalRow, Columns.Count).End(xlToLeft).Column
Set rngCalArea = .Range(.Cells(CalRow, CalCol), .Cells(CalLastRow, CalLastCol))
End With
LoPRow = 8
LoPCol = 4
LoPLastCol = 20
With wsLoP
LoPLastRow = .Cells(Rows.Count, CalRow).End(xlUp).Row
Set rngValence = .Range(.Cells(6, LoPCol), .Cells(6, LoPLastCol))
Set rngLoPDates = .Range(.Cells(LoPRow, LoPCol), .Cells(LoPLastRow, LoPLastCol))
End With
For Each CalDay In rngCalArea
Counter = DaysCount(CalDay, rngLoPDates, rngValence)
'If Counter > 1 Then
'CalDay.Interior.ColorIndex = 1 'big mistake workamount overflow
If Counter = 0.9 Or Counter = 1 Then
CalDay.Interior.ColorIndex = 2
ElseIf Counter = 0.6 Then
CalDay.Interior.ColorIndex = 3
ElseIf Counter = 0.3 Then
CalDay.Interior.ColorIndex = 4
End If
Next 'CalDay
End Sub

Die Funktion macht was sie soll. Ich habe sie in einem Tabellenblatt in eine Zelle eingefügt und es wird das richtige Ergebnis angezeigt.
Function DaysCount(sDate, DateArea As Range, ColValence As Range) As Double
Dim arrDateArea
Dim arrColValence
Dim r As Long, c As Long 'c=Column, r=Row
Dim Val As Double
arrDateArea = DateArea.Value 'Array DateArea mit DateArea füllen (Datumsbereich im LoP)
arrColValence = ColValence.Value 'Array ColValence mit ColValence füllen (Spaltenwertigkeit)
For r = 1 To UBound(arrDateArea, 1)
Val = 0
For c = 1 To UBound(arrDateArea, 2)
If arrDateArea(r, c) = sDate Then _
Val = WorksheetFunction.Max(Val, arrColValence(1, c))
Next
DaysCount = DaysCount + Val
Next
End Function
Einziges Ergebnis, was ich bisher erreicht habe: Alle leeren Zellen im Bereich wurden schwarz gefärbt. Darum habe ich den entsprechenden Befehl rausgenommen.
Wo liegt mein Fehler? Warum werden die Zellen nicht eingefärbt?
Gruß,
PQuest:-)

Anzeige
Dim Counter As Integer
28.10.2015 15:23:03
Luc:-?
Da liegt dein Fehler, Peter!
Du übergibst Counter aber Double-Werte! Alles, was <1 ist, wird deshalb auf 0 abgerundet.
Tipp: Außerdem arbeitest du mit Xl14/2010. Da solltest du .Color verwenden, wenn du nicht die eine der 56 VBA-StandardIndexFarben haben willst, was hier aber nicht der Fall zu sein scheint.
Gruß, Luc :-?
Besser informiert mit …

AW: Dim Counter As Integer
28.10.2015 20:39:29
PQuest:-)
Hallo Luc:-?
besten Dank.
Da ich weiss, dass jede Lösung bei mir neue Fragen aufwirft, sage iuch an dieser Stelle mal: "Bis nachher." :-)
PQuest:-)

Anzeige
AW: Dim Counter As Integer
29.10.2015 00:26:50
PQuest:-)
Sorry, Frage war natürlich beantwortet. Da hat sich ein Klick einfach so eingeschlichen :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige