Clever-Excel-Forum

Normale Version: Option Button Szenario
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen,

ich möchte einen einfachen Fragebogen aufsetzen und habe dafür folgendes Szenario. Leider habe ich es mit Beispielen und Vorlagen bisher nicht geschafft, das Ganze zum Laufen zu bringen.

Also, wir haben zwei Arbeitsblätter, sagen wir A1 und A2.
In A1 sollen in mehreren Zeilen jeweils 10 Option Buttons nebeneinander stehen, ein Button pro Spalte.
In unterschiedlichen Abständen kommt jeweils ein Füllzeile, in der nichts stehen darf. Die Aufteilung ist hierbei genau so:
3 Zeilen mit jeweils 10 Buttons
Füllzeile

6 Zeilen mit jeweils 10 Buttons
Füllzeile
14 Zeilen ""
Füllzeile
5 Zeilen ""
Füllzeile
9 Zeilen ""


Jetzt soll im zweiten Arbeitsblatt (A2) für jeden Button in jeder Zeile eine Zahl ausgewiesen werden. Klicke ich also Button 1 in Zeile 1, würde in A2 in zelle B2 eine 1 erscheinen. Selbe zeile aber Button zwei, wäre es dann eine 2 in B2 usw. Insgesamt also 1-10 , wobei jede Zeile einen neuen Zellbezug in A2 hätte und wieder bei 1 begänne. Schlussendlich wäre dann noch ein Befehl für einen gesonderten Control Button, der alle Option buttons im aktiven Arbeitsblatt resettet.

Hoffe, das war einigermaßen verständlich. Kann mir hier bitte jemand mit den entsprechenden Befehlen helfen? Angel

Danke!!
Moin

Mal eben 370 Option Buttons verwalten? Da hat wohl jemand Langeweile.
Eigentlich reicht doch ein X in die Zelle setzen.
Leider reicht das nicht. Funktionieren würde das grundsätzlich aber auch dann müsste man via Makro die Eingaben resetten. Daneben gibt es noch eine Reihe anderer Gründe, wieso es in diesem Fall via Option Buttons gehen muss.

Gruß
Dann bin ich mal gespannt wie die VBA-Spezis das bewerten.
Um dem Ganzen noch einen Anstoß zu geben: Ich habe eine Vorlage im Netz gefunden und leicht abgeändert .

Damit werden an vorgegebener Position stets zwei neue Reihen mit jeweils zehn Option Buttons erstellt. Das funktioniert soweit gut, nur bleiben bei mir zwei Fragen übrig:

1) Wie schaffe ich es statt zwei "Fragereihen" 37 zu erstellen und dabei die zuvor genannten Füllreihen einzuhalten? Bei NumberOfQuestions einfach 37 einzugeben funktioniert ja leider nur bedingt. 
2) Im Augenblick gibt er links neben jeder Reihe eine Zahl aus, abhängig davon welcher Button angeklickt wurde. Wenn ich das richtig verstehe, geschieht das unten mit der LinkedCell. Wie muss ich die zeilen abändernl, damit diese Zahlen an exakt selber Stelle nur auf einem anderen Arbeitsblatt ausgegeben werden, nennen wir es "Blatt 2"?

Hoffe, es hat jemand eine Idee. Undecided



Code:
Option Explicit
Sub SetupSurvey()
Dim grpBox As GroupBox
Dim optBtn As OptionButton
Dim maxBtns As Long
Dim myCell As Range
Dim myRange As Range
Dim wks As Worksheet
Dim iCtr As Long
Dim FirstOptBtnCell As Range
Dim NumberOfQuestions As Long

maxBtns = 10
NumberOfQuestions = 2

Set wks = ActiveSheet
With wks
  Set FirstOptBtnCell = .Range("F5")
 
  Set myRange = FirstOptBtnCell _
    .Resize(NumberOfQuestions, 1)
    
  myRange.Offset(0, -3).Value = 1

  myRange.EntireRow.RowHeight = 38
  myRange.Resize(, maxBtns) _
    .EntireColumn.ColumnWidth = 9.5

  'clean up existing junk
  .GroupBoxes.Delete
  .OptionButtons.Delete

End With

For Each myCell In myRange
  With myCell.Resize(1, maxBtns)
    Set grpBox = wks.GroupBoxes.Add _
        (Top:=.Top, Left:=.Left, _
          Height:=.Height, _
          Width:=.Width)
    With grpBox
      .Caption = ""
      .Visible = True 'False
    End With
  End With
  For iCtr = 0 To maxBtns - 1
    With myCell.Offset(0, iCtr)
      Set optBtn = wks.OptionButtons.Add _
        (Top:=.Top, Left:=.Left, _
        Height:=.Height, Width:=.Width)
      optBtn.Caption = ""
      If iCtr = 0 Then
        With myCell.Offset(0, -1)
          optBtn.LinkedCell _
            = .Address(external:=True)
        End With
      End If
    End With
  Next iCtr
Next myCell

End Sub
Hallöchen,

Zitat:Bei NumberOfQuestions einfach 37 einzugeben funktioniert ja leider nur bedingt.
Bliebe die Frage, was bei Dir bedingt ist. Ich sehe da kein passendes If Sad


zur anderen Frage:

Code:
With myCell.Offset(0, -1)
          optBtn.LinkedCell _
            = "Tabelle4!" & .Address

Blattname mit Ausrufezeichen vor die Adresse und das externe weglassen.
Hallo schauan!

Danke für deine Antwort. Das mit dem Tabellenblatt hätten wir dann schonmal.

Was die Zeilenanzahl angeht: Mit "bedingt" bezog ich mich nicht auf ein dazugehörigen If-befehl. Wollte damit nur sagen, dass es so nicht funktioniert, weil er dann die Füllzeilen an den gewünschten Stellen einfach überschreibt. Vielleicht verstehe ich Dich aber auch einfach nicht.

Wenn Dir auch nicht einfällt, wie man Füllzeilen an bestimmten stellen einbauen kann, wäre es dann als Workaround denkbar, dass wir das Makro dreimal kopieren, jeweils mit unterschiedlichen NumberofQuestions und fixen Positionen im Arbeitsblatt, sodass wir insgesamt vier haben und diese vier dann mit einem extra Makro alle nacheinander durchspulen?

Hoffe, das war jetzt verständlich... Undecided 

Gruß
Hallöchen,

mein Hinweis bezog sich eigentlich nur darauf, dass Du geschrieben hast, dass die 37 nur bedingt funktionieren. Technisch gesehen ist der Code i.O. und erzeugt Dir dann 37 "Fragezeilen", nur ohne die gewünschten "Füllzeilen"
Da selbige in unregelmäßigen Abständen kommen, wäre nun die Frage, ob Du den Code öfter brauchst oder es eine einmalige Sache ist.
Bei einmalig könntest die die Parameter für die Anzahl Zeilen und die Startzeile einfach korrigieren und den Code nochmal durchlaufen lassen, bis alles passt. Das wollte ich in meiner Antwort nicht extra schreiben Smile

Wenn Du den Code öfter brauchst, könnte man das Sub mit den gewünschten Parametern aus einem anderen Sub heraus aufrufen. Das andere enthält 4 Zeilen aus dem SetupServey und die tust Du dort dort löschen

im Prinzip so - hier mal Life geschrieben:

Code:
Sub LosGehts()

Dim FirstOptBtnCell As Range
Dim NumberOfQuestions As Long

Set FirstOptBtnCell = .Range("F5")
NumberOfQuestions = 2

'Aktion aufrufen
Call SetupSurvey(FirstOptBtnCell, NumberOfQuestions)

'naechste Reihe
Set FirstOptBtnCell = .Range("F10")
NumberOfQuestions = 4

'Aktion aufrufen
Call SetupSurvey(FirstOptBtnCell, NumberOfQuestions)

'naechste Reihe ...
End Sub

Sub SetupSurvey(FirstOptBtnCell As Range, NumberOfQuestions  As Long)
HI schauan,

nochmals danke!

"Wenn Du den Code öfter brauchst, könnte man das Sub mit den gewünschten Parametern aus einem anderen Sub heraus aufrufen. Das andere enthält 4 Zeilen aus dem SetupServey und die tust Du dort dort löschen"


Kannst Du mir deinen letzten Satz bitte nochmal erklären. Ich glaube zwar zu verstehen, worauf Du hinaus möchtest, sicher bin ich mir aber nicht. Im Grunde soll ich in deinen Code die Parameter für jeden Zellabschnitt zwischen den Füllzeilen einfügen und den Rest holt er sich aus dem ursprünglichen Sub?

Gruß
Hallöchen

Ja, genau so mein ich das. Man könnte jetzt noch alle Parameter in ein Array packen und das in einer Schleife abarbeiten, aber ich denke , so reicht es :17:
Seiten: 1 2