Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Option Button Szenario
#1
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!!
Antworten Top
#2
Moin

Mal eben 370 Option Buttons verwalten? Da hat wohl jemand Langeweile.
Eigentlich reicht doch ein X in die Zelle setzen.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • Glorifier
Antworten Top
#3
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ß
Antworten Top
#4
Dann bin ich mal gespannt wie die VBA-Spezis das bewerten.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

[-] Folgende(r) 1 Nutzer sagt Danke an shift-del für diesen Beitrag:
  • Glorifier
Antworten Top
#5
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
Antworten Top
#6
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Glorifier
Antworten Top
#7
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ß
Antworten Top
#8
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)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Glorifier
Antworten Top
#9
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ß
Antworten Top
#10
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:
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Glorifier
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste