Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1544to1548
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
Inhaltsverzeichnis

OptionsButton klicken und ...

OptionsButton klicken und ...
02.03.2017 17:10:27
walter
Hallo zusammen,
nun möchte ich gern meine Tabellen verfeinert, stoß mal wieder an meine
Grenzen.
Ich würde gern über ein Makro die Klicks bzw. die auf TRUE gesetzten
OptionButton zählen.
Die jeweilige Summe sollte in der Übersicht dargestellt werden.
Habe mal ein Muster erstellt und per Hand die Zahlen eingetragen.
2. Frage:
Ich würde gern alle OptionButton im Entwurfsmodus selektieren,
geht das ?
https://www.herber.de/bbs/user/111903.xlsm
mfg
walter mb

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: OptionsButton klicken und ...
02.03.2017 17:30:03
Daniel
Hi
Frage 1:
wenn die Optionbuttons so wie in deinem Beispiel alle mit einer Ausgabezelle verknüpft sind, dann kannst du Ausgabezellen auswerten und musst nicht über die Buttons gehen.
das geht dann in VBA mit:
AnZahl = Worksheetfunction.CountIf(Range("L59:Q62"), True)
bzw auch als Excelformel mit
=ZählenWenn(L59:Q62;wahr)

auch das Rücksetzen der Buttons könntest du über die Ausgabezellen realiseren:
Range("L59:Q62").value = False

Frage 2
um alle Buttons zu selektieren, wähle im Menü START - BEARBEITEN - SUCHEN UND AUSWÄHLEN - OBJEKTE MARKIEREN
Gruß Daniel
Anzeige
AW: OptionsButton klicken und ...
02.03.2017 17:48:20
walter
Hallo Daniel,
danke für die schnelle Rückmeldung.
Die Ausgabezellen sind nicht in der Orginaldatei.
Deshalb über die Klicks.
mfg
walter mb
Hinweis...
02.03.2017 17:50:33
walter
Hallo Daniel,
och benötige ja die Anzahl aller OptionButton von den Sheets außer
der Sheet Übersicht.
mfg
walter mb
AW: Hinweis...
02.03.2017 19:28:36
Mullit
Hallo,
na die OptionBtn's lassen Dir immer noch keine Ruhe was, sind ja auch schnuckelige Dinger...
Dafür brauchst Du eigentlich nur unsere GroupName-Proc vom letzten Mal 'etwas' umformen:
Option Explicit

Public Sub prcOptnBtnsTrue()
Dim wksSheet As Worksheet
Dim objOLEObject As OLEObject
Dim objButtonRange As Range
Dim alngCount() As Long
Dim ialngCount As Long
Dim blnFirstSheet As Boolean
With ThisWorkbook
    Set objButtonRange = .Worksheets("Übersicht").Range("D59:I62") '// Button-Bereich in 'Übersicht'-Sheet anpassen... 
    For Each wksSheet In .Worksheets
        If Not wksSheet Is .Worksheets("Übersicht") Then
            For Each objOLEObject In wksSheet.OLEObjects
                With objOLEObject
                    If .progID = "Forms.OptionButton.1" Then
                      ialngCount = ialngCount + 1
                      With .Object
                            If Not blnFirstSheet Then
                               Redim Preserve alngCount(ialngCount - 1) As Long
                               If .Value Then alngCount(ialngCount - 1) = 1
                            ElseIf .Value Then
                               alngCount(ialngCount - 1) = alngCount(ialngCount - 1) + 1
                            End If
                      End With
                    End If
                End With
            Next
            blnFirstSheet = True
            ialngCount = 0
        End If
    Next
    Call objButtonRange.ClearContents
    For Each objOLEObject In .Worksheets("Übersicht").OLEObjects
       With objOLEObject
            If .progID = "Forms.OptionButton.1" Then
               ialngCount = ialngCount + 1
               If alngCount(ialngCount - 1) > 0 Then _
                 .TopLeftCell.Value = alngCount(ialngCount - 1)
            End If
       End With
    Next
End With
Set objButtonRange = Nothing
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit
Anzeige
Hallo Multi, das ist der Hammer...
02.03.2017 21:26:36
walter
Hallo Multi,
DANKE !
Ich versteh aber trotzdem nur Bahnhof ...
Habe gerade getestet, einwandfrei !
Noch ein Frage, kann man auch Texte in der Übersicht zusammenführen ohne Formel,
da ich ja nicht weiß wie die Namen heißen.
Wenn ja, dann:
C98, C100, C102, C104,
G98, G100, G102, G 104
Darf ich zwecks CheckBoxen Dich auch ansprechen ?
Es sind 12 Checkboxen wenn die auf True stehen, soll daneben in den Zellen
ebenfalls die Anzahl stehen.
mfg
walter mb
Hallo Mullit wollte...
02.03.2017 21:33:04
walter
Hallo Mullit,
wollte den Bereich der OptionButton anpassen, hab nur ein + Zeichen gesetzt.
D59 : I67
D69 : I71
D83 : I87
D89 : I93
würde mich freuen für einen Hinweis.
mfg
walter mb
Anzeige
AW: Hallo Mullit wollte...
03.03.2017 16:16:27
Mullit
Hallo,
ok, zunächst mal funzt da natürlich auch Daniels Ansatz über die LinkedCells, da würde er Dir genauso was feines hinproggen, aber da ich von meiner Ursprungs-Proc ausgegangen bin, hab ich die jetzt erstmal stumpf ignoriert, geht irgendwie beides, mußt Du wissen, welche Schiene Du verfolgen willst.
Wenn Du hier weiter machen willst, zunächst der Bereich anpassen ginge so: nicht '+', sondern Komma:
.Worksheets("Übersicht").Range("D59:I67,D69:I71,D83:I87,D89:I93")

Mit Checkboxen gings natürlich genauso, was Du mit den Texten meinst ist mir allerdings nicht klar...
Am besten lädst Du nochmal ne neue Mappe, inklusive Deiner neuen Bedingungen, hoch, dann können wir sehen wie weit wir kommen...
Sollte Das Uploadlimit der Dateigrösse überschritten werden, könntest Du auch im Ausnahmefall die Mappe auf Imagenetz hochladen, der Uploadservice ist 'sauber'...
Gruß, Mullit
Anzeige
AW: Hallo Mullit wollte...
03.03.2017 17:05:55
walter
Hallo,
anbei die Musterdatei.
In den Zeilen 98 bis 104 diese Texte sollten in der Übersicht zusammengefügt werden.
Immer mit Leerzeichen getrennt und Semmikolon.
https://www.herber.de/bbs/user/111932.xlsm
gruß
walter mb
Wieso verschieben sich die...
03.03.2017 18:31:16
walter
Guten Abend zusammen,
wieso verschieben sich die OptionButton auf anderen Bildschirm ?
Habe schon alle Eigenschafts-Optionen getestet.
mfg
walter mb
AW: Wieso verschieben sich die...
04.03.2017 09:05:59
Hajo_Zi
Hallo Walter,
das ist Macke von Excel bei ActiveXSteuerelementen, bei Formular soll es nicht passieren.

Anzeige
Hallo Hajo kann man...
04.03.2017 14:08:52
walter
Hallo Hajo,
kann man den die OptionButton alle auswählen, die gleiche Größe
und die Position "verankern" in der Zelle wie die jetzt Positioniert sind ?
Ich kann mit den anderen Optionsfeldern leider nichts anfangen Mullti und
auch Daniel haben bisher sehr gut geholfen.
mfg
walter mb
Leider ich nochmal, Mullti bitte nochmal
04.03.2017 14:22:36
walter
Hallo zusammen,
vielleicht kann Mullti mich noch weiter für die Zellen zusammen zu führen.
Ferne möchte ich mal zum Test die OptionButton 1 bis 72 in der größe 0,35x0,35
und von Zellposition abhängig als Makro installieren.
Das würde ich dann mal mit Private Sub Worksheet_Activate()
testen.
mfg
walter mb
Anzeige
AW: Leider ich nochmal, Mullti bitte nochmal
04.03.2017 15:24:09
Mullit
Hallo,
..so eins nach dem anderen, hier erstmal ein Ansatz um Deine Texte zusammenzuführen:
Option Explicit

Public Sub prcCopyTextSummary()
Const START_ROW As Long = 98  '// erste Text-Zeile Deiner 'Tabgroups' 
Const START_COLUMN As Long = 3 '// erste Spalte Deiner 'Tabgroups' 
Dim wksSheet As Worksheet
Dim astrText() As String
Dim lngRow As Long, lngColumn As Long
Dim ialngIndex As Long, lngCount As Long
Dim blnFirstSheet As Boolean
With ThisWorkbook
    For Each wksSheet In .Worksheets
        If Not wksSheet Is .Worksheets("Übersicht") Then
            With wksSheet
                lngCount = .Cells(START_ROW, START_COLUMN).MergeArea.Columns.Count
                For lngRow = 0 To 6 Step 2
                    lngColumn = START_COLUMN
                    Do
                        ialngIndex = ialngIndex + 1
                        With .Cells(lngRow + START_ROW, lngColumn)
                            If Not blnFirstSheet Then
                               Redim Preserve astrText(ialngIndex - 1) As String
                               If .Value <> vbNullString Then _
                                  astrText(ialngIndex - 1) = .Value
                            ElseIf .Value <> vbNullString Then
                                astrText(ialngIndex - 1) = astrText(ialngIndex - 1) & "; " & .Value
                            End If
                        End With
                        lngColumn = lngColumn + lngCount
                    Loop While lngColumn <= START_COLUMN + lngCount
                Next
            End With
            blnFirstSheet = True
            ialngIndex = 0
        End If
    Next
    With .Worksheets("Übersicht")
        lngCount = .Cells(START_ROW, START_COLUMN).MergeArea.Columns.Count
        For lngRow = 0 To 6 Step 2
            lngColumn = START_COLUMN
            Do
                ialngIndex = ialngIndex + 1
                .Cells(lngRow + START_ROW, lngColumn).Value = astrText(ialngIndex - 1)
                lngColumn = lngColumn + lngCount
            Loop While lngColumn <= START_COLUMN + lngCount
        Next
    End With
End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Ja das Verzerren der OptionButtons ist eine Eigenart der ActiveX-Objekte im TabBlatt, wie Du selbst schon gemerkt hast, kannst Du dem beikommen, indem Du die Parameter per Code bei jedem Mappenneustart über das Open-Event neu setzt, versuch da mal selbst klar zu kommen, ich guck vielleicht später nochmal drüber...
Gruß, Mullit
Anzeige
Erst mal Danke !!! Komme seit 4h nicht...
04.03.2017 15:35:02
walter
Hallo Mullit,
das kopieren der Texte einwandfrei,
tausend Dank !!!
Ich schon schon seit 4h im Netz und probiere, leider ohne Erfolg.
Das letzte was ich gefunden habe:
Dim OptBtn As OptionButton
For Each OptBtn In ActiveSheet.OptionButtons
With OptBtn
.Top = Rows(.TopLeftCell.Row).Top + (((Rows(.TopLeftCell.Row).Height) - .Height) / 2)
.Left = Columns(.TopLeftCell.Column).Left + (((Columns(.TopLeftCell.Column).Width) - . _
Width) / 2)
End With
Next
wollte dieses Makro über : Private Sub Worksheet_Activate()
steuern klappte nicht.
Ich glaube ich mussssss leider auf deine fachliche Unterstützung hoffen !
mfg
walter
Anzeige
AW: Erst mal Danke !!! Komme seit 4h nicht...
04.03.2017 18:14:14
Mullit
Hallo,
okidoki, dann gibt's hier nochmal den Resizer i.Gr. brauchst Du da nur Deine beiden Ansätze kombinieren, damit gehst Du bspw. ins Open-Event Deiner Mappe, wenn Du's für jedes neue Blatt haben willst, müsstest Du noch 'n Activate-Event ergänzen:
' ********************************************************************** 
' Modul: DieseArbeitsmappe Typ: Klassenmodul der Arbeitsmappe 
' ********************************************************************** 

Option Explicit

Private Sub Workbook_Open()
Call prcResizeOptnBtns
End Sub

Private Sub prcResizeOptnBtns()
 Dim wksSheet As Worksheet
 Dim objOLEObject As OLEObject
 Application.ScreenUpdating = False
 For Each wksSheet In Worksheets
     For Each objOLEObject In wksSheet.OLEObjects
        With objOLEObject
             If .progID = "Forms.OptionButton.1" Then
                .Top = .TopLeftCell.Top + .TopLeftCell.Height / 2
                .Left = .TopLeftCell.Left + .TopLeftCell.Width / 2
                .Width = 10#
                .Height = 20#
             End If
        End With
     Next
 Next
 Call Save
 Application.ScreenUpdating = True
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit
Anzeige
AW: Erst mal Danke !!! Komme seit 4h nicht...
04.03.2017 18:27:23
Mullit
Hallo nochmal,
...ich seh grad noch der .Height-Parameter sollte bei Dir auf 10 stehen, müsstest Du noch ändern.
.Height = 10#

Gruß, Mullit
Super läuft ! Aber warum ?
05.03.2017 11:13:55
walter
Guten Morgen Mullit,
läuft alles bestens.
Aber Warum muss:
Private Sub Worksheet_Activate()
Call prcResizeOptnBtns
End Sub

Private Sub prcResizeOptnBtns()
im gleichen Modul Arbeitsmappe stehen, ich hatte erst das Makro in ein neues
Modul reinkopiert, da kam immer "Fehler beim Kompilieren Sub oder Function nicht definiert"
Ich möchte es nur als nicht Profi wissen,
danke für ALLES !
mfg
walter mb

AW: Super läuft ! Aber warum ?
05.03.2017 11:51:43
Daniel
Hi
Subs und Functions, die als "Private" deklariert sind, sind nur innerhalb des eigenen Moduls bekannt.
Möchtest du sie aus einem anderen Modul aufrufen, musst du sie als "Public" deklarieren, bzw es reicht, das "Private" weg zu lassen, denn "Public" ist der Standardwert.
Gruß Daniel
Danke Daniel für die Info ! Jetzt noch die letzte
05.03.2017 13:34:09
walter
Hallo Daniel und Mullit,
anbei die beiden Makros von Mullit, alles i.o. !!!!!!!!!!!!!!
Aber ich möchte gern das, wenn eine Master Sheet vorhanden ist,
daraus NICHT berücksichtigt wird !
Und dann ist Schlussssss
Public Sub Klicks_anzeigen()
Dim wksSheet As Worksheet
Dim objOLEObject As OLEObject
Dim objButtonRange As Range
Dim alngCount() As Long
Dim ialngCount As Long
Dim blnFirstSheet As Boolean
With ThisWorkbook
'  Set objButtonRange = .Worksheets("Übersicht").Range("D59:I62") '// Button-Bereich in 'Ü _
bersicht'-Sheet anpassen...
Set objButtonRange = .Worksheets("Übersicht").Range("D59:I67,D69:I71,D83:I87,D89:I93")
For Each wksSheet In .Worksheets
If Not wksSheet Is .Worksheets("Übersicht") Then
For Each objOLEObject In wksSheet.OLEObjects
With objOLEObject
If .progID = "Forms.OptionButton.1" Then
ialngCount = ialngCount + 1
With .Object
If Not blnFirstSheet Then
ReDim Preserve alngCount(ialngCount - 1) As Long
If .Value Then alngCount(ialngCount - 1) = 1
ElseIf .Value Then
alngCount(ialngCount - 1) = alngCount(ialngCount - 1) + 1
End If
End With
End If
End With
Next
blnFirstSheet = True
ialngCount = 0
End If
Next
Call objButtonRange.ClearContents
For Each objOLEObject In .Worksheets("Übersicht").OLEObjects
With objOLEObject
If .progID = "Forms.OptionButton.1" Then
ialngCount = ialngCount + 1
If alngCount(ialngCount - 1) > 0 Then _
.TopLeftCell.Value = alngCount(ialngCount - 1)
End If
End With
Next
End With
Set objButtonRange = Nothing
End Sub

'----------------- texte zusammenfügen ------------------------
Public Sub Texte_zusammensetzen()
Const START_ROW As Long = 98        '// erste Text-Zeile der 'Tabgroups'
Const START_COLUMN As Long = 3      '// erste Spalte der 'Tabgroups'
Dim wksSheet As Worksheet
Dim astrText() As String
Dim lngRow As Long, lngColumn As Long
Dim ialngIndex As Long, lngCount As Long
Dim blnFirstSheet As Boolean
With ThisWorkbook
For Each wksSheet In .Worksheets
If Not wksSheet Is .Worksheets("Übersicht") Then
With wksSheet
lngCount = .Cells(START_ROW, START_COLUMN).MergeArea.Columns.Count
For lngRow = 0 To 6 Step 2
lngColumn = START_COLUMN
Do
ialngIndex = ialngIndex + 1
With .Cells(lngRow + START_ROW, lngColumn)
If Not blnFirstSheet Then
ReDim Preserve astrText(ialngIndex - 1) As String
If .Value  vbNullString Then _
astrText(ialngIndex - 1) = .Value
ElseIf .Value  vbNullString Then
astrText(ialngIndex - 1) = astrText(ialngIndex - 1) & "; " & . _
Value
End If
End With
lngColumn = lngColumn + lngCount
Loop While lngColumn 
mdfg
walter mb
AW: Danke Daniel für die Info ! Jetzt noch die letzte
05.03.2017 19:27:22
Mullit
Hallo Walter,
ok, prima, hmm die Abfrage hast Du eigentlich in Deinen Prozeduren schon drin, kannst Du bei Bedarf natürlich noch ergänzen, versuchs vielleicht mal selbst:
'...
For Each wksSheet In .Worksheets If Not wksSheet Is .Worksheets("Übersicht") Then
For Each objOLEObject In wksSheet.OLEObjects
'...

Zur Sichtbarkeit hat Daniel Dir ja schon alles gesagt, Du mußt beim Auslagern in ein Std.-Modul noch beachten, daß Du dann zwei Befehle mit dem Workbook referenzierst, kannst als Übung ja mal selbst überlegen welche...
Mann könnte übrigens Deinen Klick-Zähler noch so tunen, daß bestimmte Bereiche en bloc gezählt und übernommen werden, wenn ich heut' abend noch in Form bin, lad ich's vielleicht noch hoch...
Gruß, Mullit
AW: Danke Daniel für die Info ! Jetzt noch die letzte
05.03.2017 19:35:05
Mullit
...uups, Frau übrigens auch...
Gruß, Mullit
Hallo Mulli,
06.03.2017 10:16:50
walter
Hallo Mullit,
und wo setze ich die Sheet "Master" ein ?
'...
For Each wksSheet In .Worksheets
If Not wksSheet Is .Worksheets("Übersicht") Then
For Each objOLEObject In wksSheet.OLEObjects
'...
mfg
walter mb
AW: Hallo Mulli,
08.03.2017 21:55:31
Mullit
Hallo Walter,
...na einfach hier:
'...
For Each wksSheet In .Worksheets
    If Not wksSheet Is .Worksheets("Master") Then
       For Each objOLEObject In wksSheet.OLEObjects
'...

...oder wenn Du mehrere ausschließen willst:
For Each wksSheet In .Worksheets
   If Not (wksSheet Is .Worksheets("Übersicht") Or wksSheet Is .Worksheets("Master")) Then
      For Each objOLEObject In wksSheet.OLEObjects
Next

Gruß, Mullit
AW: Hallo Mulli, -)
09.03.2017 19:12:19
Walter
Hallo Mullit,
herzlichen Dank für die weitere Unterstützung.
Danke
Mit freundlichen Grüßen
Walter mb
AW: noch ein Hinweis...
02.03.2017 22:51:53
Daniel
nunja, in deiner Beispieldatei sind die Verknüpfungen auf die Ausgabezellen drin, warum sollte man die dann nicht nutzen?
das erspart dir das Makro.
Btw, wenn in deiner Orgininaldatei die Optionbuttons nicht verknüpft sind, dann sollten sie in der Beispieldatei auch nicht verknüpft sein.
Die Beispieldatei sollte schon der Originaldatei entsprechen, sonst kann man ja nicht zielgerichtet helfen.
Gruß Daniel
Guten Morgen Daniel...
03.03.2017 08:16:41
walter
Hallo Daniel,
Du hast ja nicht ganz unrecht. Das Problem, ich weiß nie wieviel
Sheets in der Datei sind und ich habe versucht die Formeln umsetzen,
leider gelang es mir nicht.
mfg
walter mb
AW: Guten Morgen Daniel...
03.03.2017 09:22:53
Daniel
HI
wenn du mehrere Sheets hast, muss eine Schleife über die Sheets laufen, etwa in der art (Vorausgesetzt die verküpften Zellen liegen immer im gleichen Zellbereich, diesen bitte ggf anpassen)
dim sh as Worksheet
dim Anzahl as Long
for each sh in thisworkbook.worksheets
Anzahl = Anzahl + Worksheetfunction.countif(sh.Range("A1:J10"), true)
next
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige