1.6k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo alle zusammen,

ich bin derzeit dabei mich in die Geheimnisse des VBA für Excel 2003 einzuarbeiten und habe mich generell noch nicht sehr lange mit dieser Thematik beschäftigt, darum hoffe ich auf eure Hilfe.
Ich möchte auf einem Tabellenblatt über ein Makro automatisch Kontrollkästchen zu, per Suchfunktion von einem anderen Tabellenblat dorthin selektierten, Hyperlinks erscheinen lassen.
Und zwar habe ich für dieses Tabellenblatt (Change) bereits das oben besagte "Suchmakro" in einem Worksheet erstellt, dass in Spalte A ab Zeile 3 Hyperlinks ausgibt. Da es je nach Suchkriterium unterschiedlich viele Ergebnisse sein können, ist die Liste der ERgebnisse natürlich unterschiedlich lang.
Ich bräuchte zu meine bereits funktionierenden Suchfunktion also eine Ergänzung, die mir zu meiner Ergebnisliste in Spalte A jeweils in der dazugehörigen Zeile in Spalte G ein kontrollkästchen (ohne Text) setzt.

Ich habe hier im Forum das Marcro Sub CheckBoxen_erzeugen()
Dim Wiederholungen As Long
Application.ScreenUpdating = False
For Wiederholungen = 1 To 20
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
Link:=False, DisplayAsIcon:=False, Left:=91.5, _
Top:=(Wiederholungen * 20) - 20, Width:=40, Height:= _
12).Activate
Next
End Sub

gefunden, welches jedoch eine fixe Anzahl von Checkboxen ausgibt.

Mir ist nicht ganz klar wie ich das neue Marko zu meinem bestehenden dazupacken kann und wie ich dieAnzahl der Kontrollkästchen auf die variabel lange Liste meiner Ergebnisse anpassen kann.

Kann mir da jemand eine Hilfestellung geben??
Ich bin über etwas ausführlichere Hilfe zu beginn sehr dankbar.

viele Grüße,
Buzzy

4 Antworten

0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Buzzy

Dein Makro für die Suchfunktion fehlt in deinen Angaben, oder kannst du eine Musterdatei hochladen.

Gruß
fedjo
0 Punkte
Beantwortet von
Hallo fedjo,

ich habe für die Suchfunktion folgenden VBA Code in das entsprechende Tabellenblat meines VBA Projektes hinterlegt.
(Wobei ich gestehen muss, dass ich zwar so grob verstehe welcher Teil des Makros was macht, hatte mir aber für den Feinschliff auch schon externe Hilfe geholt)

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

Dim SuchZelle As Range, C As Range, SuchBereich As Range
Dim i As Integer
Dim FirstAddress As String

Set SuchZelle = Worksheets("Change").Range("A1") 'Die Zelle mit dem Suchbegriff
Set SuchBereich = Worksheets("Übersicht").Range("O:O") 'Der Zellbereich in dem gesucht wird
i = SuchZelle.Row + 1

If SuchZelle.Address = Target.Address Then
With SuchZelle.Offset(1, 0).Resize(Rows.Count - SuchZelle.Row)
.Hyperlinks.Delete
.ClearContents
End With
With SuchBereich
Set C = .Find(What:=SuchZelle, lookat:=xlPart)
If Not C Is Nothing Then
FirstAddress = C.Address

Do
i = i + 1
If C.Hyperlinks.Count > 0 Then
Hyperlinks.Add Cells(i, SuchZelle.Column), C.Hyperlinks.Item(1).Address, TextToDisplay:=C.Value
Worksheets("change").Cells(i, 4) = Worksheets("Übersicht").Cells(C.Row, 2).Value 'Version auslesen
Else
Cells(i, SuchZelle.Column) = C
End If
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> FirstAddress
End If
End With
End If
End Sub


viele Grüße,
Buzzy
0 Punkte
Beantwortet von fedjo Experte (2.2k Punkte)
Hallo Buzzy,
ich hab dir mal eine Musterdatei erstellt.
Wenn die Hyperlinks einzeln gelöscht werden auch die dazugehörigen Kontrollkästchen gelöscht.

Gruß
fedjo
0 Punkte
Beantwortet von
Moin, Moin fedjo,

wow, super, vielen Dank :)
Das Beispiel war genau das was ich gesucht habe. Beim Löschen des Suchbegriffes werden leider nur sporadisch die Checkboxen gelöscht. Das liegt dann sehr warscheinlich am Delet-Befehl ganz unten, oder?
Aber jetzt nochmal für mein Verständnis zum Nachvollziehen, du hast quasi "nur" diesen Block zu meinem vorherigen Code einfach unten angehängt:

- Deklariert, das Kontrollkästchen gesetzt werden, wenn ein Target gesetzt ist, also ein Wert aus der Suche geliefert wird -

Dim chCheckbox As CheckBox
If Target.Column = 1 Then
If Target.Count = 1 Then
If Target <> "" Then

-Mit der Bestimmung der Position(SpalteG) und Größe/Eigenschaft-

Set chCheckbox = ActiveSheet.CheckBoxes.Add(Cells(Target.Row, 7).Left, _
Cells(Target.Row, 7).Top, 20, Cells(Target.Row, 7).Height)

-Hierbei verstehe ich die Positionsangane nicht ganz, wofür steht hier . . . (Target.Row, 76) . . . ?? -

chCheckbox.LinkedCell = Cells(Target.Row, 76).Address
chCheckbox.Caption = ""

-Das hier müsste dann der Code für den Fall, dass die Sucheausgabe leer ist stehen, dass dann gelöscht wird, oder? -
Else
For Each chCheckbox In ActiveSheet.CheckBoxes

- . . . .TopLeftCell.Adress . . . was bedeutet das? Dieser Bgriff sagt mir nichts-

If chCheckbox.TopLeftCell.Address = Cells(Target.Row, 7).Address Then
chCheckbox.Delete
Exit For
End If
Next chCheckbox
End If

Bin dir auf jeden Fall total dankbar für das Beispiel.
ganz herzliche Grüße,
Buzzy
...