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

VBA-Makro zum Gruppieren einzelner Tage

VBA-Makro zum Gruppieren einzelner Tage
26.09.2008 10:22:00
Christoph
Hallo Leute!
Bin neu hier im Forum und da ich relativ wenig Ahnung von Excel und VBA habe, mich aber beruflich in Zukunft häufiger damit beschäftigen werde, bin ich noch auf ein wenig Hilfe angewiesen.
Ich bastle gerade an einem Makro, das innerhalb einer Monats-Tabelle die einzelnen Tage durch Linien voneinander trennen soll. Das eintragen der Tage erfolgt vorher mit einem weiteren Makro.
Hier erstmal der Quellcode:

Sub WochentageGruppieren()
Dim rngBereich As Range
Dim rngZelle As Range
Set rngBereich = Range("B7:B109" & Cells(Rows.Count, 1).End(xlUp).Row)
On Error GoTo Ende
Application.ScreenUpdating = False
For Each rngZelle In rngBereich.Cells
rngZelle.Borders(xlEdgeBottom).Weight = 3
rngZelle.Borders(xlEdgeBottom).LineStyle = rngZelle  rngZelle.Offset(1, 0)
Next rngZelle
Ende:
Application.ScreenUpdating = True
End Sub


In dem angehängten Bild sind die Probleme zu sehen:
*Das Makro funktioniert eigentlich wunderbar, nur sollen die Linien auf der gesamten Breite der Tabelle durchgezogen werden (aber nicht darüber hinaus gehen)!
*Und nach dem 30. (31.usw) unten aufhören. - Derzeit geht es dort weiter, sobald in Spalte B wieder Text vorkommt!
Hab schon so einiges versucht, aber da ich nicht wirklich gut im "Programmieren" bin, wär's toll wenn mir jemand sagen könnte, was ich ändern muss! Ich gehe mal davon aus, daß der/die Fehler in der fett markierten Zeile stecken!
Danke schonmal!
Christoph
Userbild

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Makro zum Gruppieren einzelner Tage
26.09.2008 10:59:56
Reinhard
Hi Christoph,
"Set rngBereich = Range("B7:B109" & Cells(Rows.Count, 1).End(xlUp).Row)"
sobald in A100 oder tiefer etwas steht, kommt sowieso ein Fehler, denn die Zelle B109100 gibt es nicht in XL2003.
also müßte das so aussehen:
Set rngBereich = Range("B7:B" & Cells(Rows.Count, 1).End(xlUp).Row)
aber das geht bei dir nicht, da du in jeder Spalte unten etwas steht hast.
Probiers mal so:
Set rngBereich = Range("B7:B" & Cells(7, 1).End(xlDown).Row)
Gruß
Reinhard
AW: VBA-Makro zum Gruppieren einzelner Tage
26.09.2008 11:06:00
Tino
Hallo,
teste mal diesen Code.
Bis zu welcher Spalte die Unterlinie gehen soll, kannst Du mit in dem Offset wert festlegen.
Im Beispiel ist dies "rngZelle.Offset(0, 10)" also bis einschließlich Spalte "L"
Modul Modul1
Option Explicit 
 
Sub test() 
Dim rngBereich As Range, lngRow As Long 
Dim A As Long, rngZelle As Range 
lngRow = Application.WorksheetFunction.Match("Summe:", Range("B:B")) - 2 
Set rngBereich = Range("B7:B" & lngRow) 
On Error GoTo Ende 
Application.ScreenUpdating = False 
For Each rngZelle In rngBereich 
    If rngZelle <> rngZelle.Offset(1, 0) Then 
     Range(rngZelle, rngZelle.Offset(0, 10)).Borders(xlEdgeBottom).Weight = xlMedium 
    Else 
     Range(rngZelle, rngZelle.Offset(0, 10)).Borders(xlDiagonalDown).LineStyle = xlNone 
    End If 
Next rngZelle 
Ende: 
Application.ScreenUpdating = True 
 
End Sub 


Gruß Tino

www.VBA-Excel.de


Anzeige
AW: VBA-Makro zum Gruppieren einzelner Tage
26.09.2008 11:36:00
David
Hallo Christoph,
obwohl ein paar andere hier schon aktiv waren, möchte ich dir meine Ergüsse nicht vorenthalten, wär ja schade um die vertane Zeit. ;-)
Meine (ausbaufähige) Variante:

Option Explicit
Sub test()
Dim zeile, spalte, i
zeile = Range("B6").SpecialCells(xlCellTypeLastCell).Row
spalte = Range("B6").SpecialCells(xlCellTypeLastCell).Column
Range(Cells(6, 2), Cells(zeile, spalte)).Borders(xlEdgeBottom).LineStyle = xlNone
Range(Cells(6, 2), Cells(zeile, spalte)).Borders(xlInsideHorizontal).LineStyle = xlNone
With ActiveSheet
For i = 1 To zeile
If IsDate(Cells(i, 4)) Then
If Cells(i + 1, 4)  Cells(i, 4) Then
Range(Cells(i, 4), Cells(i, spalte)).Borders(xlEdgeBottom).Weight = 3
End If
End If
Next
End With
End Sub


Gruß
David

Anzeige
AW: VBA-Makro zum Gruppieren einzelner Tage
26.09.2008 11:43:36
Christoph
Hallo.
Danke erstmal für die schnellen Antworten!
@Reinhard: Wenn ich die Zeile so abändere läuft das Makro aus irgendwelchen Gründen in einer Endlosschleife (denke ich). Dann hilft nur noch Excel zu schließen und die Mappe neu zu starten. - Kann Dir leider natürlich nicht sagen weshalb das so ist.
@Tino: Das funktioniert einwandfrei! Danke! Muss mir das Makro noch mal etwas genauer anschauen, um da vollends durchzusteigen. Was bewirkt denn der "Match"-Befehl und die "2" in der Zeile:
lngRow = Application.WorksheetFunction.Match("Summe:", Range("B:B")) - 2
Und: liesse sich in dieses Makro noch eine Funktion integrieren, die vor dem zeichnen der Linien evtl. vorhandene alte löscht? Also ohne die Werte und Formeln in den Zellen zu löschen!?
Danke nochmal euch beiden!
Gruß
Christoph
Anzeige
AW: VBA-Makro zum Gruppieren einzelner Tage
26.09.2008 11:48:58
Christoph
Hallo David!
Deine Version werde ich natürlich auch nochmal testen, damit sich Deine Mühen auch gelohnt haben!
Danke.
Christoph
AW: VBA-Makro zum Gruppieren einzelner Tage
26.09.2008 11:49:00
Christoph
Hallo David!
Deine Version werde ich natürlich auch nochmal testen, damit sich Deine Mühen auch gelohnt haben!
Danke.
Christoph
AW: VBA-Makro zum Gruppieren einzelner Tage
26.09.2008 12:28:00
Tino
Hallo,

Application.WorksheetFunction.Match("Summe:", Range("B:B"))


Gibt die Zeilennummer mit dem Inhalt “Summe:” zurück, -2 weil bei -1 die Zelle mit dem Inhalt „Summe:“ mit der Zelle davor verglichen wird, diese wird in der Regel unterschiedlich sein und somit wird in der Zelle vor der Summe: eine Unterlinie eingefügt.
Soll diese doch eingefügt werden, musst Du aus der -2 eine -1 machen, damit die Schleife bis zur Zelle vor der Zelle mit dem Inhalt „Summe:“ geht.


Range(rngZelle, rngZelle.Offset(0, 10)).Borders(xlDiagonalDown).LineStyle = xlNone


diese Zeile entfernt doch bei Übereinstimmung die Unterlinie.
Gruß Tino

Anzeige
Korrektur, noch ein Fehler. sorry
26.09.2008 12:43:00
Tino
Hallo,
habe noch einen Fehler gefunden beim löschen der Unterlinie.
Option Explicit

 
Sub test()
Dim rngBereich As Range, lngRow As Long
Dim A As Long, rngZelle As Range
lngRow = Application.WorksheetFunction.Match("Summe:", Range("B:B")) - 2
Set rngBereich = Range("B7:B" & lngRow)
On Error GoTo Ende
Application.ScreenUpdating = False
For Each rngZelle In rngBereich
    If rngZelle <> rngZelle.Offset(1, 0) Then
     Range(rngZelle, rngZelle.Offset(0, 10)).Borders(xlEdgeBottom).Weight = xlMedium
    Else
     Range(rngZelle, rngZelle.Offset(0, 10)).Borders(xlEdgeBottom).LineStyle = xlNone
    End If
Next rngZelle
Ende:
Application.ScreenUpdating = True
 
End Sub


Gruß Tino

Anzeige
AW: Korrektur, noch ein Fehler. sorry
26.09.2008 12:58:55
Christoph
Ja - das war's! - Ist mir auch nicht aufgefallen.
Ich glaube, ich hab's jetzt verstanden. Funktioniert perfekt. Danke für die schnelle Hilfe.
Gruß
Christoph

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige