Linie in EXCEL per Makro setzen/verschieben

  • #1
S

stp-prs

Aktives Mitglied
Themenersteller
Dabei seit
19.05.2005
Beiträge
41
Reaktionspunkte
0
Hallo,

für eine Terminplanung in EXCEL 2000 wird in eine bestimmte Zelle die gewünschte Kalenderwoche eingetragen z.B. 16. In Abhängigkeit zu dieser Eintragung soll eine senkrechte Linie von Zeile 20 bis Zeile 100 (Beispielwerte) in die der Kalenderwoche entsprechende Spalte verschoben oder die alte Linie gelöscht und neu erstellt werden. Geht sowas?

Gruß
Wilfried
 
  • #2
Hallo Wilfried,

prinzipiell geht das.

- Sind auf der Seite sonst keine Linien vorhanden ?
- Wird die Zeile mit der Kalenderwoche von links nach rechts nach und nach ausgefüllt?
- Soll dann in der Spalte der am weitesten rechts stehenden Kalenderwoche von Zeile 20 bis 100 auf der rechten Seite eine dickere Linie gesetzt werden?

Gruß Matjes :)
 
  • #3
Hallo Matjes,

danke für deine Anrwort.

- Es sind sonst keine Linien vorhanden
- Es ist nir eine Zelle mit der Kalenderwoche
- Es soll nur in einer Spalte (der der gewünschten Kalenderwoche) eine Linie sein

Gruß
Wilfried
 
  • #4
Hallo Wilfried,

dann probier mal das folgende Makro:
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
 ->Kalenderwoche in C5
  Const Z_KW = 5
  Const SP_KW = 3
 ->Strich ab Zeile / bis Zeile
  Const Z_STRICH_AB = 20
  Const Z_STRICH_BIS = 100
  
  Dim s_KW As String, l_sp As Long, c As Long, r As Range, Zelle As Range
  
 ->Alle geänderten Zellen
  For Each Zelle In Target
   ->Änderung in KW-Zelle ?
    If Zelle.Row = Z_KW And Zelle.Column = SP_KW Then
     ->Zahl aus KW-Zelle holen
      s_KW = Cells(Z_KW, SP_KW).Value
     ->Zahl umwandeln / prüfen
      If s_KW <>  Then
        On Error Resume Next
        l_sp = CLng(s_KW)
        If Err.Number = 0 Then
          On Error GoTo 0
          If l_sp >= 1 And l_sp <= 53 Then
           ->prüfen, ob Strich scon gesetzt ist
            Set r = Range(Cells(Z_STRICH_AB, l_sp), Cells(Z_STRICH_BIS, l_sp))
            If r.Borders(xlEdgeRight).LineStyle = xlNone Then
             ->fetten Strich setzen
              With r.Borders(xlEdgeRight)
                .LineStyle = xlContinuous
                .Weight = xlThick
                .ColorIndex = xlAutomatic
              End With
             ->alte Striche löschen
              For c = 1 To UsedRange.Column + UsedRange.Columns.Count - 1
                If c <> l_sp Then
                  Set r = Range(Cells(Z_STRICH_AB, c), Cells(Z_STRICH_BIS, c))
                  r.Borders(xlEdgeRight).LineStyle = xlNone
                End If
              Next
            End If
          Else
            MsgBox _
              Kalenderwoche außerhalb zulässigem Bereich. & vbLf & _
              1 <= KW <= 53
          End If
        Else
          Err.Clear
          On Error Resume Next
          MsgBox Die Angabe der Kalenderwoche kann nicht in eine Zahl umgewandelt werden.
        End If
      End If
    End If
  Next
AUFRAEUMEN:
  Set Zelle = Nothing: Set r = Nothing
End Sub

Die Konstanten Z_KW und SP_KW mußt du deinen Gegebenheiten anpassen.
Z_KW auf Zeile der Zelle Kalenderwoche setzen
SP_KW auf Spaltennummer der Zelle Kalenderwoche setzen.

Das Makro muß in der Codeseite des entsprechenden Tabellenblattes liegen.
Wie kommt man da hin ?

Ganz einfach  ;) Die Blattlasche mit der rechten Maustaste anklicken und im Kontextmenü->Code anzeigen' wählen. Das sich öffnende Fenster ist die Codeseite des Tabellenblattes. Dort kopierst du per Copy & Paste den Makro hinein. Mit Alt+Q schließt du den VB-Editor. Dann ausprobieren und wenn's klappt speichern nicht vergessen.

Gruß Matjes :)
 
  • #5
Hallo Matjes,

vielen Dank für deine Mühe! Da steckt bestimmt viel Arbeit drin. Ich werde das gleich mal ausprobieren.
Den Tipp mit der Codeseite kannte ich auch noch nicht.

Gruß
Wilfried
 
  • #6
Hallo Matjes,

habe mal das Makro auf die Codeseite kopiert und die Werte angepasst. Aber das Makro braucht beim Aufruf den Parameter Target. Wie funktioniert das?

Gruß
Wilfried
 
  • #7
Hallo stp-prs,

das ist das Standard-Ereignis Change für in einem Tabellenblatt.
Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

.....

End Sub

Target wird von Excel automatisch versorgt und enthält den Bereich der Änderung.

Funktioniert es denn ?

Gruß Matjes :)
 
  • #8
Hallo Matjes,

funktioniert!! Nur die Linienart kann ich nicht ändern. Ich schreibe:

.............
With r.Borders(xlEdgeRight)
.LineStyle = xlDash
.Weight = xlThick
.ColorIndex = xlAutomatic
...........

habe aber immer noch eine durchgehende Linie.

Gruß
Wilfried
 
  • #9
Der dicke Strich überzeichnet die Lücken.

Ändere mal die Strichdicke:
Code:
 .Weight = xlThick
in
Code:
 .Weight = xlMedium

Gruß Matjes :)
 
  • #10
Hallo Matjes,

ich bin untröstlich, aber der Benutzer für den ich das machen soll hat etwas wichtiges vergessen mir zu sagen:
Der Wert der KW wird errechnet aus einer anderen Zelle mit dem Wert HEUTE und zwar mit der KALENDERWOCHEN-Funktion. Es muss also nicht das Worksheet_change Ereignis, sondern ein Auto_open Makro sein?

Gruß
Wilfried

Edit:
Hab's hinbekommen, nochmals vielen Dank!
 
Thema:

Linie in EXCEL per Makro setzen/verschieben

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.492
Neuestes Mitglied
Janus36
Oben