Excel - individuelle Anzahl von Spalten

V

VirusDeluXe

Gast
Hallo,

ich arbeite gerade an einem Makro, dass bei der einen Variante ein statisches Blatt formatiert und bei der Anderen ein Individuelles. Ich versuche es mal genauer zu erläutern.

Zuerst soll eine Messagebox aufpoppen die frägt "Ist die Anzahl an Artikel bekannt?" Wenn ich nun auf "Nein" drücke, dann wird folgendes Ausgegeben:

------------- #1 --- #2 --- #3 --- #4 --- #5 ...
Frage1:
Frage2:
Frage3:

Also wird oben eine bestimmte Anzahl an Spalten vorformatiert. Wenn ich nun aber sage, dass ich die Anzahl der Artikel kenne, dann soll er oben die Anzahl der vorformatierten Spalten aus meiner Eingabe entnehmen. Würde ich also zum Beispiel sagen, dass ich die Anzahl kenne und gebe die "3" als Antwort ein, dann soll es so aussehen:

------------- #1 --- #2 --- #3
Frage1:
Frage2:
Frage3:

... gebe ich nun z.B. eine 7 ein, dann soll es so aussehen:

------------- #1 --- #2 --- #3 --- #4 --- #5 --- #6 --- #7
Frage1:
Frage2:
Frage3:

Dieses Stück mit der Box, der Übergabe der Eingabe etc. bekomme ich nicht hin da ich absolut keine Ahnung von VBA habe. Normale Formatierungen im Makro aufzeichnen ist dabei bereits das höchste der Gefühle. Die statische Variante wo ich 10 Stück vorbestimme, die habe ich bereits. Ich brauche nurnoch die individuelle Variante.

Hoffe ich konnte es verständlich machen was ich brauche. Wenn mir jemand dazu einen Codeschnipsel geben könnte der zumindest das da oben ausgeben kann, kann ich es richtig an mein großes Makro sicherlich anpassen.

Vielen Dank im vorraus.
 
Zuletzt bearbeitet:
test.zip im Anhang.

Ich würds so realisieren, eine InputBox, wo der Standardwert einfach 5 ist und die Leute einfach OK drücken, wenn sie die Anzahl nicht kennen.
In den VBA Editor kommst du mit ALT+F11.

Wenn du etwas von irgendeiner Programmiersprache verstehst ist es ganz leicht. Nur eine Schleife. Das Objekt "Cells" beschreibt übrigends die Bezugszelle für den Value.
 

Anhänge

Vielen dank, dass hat mir wirklcih sehr geholfen! Nur eine kleine Frage noch:

Was mache ich gegen den unschönen Fehler, falls mal jmd. auf "abbrechen" drückt?

Ansonsten wirklich alles super!
 
*edit1: Code entfernt, war unsauber, 1 sec, ich schreib die schleife in ein IF.
Ergänzung ()

Musste leider den Code ändern.

Option Explicit
Private Sub cmdStart_Click()
Dim i As Variant
Dim j As Integer

i = InputBox("Ist die Anzahl an Artikel bekannt?" & vbCrLf & "Wenn ja, dann bitte Zahl angeben." & vbCrLf & "Wenn Nein, dann einfach OK drücken", "Anzahl?", "5")

If (i = "") Then
Exit Sub
End If


For j = 1 To i
ActiveSheet.Cells(1, (j + 1)).Value = "# " & j
Next j

ActiveSheet.Cells(2, 1).Value = "Frage 1"
ActiveSheet.Cells(3, 1).Value = "Frage 2"
'und so weiter

End Sub


Und nochmal was, wenn du generelles Fehlerhandling willst, dann setz an den Anfang bei der Variablendeklaration ein "On Error Goto Errorhandler".
Vor dem "End Sub" Fügst du dann "Exit Sub" und darunter "Errorhandler:" und darunter den Code ein.

Private Sub Errorhandler()
On Error GoTo Errorhandler

Code hier

Exit Sub

Errorhandler:
MsgBox "Ein Fehler ist aufgetreten!" & vbCrLf & "Error-Code: " & Err.Number & vbCrLf & "Error-Description: " & Err.Description _
& vbCrLf & vbCrLf & "Bitte Informieren Sie den Administrator.", "Fehler"

End Sub
 
Zuletzt bearbeitet:
Ich bin unglaublich dankbar. Nun ist mir aber doch nochwas eingefallen (wie schnell das doch geht - danach ist aber Ruhe :D)

Ist es nun noch möglich in der Box auszuschließen, dass jemand anstatt einer Zahl einfach Buchstaben oder Sonderzeichen einschreibt?

Dann wäre es zu 100% perfekt!

Bisher aber schon sehr sehr sehr großen Dank!
 
ja klar... warte ich machs kurz.

Option Explicit
Private Sub cmdStart_Click()
Dim i As Variant
Dim j As Integer
On Error GoTo Errorhandler

i = InputBox("Ist die Anzahl an Artikel bekannt?" & vbCrLf & "Wenn ja, dann bitte Zahl angeben." _
& vbCrLf & "Wenn Nein, dann einfach OK drücken", "Anzahl?", "5")

If (i = "") Then
Exit Sub
End If

If ((IsNumeric(i) = True) And (i > 0) And ((i - Int(i)) = 0)) Then
For j = 1 To i
ActiveSheet.Cells(1, (j + 1)).Value = "# " & j
Next j
ActiveSheet.Cells(2, 1).Value = "Frage 1"
ActiveSheet.Cells(3, 1).Value = "Frage 2"

Else:
MsgBox "Bitte nur positive Ganzzahlen größer als 0!", vbCritical, "Fehler!"

'und so weiter
End If
Exit Sub

Errorhandler:
MsgBox "Ein unerwarteter Fehler ist aufgetreten." & vbCrLf & "Fehlernummer: " & Err.Number & vbCrLf & "Fehlerbeschreibung: " _
& Err.Description & vbCrLf & vbCrLf & "Bitte wenden Sie sich an den Administrator", vbCritical, "Unerwarteter Fehler"

End Sub

Den Code darfst dir jetzt selber zerpflücken, aber das IF erklär ich kurz...

If ((IsNumeric(i) = True) And (i > 0) And ((i - Int(i)) = 0)) Then
Wenn i eine Zahl ist und größer als Null ist und wenn i minus (i als ganzzahl) gleich null ist gehts weiter, sonst nicht.
Das i - int(i) prüft obs eine Ganzzahl ist.
 
Zuletzt bearbeitet:
Vielen vielen dank. Hatte zugar derweil selbst noch eine Lösung hinbekommen, aber die hatte dann auf jedenfall auch einen sehr guten lerneffekt! Ich danke dir vielmals dafür - war somit auch für mich heute nochmal eine kleine Schulung.

Wünsche dir schöne Weihnachten und einen guten Rutsch! :)
 
Zurück
Oben