Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Rahmen in Zellen abhängig von letzter Zelle

Betrifft: Rahmen in Zellen abhängig von letzter Zelle von: Dani H
Geschrieben am: 27.10.2014 21:05:47

Hallo liebe Forenhelden

Ich habe ein Projekt indem ich in einer Zelle einen Rahmen machen will wenn ich mit dem Cursor eine Zelle weiter gehe. Je nach dem in welche Richtung es geht wird entweder ein Diagonale up, -down oder bottom oder right Rahmen gemacht.
Leider hängt mein Coder gerade beim Rahmen machen. Was mache ich falsch?
Ach ja am besten lässt sich meine Idee erklären mit: Von der ersten Zelle aus wird im Prinzip mit der unteren rechten Ecke der Zelle "gezeichnet".

'Gestartet wir in der Codefenster des Sheets:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Target.Value = Target.Column & Target.Row

Call Zeichnen(Target.Row, Target.Column)
Cancel = True
End Sub

Dann gehts in ein Modul:

Sub Rahmen(mySeite As Variant, myRange As Range)
With Range(myRange)
.Borders (mySeite)
With .Borders
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
End With
End Sub
'-->Das mySeite objekt gibt an welche art von Rahmen es sein soll. Leider ist der Typ unverträglich.

Sub Zeichnen(strRow As String, strCol As String)

Dim myLine As Variant
Dim rowNow As String
Dim colNow As String
Dim rowBefore As String
Dim colBefore As String
Dim diagDown1 As String
Dim diagDown2 As String
Dim diagUp1 As String
Dim diagUp2 As String
Dim bottom1 As String
Dim bottom2 As String
Dim right1 As String
Dim right2 As String
diagDown1 = "n1n1"
diagDown2 = "11"
diagUp1 = "n11"
diagUp2 = "1n1"
bottom1 = "0n1"
bottom2 = "01"
right1 = "n10"
right2 = "10"
Dim myWeiche As String
Dim myTest As String

If rowBefore = "" And colBefore = "" Then _
rowBefore = 3 'Ich starte hier einfach bei Zelle C3 wenns das erste mal ist
colBefore = 3 'den Fall muss ich noch irgendwie abfangen.

myTest = Replace(CStr((CInt(strRow) - CInt(rowBefore) & CInt(strCol) - CInt(colBefore))), "-", "n")

If myTest = "00" Then
If StrComp(myTest, diagDown1) Or StrComp(myTest, diagDown1) = 0 Then myWeiche = "Down"

ElseIf StrComp(myTest, diagUp1) Or StrComp(myTest, diagUp2) = 0 Then myWeiche = "Up"

ElseIf StrComp(myTest, bottom1) Or StrComp(myTest, bottom2) = 0 Then myWeiche = "Bottom"

ElseIf StrComp(myTest, right1) Or StrComp(myTest, right2) = 0 Then myWeiche = "Right"

ElseIf StrComp(myTest, diagDown1) Or StrComp(myTest, diagDown1) Or StrComp(myTest, diagUp1) Or StrComp(myTest, diagUp2) Or _
StrComp(myTest, bottom1) Or StrComp(myTest, bottom2) Or StrComp(myTest, right1) Or StrComp(myTest, right2) = Null Then MsgBox ("NULL")
End If
'MsgBox ("-1 , -1" & " " & (strRow - rowBefore) & " , " & (strCol - colBefore))
Select Case myWeiche
Case "Down"
myLine = "xlDiagonalDown"
Call Rahmen(myLine, ActiveCell)
Case "Up"
myLine = "xlDiagonalUp"
Call Rahmen(myLine, ActiveCell)
Case "Bottom"
myLine = "xlEdgeBottom"
Call Rahmen(myLine, ActiveCell)
Case "Right"
myLine = "xlEdgeRight"
Call Rahmen(myLine, ActiveCell)
Case "Zero"

End Select

rowBefore = ActiveCell.Row
colBefore = ActiveCell.Column

End Sub

  

Betrifft: was mache ich falsch? von: Rudi Maintaire
Geschrieben am: 28.10.2014 11:43:32

Hallo,
ziemlich viel.

Das (und die anderen) ist auf jeden Fall falsch:
If StrComp(myTest, diagDown1) Or StrComp(myTest, diagDown1) = 0 Then myWeiche = "Down"
imho so:
If StrComp(myTest, diagDown1) = 0 Or StrComp(myTest, diagDown1) = 0 Then myWeiche = "Down"

Warum
Sub Zeichnen(strRow As String, strCol As String)
und nicht gleich als Long?

myLine = "xlDiagonalDown"
Die xlBordersIndex-Konstanten kannst du nicht als String an die andere Prozedur übergeben. Das ist ein Integer zwischen 5 und 12. Hier 5. Zu den einzelnen Werten schau in den Objektkatalog.

Gruß
Rudi




  

Betrifft: AW: was mache ich falsch? von: Dani H
Geschrieben am: 28.10.2014 12:59:27

Vielen Dank Rudi!

Was einem so entgeht wenn man immer dran ist...


 

Beiträge aus den Excel-Beispielen zum Thema "Rahmen in Zellen abhängig von letzter Zelle"