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

Grausamer Recorder-Code

Grausamer Recorder-Code
16.12.2005 11:20:23
Klaus
Hallo Excelianer,
Ich habe mittels Rekorder und c&p einen grausamen Code fabriziert. Hintergrund: Mittels Checkboxen soll der User verschiedene Formen einer Vorlage ausdrucken oder auch nicht. Codeauszug:


Private Sub CheckBox10_Click()
If CheckBox10 Then
ActiveSheet.Shapes("AutoForm 10").Select
With Selection
.Placement = xlMoveAndSize
.PrintObject = True
End With
Else
ActiveSheet.Shapes("AutoForm 10").Select
With Selection
.Placement = xlMoveAndSize
.PrintObject = False
End With
End If
End Sub


Private Sub CheckBox11_Click()
If CheckBox2 Then
ActiveSheet.Shapes("AutoForm 11").Select
With Selection
.Placement = xlMoveAndSize
.PrintObject = True
End With
Else
ActiveSheet.Shapes("AutoForm 11").Select
With Selection
.Placement = xlMoveAndSize
.PrintObject = False
End With
End If
End Sub


Private Sub CheckBox12_Click()
End Sub


und so weiter.
Soweit funktioniert es auch, aber ich muss das noch für fast 100 Objekte fortsezten :( und auch jedes mal von Hand die AutoForm und die Checkbox umbenennen :( :(
Hat jemand einen guten Tip, wie ich mir das einfacher gestalten kann?
Dank und Gruß,
Klaus M.vdT.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Grausamer Recorder-Code
16.12.2005 11:42:19
Eugen
hi
aus

Private Sub CheckBox11_Click()
If CheckBox2 Then
ActiveSheet.Shapes("AutoForm 11").Select
With Selection
.Placement = xlMoveAndSize
.PrintObject = True
End With
Else
ActiveSheet.Shapes("AutoForm 11").Select
With Selection
.Placement = xlMoveAndSize
.PrintObject = False
End With
End If
End Sub

wird
der code ist äquivalent

Private Sub CheckBox11_Click()
with ActiveSheet.Shapes("AutoForm 11")
.Placement = xlMoveAndSize
.PrintObject = Checkbox11.value
End With
End Sub

mfg
Anzeige
AW: Grausamer Recorder-Code
19.12.2005 10:12:11
Klaus
Hallo Eugen,
das ist schon mal eine große Hilfe. Werd ich gleich umsetzen, vielen Dank!
Klaus M.vdT.
AW: Grausamer Recorder-Code
16.12.2005 13:40:39
Peter
Servus,
drei Fragen.
1) Ist der Checkboxname immer Checkbox & Nummer ?
2) Wenn ja ist die Checkboxnummer immer identisch mit der Nummer der Autoform ?
3) Bei deinem Code ist es ja egal ob die Checkbox True or False liefert, es wird immer die selbe Aktion durchgeführt, ist das so beabsichtigt ?
Wenn du mir die Fragen beantworten kannst kann ich dir evtl. 100 von Zeilen tipp arbeit sparen.
MfG Peter
Vorschlag
16.12.2005 15:01:54
Peter
Servus,
erstmal die gute Nachricht, Autoformen umbenennen kein Problem.
Bereits existirende Controls zur Laufzeit umbennen, Problem.
Wobei wenn du Checkboxen erstellst, die doch sowieso Checkbox1 , usw. heißen.
Wo ist da dann das Problem.
Des Rest deines Problems siehe unteren Code. Damit wird die eigenschaft der Autoform abhängig von der Checkbox Nummer vergeben (Checkbox1 = Autoform1).


      
' In einem allgemeinem Modul
Option Explicit
Public Sub prcBoxMakro(strBoxName As String, bolBoxWert As Boolean)
Dim intCtrl As Integer
intCtrl = Right(strBoxName, Len(strBoxName) - 8) * 1
If bolBoxWert Then 'Wenn das Checkboxkästchen angehakt ist
    ActiveSheet.Shapes("Autoform " & intCtrl).Select
        Selection.Placement = xlMoveAndSize
        Selection.PrintObject = 
True
Else               ' Wenn "              " nicht ist
End If
End Sub
'Vorsicht alle Bilder werden umbenant
Sub form_umbenennen()
Dim shp As Shape
Dim intZ As Integer
    
For Each shp In ActiveSheet.Shapes
       intZ = intZ + 1
       shp.Name = "Autoform " & intZ
    
Next
End Sub
' Klassenmodul anlegen und umbenennen in clsChkBox
' Im Klassemodul clsChkBox
Option Explicit
Public WithEvents BoxControl As MSforms.CheckBox
Private Sub BoxControl_Click()
    
Call prcBoxMakro(BoxControl.Name, BoxControl.Value)
End Sub
'In der entsprechenden UserForm folgenden Code einfügen
Option Explicit
Private objBox() As clsChkBox
Private Sub UserForm_Activate()
Dim objControl As MSforms.Control
    
Dim intCounter As Integer
    
For Each objControl In Me.Controls
        
If TypeOf objControl Is MSforms.CheckBox Then
            
ReDim Preserve objBox(intCounter)
            
Set objBox(intCounter) = New clsChkBox
            
Set objBox(intCounter).BoxControl = objControl
            intCounter = intCounter + 1
        
End If
    
Next
End Sub 


P.S.: Entschuldige bitte das Select, aber PrintObject scheint ohne Select in einen Fehler zu laufen, k.a. warum.
MfG Peter
Anzeige
AW: Vorschlag
19.12.2005 10:22:39
Klaus
' In einem allgemeinem Modul
Option Explicit
Public Sub prcBoxMakro(strBoxName As String, bolBoxWert As Boolean)
Dim intCtrl As Integer
intCtrl = Right(strBoxName, Len(strBoxName) - 8) * 1
If bolBoxWert Then 'Wenn das Checkboxkästchen angehakt ist
ActiveSheet.Shapes("Autoform " & intCtrl).Select
Selection.Placement = xlMoveAndSize
Selection.PrintObject = True
Else ' Wenn " " nicht ist
End If
End Sub

Das ist toll, etwa so hab ich mir das vorgestellt konnte es blos nicht in Code fassen.
Frage: Warum passiert bei "else" nichts? Da muss ich doch immer noch das .selection auf =false setzen?
'Vorsicht alle Bilder werden umbenant
Sub form_umbenennen()
Dim shp As Shape
Dim intZ As Integer
For Each shp In ActiveSheet.Shapes
intZ = intZ + 1
shp.Name = "Autoform " & intZ
Next
End Sub

Hmmm. Das merk ich mir einfach mal für spätere Projekte. In diesem hab ich leider mehrere Shapes in der Datei und brauche die auch "logisch" benannt, das mache ich lieber von Hand.
' Klassenmodul anlegen und umbenennen in clsChkBox
' Im Klassemodul clsChkBox
Option Explicit
Public WithEvents BoxControl As MSforms.CheckBox

Private Sub BoxControl_Click()
Call prcBoxMakro(BoxControl.Name, BoxControl.Value)
End Sub

Das ruft die erste Sub auf, wenn ich eine beliebige Checkbox anclicke ... richtig?
'In der entsprechenden UserForm folgenden Code einfügen
Option Explicit
Private objBox() As clsChkBox

Private Sub UserForm_Activate()
Dim objControl As MSforms.Control
Dim intCounter As Integer
For Each objControl In Me.Controls
If TypeOf objControl Is MSforms.CheckBox Then
ReDim Preserve objBox(intCounter)
Set objBox(intCounter) = New clsChkBox
Set objBox(intCounter).BoxControl = objControl
intCounter = intCounter + 1
End If
Next
End Sub


Leider sind meine Checkboxen nicht in einer Userform, sondern im Blatt direkt auf dem Objekt, dass sie ändern (mit printobject=false Eigenschaft).
Ich werde zunächst Eugen's Vorschlag umsetzen, weil der einfach ist und mir schonmal weiter hilft. Um's dann mit deimem Code nochmal richtig zu kürzen, werd ich mich nochmal in Ruhe hinsetzen müssen - schaff ich leider nicht mehr dieses Jahr.
Auf jedem Fall schon mal vielen Dank für die Mühe, ich meld mich 2006 wieder. Frohe Festtage und guten Rutsch!
Gruß,
Klaus M.vdT.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige