Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
920to924
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
920to924
920to924
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Checkbox ohne Leer Spalten

Checkbox ohne Leer Spalten
26.10.2007 16:35:47
Holly
Hallo zusammen,
ich habe ein kleines Probleme und hoffe ihr könnt mir bei der Lösung helfen.
Ich möchte über Checkboxen Spalten von den Tabellenblatt "Tabelle2" kopieren und auf Tabellenblatt "Drucken" einfügen.
Die kopierten Spalten sollen aber auf dem Tabellenblatt "Drucken" hintereinander stehen (ohne Leer Spalten). Es können über die Checkboxen verschiedene Spalten ausgewählt werden.
Es sind 18 Checkboxen und jede steht für eine andere Spalte.
Checkbox1 steht für Spalte A, Checkbox2 steht für Spalte B, Checkbox3 steht für Spalte C, .....
Wenn ich jetzt nur Checkbox1 und Checkbox3 auswähle, bekomme ich mit meinem Code eine Leere Spalte B.
Hier ist mein Code.

Private Sub CommandButton2_Click()
Dim frm As UserForm12
Sheets("Tabelle2").Select
Sheets("Tabelle2").Activate
ActiveSheet.Unprotect
With frm
If CheckBox1.Value = True Then
Sheets("Tabelle2").Select
Columns("B:B").Select
Selection.Copy
Sheets("Drucken").Select
Range("A1").Select
ActiveSheet.Paste
End If
If CheckBox2.Value = True Then
Sheets("Tabelle2").Select
Columns("C:C").Select
Selection.Copy
Sheets("Drucken").Select
Range("B1").Select
ActiveSheet.Paste
End If
If CheckBox3.Value = True Then
Sheets("Tabelle2").Select
Columns("D:D").Select
Selection.Copy
Sheets("Drucken").Select
Range("C1").Select
ActiveSheet.Paste
End If
'........ bis Checkbox18
End Sub


Ich möchte gerne das die ausgewählten Spalten hintereinander stehen, ohne Leerspalten.
Ich möchte das Blatt drucken.
Danke für eure Mühe
Holger

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Spalten per Checkboxauswahl lückenlos kopieren
26.10.2007 16:53:44
NoNet
Hallo Holger,
Dein Makro ist viel zu umständlich programmiert.
Mit einer Schleife wird das ganze Makor kürzer und leichter anpassbar.
Das folgende Makro prüft ALLE Checkboxen des UserForms und kopiert aus "Tabelle2" die entsprechenden Spalten lückenlos in das Blatt "Drucken", wenn die Checkbox angekreuzt ist :

Private Sub CommandButton2_Click()
Dim cnt As MSForms.Control
Dim intCBNr As Integer, intSpalte As Integer
intSpalte = 1
For Each cnt In UserForm1.Controls
If TypeName(cnt) = "CheckBox" Then
intCBNr = intCBNr + 1
If cnt.Value = True Then
intSpalte = intSpalte + 1
Sheets("Tabelle2").Columns(intCBNr + 1).Copy Sheets("Drucken").Cells(1,  _
intSpalte)
End If
End If
Next
End Sub


Falls sich auf dem UserForm mehr als diese 18 Checkboxen befinden, muss man das MAkro noch begrenzen.
Bitte um Rückmeldung,
Gruß, NoNet

Anzeige
Danke läuft, zwar dauert es etwas aber egal es läu
26.10.2007 17:19:00
Holly
Danke NoNet

Das dürfte aber wesentlich schnell sein...
26.10.2007 17:23:00
NoNet
Hallo Holger,
was meinst Du mit "es dauert zwar..." ?
Das Makro dürfte aufgrund des Verzichts auf die ganzen ".SELECT" und ".ACTIVATE"-Anweisungen in Deinem Code sogar wesentlich schneller laufen !
Es sei denn, Du hast darüber hinaus (also ausser den Checkboxen) noch wesentlich mehr Steuerelemente in Deinem UserForm.
Gruß, NoNet

brauche noch mal hilfe
26.10.2007 17:48:00
Holly
Hallo NoNet,
nein habe nur die Checkboxen.
Meins hatte ich nicht fertig, hatte nach 3 Checkboxen es erst mal ausprobiert und da schon meinen fehler festgestellt. Deshalb weiß ich nicht wie lange es gedauert hätte.
Versuche gerade einen Fortschritsbalken einzubauen damit man sieht wie weit der Code durchgelaufen ist.
Aber wie sollte es anders sein, läuft es auch nicht so wie ich es mir vorgestellt habe.
Vieleicht könntest Du mir ja noch mal helfen.
Hier ist der Komplette Code.

Private Sub CommandButton2_Click()
Dim cnt As MSForms.Control
Dim intCBNr As Integer, intSpalte As Integer
Dim H As Integer
Dim HMax
Dim frm As UserForm12
Application.ScreenUpdating = True
ActiveSheet.Unprotect
Label1.Width = 0
HMax = 18
For H = 1 To HMax
Label20.Width = (H + 1) / 10
Label20.TextAlign = fmTextAlignCenter
Label20.Caption = Int(H / 10) & " %"
Label20.Font.Bold = True
Label20.ForeColor = RGB(256, 256, 256)
DoEvents
intSpalte = 0
For Each cnt In UserForm12.Controls
If TypeName(cnt) = "CheckBox" Then
intCBNr = intCBNr + 1
If cnt.Value = True Then
intSpalte = intSpalte + 1
Sheets("Tabelle2").Columns(intCBNr + 1).Copy Sheets("Drucken").Cells(1, _
intSpalte)
End If
End If
Next
Next
End Sub


Anzeige
erledigt habe Problem gelöst
26.10.2007 18:53:00
Holly
danke

Nein - mir fällt da gerade etwas auf
26.10.2007 19:31:56
NoNet
Hallo Holly,
der Grund, weshalb Dein Makro so lange läuft, ist der, dass es ja 18x durchläuft !!
Du hast um "MEINE" FOR EACH...NEXT-Schleife noch eine FOR...NEXT-Schelife herumgebastelt, so dass die Spalten 18x kopiert werden (immer an die gleiche Stelle) !!
Ich hatte doch geschrieben, dass mein Beispiel bereits ALLE Checkboxen (unabhängig von der Anzahl) durchläuft und die Spalten entsprechend kopiert !
Wenn Du schon einen "Fortschrittsbalken" hinzufügen möchtest, dann bitte INNERHALB der FOR EACH...NEXT-Schleife und nicht nochmal aussenherum !!
Gruß, NoNet
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige