Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Checkbox kopieren m. Makro u. Zellverknüpfung +1

Betrifft: Checkbox kopieren m. Makro u. Zellverknüpfung +1 von: Thomas
Geschrieben am: 24.09.2014 12:33:19

Hallo Freunde

Ich habe eine Tabelle erstellt in der am Anfang jeder Zeile in "A" eine Checkbox mit Verknüpfung auf drunter liegende Zelle ist, die je nach aktiv oder inaktiv die beiden darunterliegenden Zeilen ein oder ausblendet.

Nun habe ich ein Makro welches die selektierte Zeile um eins nach unten kopiert.
Dabei soll auch die Checkbox mit kopiert werden, mit samt Makro zum ein und ausblenden und der Zellverknüpfung. Nur soll das alles um den Offset +1 verschoben sein.

Als Beispiel

In A1 ist die Checkbox mit Verknüpfung auf A1. Wenn man diese aktiv setzt werden Zeile 2 u. 3 eingeblendet.
Nun soll durch einen Button die Zeile 1,2 u.3 kopiert werden, inklusive der Checkbox und der damit verbundenen Zellverknüpfung und Makros. Dies soll sich jetzt aber so verhalten, dass die Checkbox die Verknüpfung auf "A4" hat und die Zeilen 5 u.6 ein und ausblenden soll.

Ich hoffe ihr könnt mir folgen

Gruß Thomas

  

Betrifft: AW: Checkbox kopieren m. Makro u. Zellverknüpfung +1 von: fcs
Geschrieben am: 24.09.2014 14:56:41

Hallo Thomas,

benutze die Checkboxen aus den Formularsteuerelementen, dann hast du hier weniger Probleme.

Als Code in einem allgemeinen Modul benötigst du dann nur:

'Code in einem allgemeinen Modul
Sub Ein_Ausblenden()
  'Dieses Makro der(den) Checkbox(en) in Spalte A zuweisen
  Dim objShape As Shape
  Set objShape = ActiveSheet.Shapes(Application.Caller)
  With objShape.TopLeftCell
    If .Column = 1 Then
      Range(Rows(.Row + 1), Rows(.Row + 2)).EntireRow.Hidden = _
          objShape.ControlFormat.Value = -4146
      .Value = Not objShape.ControlFormat.Value = -4146
    End If
  End With
End Sub

Sub Kopie_3_Zeilen()
  'Kopiert die Zeilen 2 bis 4 und fügt sie vor Zeile 5 ein - inkl. Checkbox in Zeile 2
  If Application.CopyObjectsWithCells = False Then Application.CopyObjectsWithCells = True
  Range(Rows(2), Rows(4)).Copy
  Range(Rows(5), Rows(7)).Insert
End Sub
Gruß
Franz


  

Betrifft: AW: Checkbox kopieren m. Makro u. Zellverknüpfung +1 von: Thomas
Geschrieben am: 25.09.2014 08:43:37

Hallo Franz

Ich danke dir. Es hat alles geklappt wie es sollte. Habe es noch ein wenig umgeschrieben, damit er nicht immer in die selben Zeilen kopiert und an selber Stelle einfügt und schon hatte ich was ich wollte.
Jetzt ist ein Folgeproblem aufgetreten.
Die Zeile der Checkbox und die beiden drunter liegenden Zeilen werden ja nun kopiert und direkt unter die kopierten Zeilen gehängt.
Das Problem ist jetzt, dass in Abhängigkeit des Zustandes der Checkbox, entweder die eingeblendeten Zeilen im aktivierten Zustand oder im deaktivierten Zustand die darunter liegenden Zeilen, die manchmal auch schon ausgefüllt sein können, kopiert werden.
Mein Gedanke war jetzt, die Checkbox in der selektierten Zeile aktiv zu schalten und somit dafür zu sorgen, dass er in jedem Fall die 3 richtigen Zeilen kopiert.

Jetzt die Frage

Wie kann ich das Aktivieren der Checkbox noch mit in den Kopiervorgang einbauen?
Ich muss ja sagen, dass er sich die Checkbox die in der markierten Zeile ist raussuchen soll und diese
aktiv setzen muss bevor er anfängt zu kopieren. Allerdings kann ich die Checkbox auch nicht mit einem Namen ansprechen, da es ja je nach markierter Zeile eine andere Checkbox ist.

Gruß Thomas


  

Betrifft: AW: Checkbox kopieren m. Makro u. Zellverknüpfung +1 von: fcs
Geschrieben am: 25.09.2014 15:26:40

Hallo Thomas,

wenn du einen beliebigen Zeilenblock kopieren und unterhalb einfügen willst, dann wird es etwas komplizierter. Es ist aber nicht unbedingt erforderlich, die Zeilen zu einer Checkbox ggf. erst einzublenden. Man kann es auch so steuern, dass erst in den kopierten Zeilen die Zeilen ggf. eingeblendet werden.

Gruß
Franz

Sub Kopie_3_Zeilen()
  Dim Zeile As Long, objShape As Shape
  Dim wks As Worksheet
  Set wks = ActiveSheet
  Zeile = ActiveCell.Row
  'Checkbox in Spalte A in der Zeile mit der aktiven Zelle suchen
  Set objShape = fncFindCheckbox(objWks:=wks, Zeile:=Zeile, Spalte:=1)
  If objShape Is Nothing Then
    MsgBox "Keine Checkbox in aktiver Zeile. " _
      & "Bitte Zelle in Zeile mit Checkbox selektieren"
  Else
    With wks
      If Application.CopyObjectsWithCells = False Then _
              Application.CopyObjectsWithCells = True
      'Zeilen kopieren und unterhalb des Blocks einfügen
      .Range(.Rows(Zeile), .Rows(Zeile + 2)).Copy
      .Range(.Rows(Zeile + 3), .Rows(Zeile + 5)).Insert
      Zeile = Zeile + 3
      'Prüfen, ob Checkbox deaktiviert ist
      If objShape.ControlFormat.Value = -4146 Then
        'kopierte Checkbox suchen
        Set objShape = fncFindCheckbox(objWks:=wks, Zeile:=Zeile, Spalte:=1)
        'Neue Checkbox auf True setzen und Zeilen einblenden
        objShape.ControlFormat.Value = 1
        .Cells(Zeile, 1) = True
        .Range(.Rows(Zeile + 1), .Rows(Zeile + 2)).EntireRow.Hidden = False
      End If
      'Zelle in kopiertem Block selektieren
      Cells(Zeile, 2).Select
      'Altdaten in koierten Zeilen löschen --- ggf. weglassen
      .Range(.Cells(Zeile, 2), .Cells(Zeile + 2, 10)).ClearContents
    End With
  End If
End Sub


Public Function fncFindCheckbox(objWks As Worksheet, Zeile As Long, _
      Optional Spalte As Long = 1) As Shape
  'Checkbox finden mit TopLeftCell in der Zeile und Spalte
  Dim objShape As Shape
  For Each objShape In objWks.Shapes
    With objShape
      'Prüfen der Steuerelementeigenschaften
      If .TopLeftCell.Column = Spalte Then
      If .TopLeftCell.Row = Zeile Then
      If .Type = msoFormControl Then
        If .FormControlType = xlCheckBox Then
          Set fncFindCheckbox = objShape
          Exit For
        End If
      End If
      End If
      End If
    End With
  Next
End Function



  

Betrifft: AW: Checkbox kopieren m. Makro u. Zellverknüpfung +1 von: Thomas
Geschrieben am: 26.09.2014 11:38:14

Hallo Franz

Als Erstes mal 1000 Dank für deine Hilfe.
Alles funktioniert wunderbar.
Ich danke dir auch für das Einbauen der "Inhalte der neuen Zeilen löschen" Funktion
Hab hier und da noch ein wenig Anpassungen vorgenommen, da ich nicht alle neu kopierten Zeileninhalte löschen wollte. Es sollte nur Zeile 1 und Zeile 3 gelöscht werden. Zeile 2 sollte bleiben. Und hab dafür auch nur 6 Stunden gebraucht ;-), aber ich habs hinbekommen.

Mit bestem Dank und Gruß
Thomas


 

Beiträge aus den Excel-Beispielen zum Thema "Checkbox kopieren m. Makro u. Zellverknüpfung +1"