Frage von Herbertkurt, 68

Fragebogen erstellen und Eingaben in Excel speichern?

Guten Tag Ich möchte einen Fragebogen erstellen (ca. 50 Fragen), der dann von den Besuchern auf unserem Computer ausgefüllt werden kann (muss nicht online sein), und dessen Eingaben in einer Excel-Datei gespeichert werden. Kann ich dafür Excel-Formulare benutzen? Jede Frage sollte ein bestimmte Anzahl an Antworten zu Auswahl haben. Ansonsten sollte das Formular gesperrt sein. Kann mir jemand helfen? Besten Dank

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Ninombre, Community-Experte für Excel, 49

Ich würde es mit VBA und UserForm angehen. Da ich die Aufgabenstellung selbst spannend finde habe ich etwas gebastelt. Vieles kannst Du direkt übernehmen, es wird aber sicherlich dennoch notwendig sein, dass Du Dich für Anpassungen mit VBA auseinandersetzt.

Du brauchst: Drei Tabellenblätter
Start - einfach nur um die Userform aufrufen zu können, ggf. sonst noch Infos draufschreiben
Ergebnisse: Protokollieren der Eingaben
Fragen: Der Flexibilität wegen würde ich die Fragen und Antwortmöglichkeiten nicht im Code direkt eingeben, sondern dynamisch auslesen. Vom Aufbau her: Erste Zeile die Frage, die nächsten die Auswahloptionen. Ich gehe hier von max 4 Möglichkeiten aus, lässt sich aber erweitern. Gibt es zu einer Frage weniger Antwortmöglichkeiten als die Maximalanzahl wird der RadioButton ausgeblendet. Die Logik ist im Code hinterlegt (sub datensetzen)

Die Tabellenblätter Ergebnisse und Fragen kannst Du ausblenden, das braucht keine sehen bzw. sollte ungeprüft auch keiner ändern.


Unter Ribbon Entwicklertools eine Userform erstellen und ein Modul anlegen

Userform, s. Bild:
Ich habe eine einfache Lösung gebastelt: Ein Anzeigefeld (Label) für die Fragen, 4 Optionbutton für die Antworten, 2 Button: 1x weiter zur nächsten Frage und 1x Löschen der Antworten


Ins Modul:

'zwei globale Variablen:
Public click As Integer 'zählt die Fragen durch
Public zeile As Long 'die Zeile in der die Ergebnisse dokumentiert werden

Sub start() 'das Makro mit dem Button auf Tabellenblatt Start verbinden
click = 1
Call datensetzen
UserForm1.Show
End Sub

Sub datensetzen() 'lädt Frage und Antwortoptionen bzw. setzt die Beschriftungen in der Userform
Dim i As Integer
UserForm1.Label1.Caption = Sheets("Fragen").Cells(1, click).Value
For i = 1 To 4
UserForm1.Controls("OptionButton" & i).Caption = Sheets("Fragen").Cells(i + 1, click).Value
UserForm1.Controls("OptionButton" & i).Value = False
If Sheets("Fragen").Cells(i + 1, click).Value = "" Then UserForm1.Controls("OptionButton" & i).Visible = False Else UserForm1.Controls("OptionButton" & i).Visible = True
Next
End Sub

Sub ende() 'nach der letzten Frage und bei Abbruch Optionbutton ausblenden
click = 0
UserForm1.Label1.Caption = "Vielen Dank für die Teilnahme!"
UserForm1.OptionButton1.Visible = False
UserForm1.OptionButton2.Visible = False
UserForm1.OptionButton3.Visible = False
UserForm1.OptionButton4.Visible = False
UserForm1.CommandButton1.Caption = "Neustart"
UserForm1.CommandButton2.Enabled = False 'damit man nicht das fertige Ergebnis löschen kann

End Sub


in den Code zur Userform:

'Nur bei einem neuen Fragebogen notwendig: Werte und Beschriftung initialisieren
If click = 0 Then
UserForm1.CommandButton1.Caption = "Nächste Frage"
click = 1
Call datensetzen
Exit Sub
End If

' ausgewählten Optionbutton ermitteln
Dim myControl As Control
Dim auswahl As String
For Each myControl In UserForm1.Controls
If TypeName(myControl) = "OptionButton" Then
myControl.Visible = True
If myControl.Value = True Then auswahl = myControl.Caption
End If
Next

'bei der ersten Frage die letzte verwendete Zeile ermitteln. Zeitstempel in die nächste Zeile setzen
If click = 1 Then
zeile = Sheets("Ergebnisse").Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets("Ergebnisse").Cells(zeile, click).Value = Now()
UserForm1.CommandButton2.Enabled = True
End If

'bei jeder weiteren Frage das Ergebnis protokollieren
Sheets("Ergebnisse").Cells(zeile, click + 1).Value = auswahl
click = click + 1
Call datensetzen

'nach der letzten Frage
If click = 4 Then Call ende
End Sub

Private Sub CommandButton2_Click()
Rows(zeile).Delete
Call ende
End Sub

Kommentar von Herbertkurt ,

Wau! Da hast du dich aber ins Zeug gelegt! Besten Dank!!! Werde heute wenn schauen ob ich weiterkomme mit meinem Formular. Habe noch keine VBA Kenntnisse. Mache mich aber mal etwas schlau... Danke für die Hilfe!

Kommentar von Ninombre ,

bei Bedarf einfach hier noch mal nachhaken

Antwort
von PWolff, 37

Meinst du mit Excel-Formularen die üblichen Excel-Tabellen oder Benutzerformulare?

Mit Excel-Tabellen ist es vermutlich nicht unmöglich, aber sehr schwierig.

Mit Benutzerformularen und Makros ist es einfach, erfordert aber Kenntnisse in VBA (Visual Basic for Applications).

Kommentar von Herbertkurt ,

Habe schon gedacht mit benutzerformularen. Habe aber noch keine Erfahrung mit VBA. BIn mir gerade ein Tutorial am anschauen... :) Besten Dank.

Keine passende Antwort gefunden?

Fragen Sie die Community