AW: komplettes Array in Bereich schreiben
28.01.2019 20:04:25
Oisse
Hier also die Prozedur:
Sub Ausblenden_Zeilen()
Dim wkb As Workbook
Dim wkb_Zeitplan As Workbook
Dim wks_Bauhelferliste As Worksheet
Dim wks_Zeitplan As Worksheet
Dim wks_Uebersicht As Worksheet
Dim lz_Zeitplan As Long
Dim lz_Gewerk As Long
Dim ArrGew()
Dim ArrNeu As Variant
Dim myControl As Control
Dim Distanz As Long
Dim y As Long
Dim a As Long
Dim b As Long
Dim i As Long
Set wkb = ThisWorkbook
Set wks_Uebersicht = wkb.Worksheets("Uebersicht")
Set wks_Zeitplan = wkb.Worksheets("Bauplanung_" & Left(wks_Uebersicht.Range("B1"), 9))
Set scrDic = CreateObject("Scripting.dictionary")
lz_Zeitplan = wks_Zeitplan.Cells(Rows.Count, 1).End(xlUp).Row
lz_Gewerk = wks_Uebersicht.Cells(Rows.Count, 2).End(xlUp).Row
ls = wks_Zeitplan.Cells(3, Columns.Count).End(xlToLeft).Column
'Start in der Gewerkeliste in der ?bersicht ermitteln
For i = 1 To lz_Gewerk
With wks_Uebersicht
If .Range("B" & i) = "Gewerk" Then
StartGew = .Range("B" & i).Row + 1
End If
End With
Next i
y = 0
With wks_Uebersicht
wks_Uebersicht.Activate
.Range("A" & StartGew & ":D" & lz_Gewerk - 1).Sort _
Key1:=.Range("D" & StartGew + 1), Order1:=xlAscending, _
Header:=xlYes
For i = StartGew To lz_Gewerk
If .Range("D" & i) "" Then 'Ermitteln wieviele Gewerke ausgew?hlt sind
y = y + 1
End If
Next i
End With
ZeilenArr = 0
'Array mit den Gewerken aus der ?bersicht f?llen, wird zum Vergleichen gebraucht, ob in der _
Zeitplanspalte Spalte A der Eintrag mit der Liste ?bereinstimmt
ReDim ArrGew(y - 1, 0)
ReDim ArrNeu(y - 1)
x = 0
For i = StartGew To StartGew + y - 1
ArrGew(x, 0) = wks_Uebersicht.Range("B" & i)
x = x + 1
Next i
'Hier startet das Ermitteln des Beginns und Endes eines Gewerkes
For b = LBound(ArrGew) To UBound(ArrGew)
For i = 10 To lz_Zeitplan - 3
'For x = LBound(ArrGew) To UBound(ArrGew)
With wks_Zeitplan
If .Cells(i, 1) = ArrGew(b, 0) Then
ZeileGewerk = i
GoTo GewerkAnfang
End If
End With
'Next x
Next i
GewerkAnfang:
With wks_Zeitplan
'Gewerk durchsuchen
For x = ZeileGewerk + 1 To lz_Zeitplan - 3
If x = lz_Zeitplan - 3 Then
ZeileN?Gewerk = x
GoTo GewerkEnde
End If
For n = LBound(ArrGew) To UBound(ArrGew) 'Pr?fen ob in der _
Zelle tats?chlich das Gewerk drin steht
If .Range("A" & x) = ArrGew(n, 0) Then
ZeilenN?chstesGewerk = .Range("A" & x).Row
N?Gewerk = ArrGew(n, 0)
ZeileN?Gewerk = x
GoTo GewerkEnde
End If
Next n
Next x
End With
GewerkEnde:
For i = ZeileGewerk To ZeileN?Gewerk - 1
With wks_Zeitplan
ArrNeu(a) = .Range(.Cells(ZeileGewerk, 1), .Cells(ZeileN?Gewerk - 1, ls) _
)
End With
Next i
a = a + 1
Next b
i = 11
With wks_Zeitplan
.Activate
.Range(.Cells(11, 1), .Cells(lz_Zeitplan - 3, ls)).ClearContents
.Cells(11, 1).Resize(UBound(ArrNeu) + 1, 1) = Application.Transpose(ArrNeu)
End With
End Sub