PDA

Vollständige Version anzeigen : Inputbox ersetzt = Laufzeitfehler


Monty Burns
14.03.2009, 14:52
Hallo

Ich habe folgenden Code:
Sub Schnittpunkt1()

Dim zeile As Long
Dim spalte As Long
Dim zeilemax As Long
Dim farbe As String
Dim zelle As Range
Dim bereich As Range
Dim x As Variant

spalte = InputBox("Geben Sie hier die Spalte an, in der gesucht werden soll:", vbOKCancel)
farbe = InputBox("Geben Sie hier die gesuchte Farbe ein:", vbOKCancel)

Set bereich = Worksheets("Tabelle1").Range("A1:Z100")

For Each zelle In bereich
If zelle.Interior.ColorIndex = farbe Then
x = zelle.Address
If IsNumeric(Right(x, 1)) Then
If Mid(x, Len(x) - 1, 1) <> " " Then
x = Right(x, Len(x) - 3)
Debug.Print x
End If
Cells(x, spalte).Interior.ColorIndex = farbe
End If
End If

Next zelle
End Sub

' Hiermit kann man die Schnittstelle rot unterlegen.
' Man gibt die Spalte ein, z. B. 7 für Spalte C
' Man gibt die Farbe vor, z. B. 6 für gelb
' Die Zelle, an der die Zeile auf die Spalte trifft - nicht umgekehrt! - wird rot

Testhalber habe ich in Tabelle1 in der Zelle C13 einen gelben Hintergrund eingestellt. Hiermit finde ich den Schnittpunkt in der Spalte 7 ( also G ) und markiere diesen ebenfalls gelb.

Das paßt mir aber nicht... ich mußte mal wieder dran rumspielen...

Jetzt sieht die Formel so aus:
Sub SchnittpunktEinfachDieZelleAnklickenUndMakroStarten()

Dim zeile As Long
Dim spalte As Variant

Dim zeilemax As Long
Dim farbe As Long
Dim zelle As Range
Dim bereich As Range
Dim x As Variant

farbe = ActiveCell.Interior.ColorIndex
spalte = ActiveCell.Address
spalte = Right(spalte, Len(spalte) - 3)
Debug.Print spalte
Debug.Print farbe
Set bereich = Worksheets("Tabelle1").Range("A1:Z100")

For Each zelle In bereich
If zelle.Interior.ColorIndex = farbe Then
x = zelle.Address
Debug.Print x
If IsNumeric(Right(x, 1)) Then
If Mid(x, Len(x) - 1, 1) <> " " Then
x = Right(x, Len(x) - 3)
Debug.Print x
End If
Cells(x, spalte).Interior.ColorIndex = farbe
End If
End If

Next zelle
End Sub
Hierbei braucht man nur die gewünschte Zelle in der gewünschten Spalte anzuklicken und das Marko zu starten. Ich lese die Farbe der angeklickten Zelle aus und schreibe diese direkt ( also ohne Eingabe per Inputbox ) in die Variable farbe. Das gleiche mache ich mit der Zelladresse, damit ich die Spalte für die Schnittpunktermittlung habe. Ich habe mit Debug.Print ... heraugekriegt, daß die Fundstelle falsch ist ( statt 13 erscheint 7 ??? ) und es gibt einen Laufzeitfehler.
Was habe ich denn da schon wieder angerichtet?

jinx
14.03.2009, 15:12
Moin,Monty,

statt mit Address zu arbeiten, solltest Du vielleicht nur Column nehmen - das habe ich Dir aber bereits am Anfang Deiner Bemühungen geraten (und werde es wohl noch einige Male wiederholen dürfen).

' Man gibt die Spalte ein, z. B. 7 für Spalte C
Msgbox Cells(1, 7).Address(0, 0)
zeigt bei mir G1 und nicht C1 ein - wenn schon Kommentare, dann doch bitte mit richtigen Angaben...

Zur Frage (das ist keine Formel, die Du als Code veröffentlichst): Du liest die Zeilenangabe aus, möchtest aber die Spalte haben:

With ActiveCell
Debug.Print .Address
Debug.Print .Row
Debug.Print .Column
End With

Nepumuk
14.03.2009, 15:14
Hallo Monty,

so ganz klar ist mir zwar nicht, was der Code letztendlich bewirken soll, aber damit das ganze ein bisschen übersichtlicher wird, hab ich mal allen "Unsinn" entfernt.

<nobr><span style="font-family:Courier New,Arial; font-size:9pt ;" ><b><span style="color:#000080"; >Sub</span> SchnittpunktEinfachDieZelleAnklickenUndMakroStarten()</b><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> spalte <span style="color:#000080"; >As</span> <span style="color:#000080"; >Long</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> farbe <span style="color:#000080"; >As</span> <span style="color:#000080"; >Long</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Dim</span> zelle <span style="color:#000080"; >As</span> Range<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;farbe = ActiveCell.Interior.ColorIndex<br />&nbsp;&nbsp;&nbsp;&nbsp;spalte = ActiveCell.Column<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >For</span> Each zelle In Worksheets(<span style="color:#800000"; >"Tabelle1"</span>).Range(<span style="color:#800000"; >"A1:Z100"</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >If</span> zelle.Interior.ColorIndex = farbe <span style="color:#000080"; >Then</span> _<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zelle.EntireRow.Cells(, spalte).Interior.ColorIndex = farbe<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#000080"; >Next</span> zelle<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><b><span style="color:#000080"; >End</span> <span style="color:#000080"; >Sub</span></b><br /></span></nobr>

Monty Burns
14.03.2009, 15:50
Hallo

Vielen Dank für die richtigen Lösungen!

Gruß

- Monty Burns -