OleObject
15.12.2003 17:30:56
Dirk
ich habe mehrere Arbeitsblätter mit einer verschiedenen Anzahl von Checkboxen!
Wer kann mir helfen, folgenden Code zu optimieren:
Sub Auswertung()
Dim rng As Range
Dim ws As Worksheet
Dim j As Integer
Dim s As Integer
Dim wert As Integer
Dim z As Integer
Dim lngletztezeile As Integer
For j = 1 To Worksheets.Count
For s = 2 To 32
wert = 0
lngletztezeile = Worksheets(j).Cells(Worksheets(j).Rows.Count, 1).End(xlUp).row
For z = 4 To lngletztezeile
Set ws = ThisWorkbook.Worksheets(j)
Set rng = ws.Cells(z, s)
If ZelleHatOLEObject(Zelle:=rng, blatt:=ws) Then
wert = wert + 1
Tabelle1.Cells(j, s) = wert
End If
Next z
Next s
Tabelle1.Cells(j, 33) = WorksheetFunction.Sum(Cells(j, 2), Cells(j, 3))
Next j
Set ws = Nothing
Set rng = Nothing
End Sub
Function ZelleHatOLEObject(Zelle As Range, blatt As Worksheet) As Boolean
Dim ol As OLEObject
ZelleHatOLEObject = False
For Each ol In blatt.OLEObjects
If Zelle.Address = ol.TopLeftCell.Address Then
If ol.Object.Value = True Then
ZelleHatOLEObject = True
Exit Function
End If
End If
Next ol
End Function
Mein Problem ist nun folgendes: Zwar funktioniert der Code, die Ausführung dauert mir jedoch zu lange, da schnell mal mehrere Tausend Checkboxen zu prüfen sind: Wenn die Funktion aufgerufen wird, werden alle Checkboxen durchlaufen (bis die Zellenadresse übereinstimmt!), obwohl die zu prüfende Checkbox durch die Zelladresse (Set rng = ws.Cells(z, s))bereits bekannt ist (der Name der Checkbox ist mir nicht bekannt!)!
Kann die Funktion so geändert werden, dass direkt die entsprechende Checkbox über die Zelladresse angesprochen wird, ohne potentiell alle Checkboxen in einer Schleife abzufragen?
Danke schon jetzt für jede Hilfe,
Dirk