Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema SpinButton
BildScreenshot zu SpinButton SpinButton-Seite mit Beispielarbeitsmappe aufrufen

Input Box Kalenderwochen


Betrifft: Input Box Kalenderwochen von: Kulo
Geschrieben am: 09.01.2018 23:25:34

Hallo Zusammen,
es geht darum, in einer Input Box eine Anzahl von zu druckenden Kopien einer Tabelle einzugeben.
Da pro Kalenderwochen nur eine Kopie benötigt wird, möchte ich nur eine Eingabe zwischen eins und maximal der Anzahl der Kalenderwochen des aktuellen Jahres minus der aktuellen Kalenderwoche zulassen.
Da auch für das Folgejahr Ausdrucke möglich sein sollen, nehme ich die zu berücksichtigende Jahreszahl aus Tabelle1!A1. Dort als "2018" ohne Format.
Für 2019 währen dann ja 53 +/- Ausdrucke möglich, für 2018 53 - jetzt 2.
Wie bekomme ich das in vba hin.
Für eure Ideen bedanke ich mich bereits im Voraus.
Viele Grüße
Kulo

  

Betrifft: AW: Input Box Kalenderwochen von: Sepp
Geschrieben am: 09.01.2018 23:45:23

Hallo Kulo,

Sub eingabe()
Dim varInput As Variant
Dim lngMax As Long, lngAct As Long

lngAct = DatePart("ww", Date, vbMonday, vbFirstFourDays)
lngMax = DatePart("ww", DateSerial(Tabelle1.Range("A1") - 1, 12, 31), vbMonday, vbFirstFourDays)
If lngMax = 1 Then lngMax = 53
lngMax = lngMax - lngAct

Do
  varInput = Application.InputBox("Bitte Anzahl der Ausdrucke angeben (1 - " & lngMax & ")", "Drucken", Type:=1)
Loop While (varInput < 1 Or varInput > lngMax) And CStr(varInput) <> "Falsch"

MsgBox varInput
End Sub


Gruß Sepp



  

Betrifft: Das minus 1 muus weg! von: Sepp
Geschrieben am: 10.01.2018 00:07:30

hatte ich nur zum testen drin !

Sub eingabe()
Dim varInput As Variant
Dim lngMax As Long, lngAct As Long

lngAct = DatePart("ww", Date, vbMonday, vbFirstFourDays)
lngMax = DatePart("ww", DateSerial(Tabelle1.Range("A1"), 12, 31), vbMonday, vbFirstFourDays)
If lngMax = 1 Then lngMax = 53
lngMax = lngMax - lngAct

Do
  varInput = Application.InputBox("Bitte Anzahl der Ausdrucke angeben (1 - " & lngMax & ")", "Drucken", Type:=1)
Loop While (varInput < 1 Or varInput > lngMax) And CStr(varInput) <> "Falsch"

MsgBox varInput
End Sub


Gruß Sepp



  

Betrifft: noch ne Frage von: Kulo
Geschrieben am: 10.01.2018 22:20:54

Hallo Sepp,

vielen vielen Dank für Deine schnelle Hilfe undvor allem um diese Zeit. :-)

Ich wollte, dass im aktuellen Jahr nur so viele Ausdrucke möglich sind, wie aktuell noch Kalenderwochen bis zum Jahresende übrig sind. - Passt.

Für alle Folgejahre sollte die maximale Anzahl der Ausdrucke der Anzahl der Kalenderwochen in diesem Folgejahr entsprechen. Hattest Du meine Frage so veranden?

Irgendwie kamen für die Folgejahre auch nur Anzahl der KW - Wet der jetzigen KW raus.

Ich habe mir so beholfen:

Sub eingabe()
Dim varInput As Variant
Dim lngMax As Long, lngAct As Long

lngAct = DatePart("ww", Date, vbMonday, vbFirstFourDays)
lngMax = DatePart("ww", DateSerial(Tabelle1.Range("A1"), 12, 31), vbMonday, vbFirstFourDays)
If lngMax = 1 Then lngMax = 53
If Tabelle1.Range("A1") > Year(Date) Then

lngMax = lngMax
Else
lngMax = lngMax - lngAct
End If

Do
  varInput = Application.InputBox("Bitte Anzahl der Ausdrucke angeben (1 - " & lngMax & ")", " _
Drucken", Type:=1)
Loop While (varInput < 1 Or varInput > lngMax) And CStr(varInput) <> "Falsch"

MsgBox varInput
End Sub
Ist das so auch in Ordnung? Oder habe ich Deinen Code falsch interprediert?

Über eine kurze Info würde ich mich freuen.

Vielen Dank nochmals und Grüße

Kulo


  

Betrifft: AW: noch ne Frage von: Sepp
Geschrieben am: 10.01.2018 23:00:08

Hallo Kulo,

hatte ich übersehen,

Deine Lösung passt, ich hätte es so gemacht.

Sub eingabe()
Dim varInput As Variant
Dim lngMax As Long, lngAct As Long

lngAct = DatePart("ww", Date, vbMonday, vbFirstFourDays)
lngMax = DatePart("ww", DateSerial(Tabelle1.Range("A1"), 12, 31), vbMonday, vbFirstFourDays)
If lngMax = 1 Then lngMax = 53
lngMax = lngMax - (lngAct * -(Tabelle1.Range("A1") = Year(Date)))

Do
  varInput = Application.InputBox("Bitte Anzahl der Ausdrucke angeben (1 - " & lngMax & ")", "Drucken ", Type:=1)
Loop While (varInput < 1 Or varInput > lngMax) And CStr(varInput) <> "Falsch"

MsgBox varInput
End Sub


Gruß Sepp



  

Betrifft: AW: noch ne Frage von: Kulo
Geschrieben am: 12.01.2018 12:37:00

Hallo Sepp,

vielen Dank, dass Du Dir meinen Code nochmal angeschaut hast.
Deiner sieht natürlich eleganter aus.
Der Code funktioniert! Aber warum?
Ich hab lange gebraucht, um dahinter zu steigen.

Tabelle1.Range("A1") = Year(Date))
prüft, ob der Wert aus Tabelle1.Range("A1") gleich der heutigen Jahreszahl ist. Wenn ja, wird wird aus dem Wert True, wenn nicht dann False
Das Minus vor dem Wert wandelt True oder False in eine Zahl um und und rechnet "*(-1)". False entspricht der Zahl 0 und True = "-1" -> mal "-1" wird aus 0 die 0 und aus -1 die 1.
 (lngAct * -(Tabelle1.Range("A1") = Year(Date)))
rechnet also für das aktuelle Jahr die Aktuelle KW (lngAct) * dem Ergebnis aus der Behauptung, dass der Wert in "A1" gleich der aktuellen Jahreszahl entspricht. Bei Ja, wird es zu Wahr -> zu -1 -> *(-1) = 1, bei Nein wird es zu False -> zu 0 -> zu 0.
lngMax = lngMax - (lngAct * -(Tabelle1.Range("A1") = Year(Date)))
rechnet dann
die maximalen KW - die aktuelle KW * 1 für das aktuelle Jahr und
die maximalen KW - die aktuelle KW * 0 für jedes andere Jahr.

Das hab ich doch jetzt richtig verstanden - oder?

Genial Sepp.

Oh man, ich hab noch viel zu lernen... ;-)

Also vielen Dank nochmals und ein schönes Wochenende

Viele Grüße
Kulo


  

Betrifft: Du hast es durchschaut! ;-)) o.T. von: Sepp
Geschrieben am: 12.01.2018 13:42:26

Gruß Sepp



  

Betrifft: Nochwas - Userform? von: Kulo
Geschrieben am: 14.01.2018 23:32:28

Hallo Sepp,

vielen Dank nochmal für Deine Hilfe.
Darf ich Dich nochmal bitten:

Ich hab mich mal bei den UserForm's umgeschaut.
Ich glaube, die eignen sich besser für meine Abfragen.

In meiner Beispieldatei https://www.herber.de/bbs/user/118966.xlsm
hab ich eine Userform gebastelt. Dort funktioniert aber überhaupt nix.
Könntest Du da nochmal drüberschauen?

Würde mich sehr freuen.

Viele Grüße
Kulo


  

Betrifft: AW: Nochwas - Userform? von: Sepp
Geschrieben am: 14.01.2018 23:46:02

Hallo Kulo,

' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Sub cbJahr_Change()
Call setSpinButton
End Sub

Private Sub SpinButtonAnzahl_Change()
tbAnzahl = SpinButtonAnzahl.Value
End Sub

Private Sub tbAnzahl_Change()
If IsNumeric(tbAnzahl.Value) And tbAnzahl.Value >= SpinButtonAnzahl.Min And tbAnzahl.Value <= SpinButtonAnzahl.Max Then
  SpinButtonAnzahl.Value = tbAnzahl.Value
Else
  tbAnzahl.Value = SpinButtonAnzahl.Value
End If
End Sub

Private Sub Userform_Initialize()

With cbJahr
  .AddItem Year(Date)
  .AddItem Year(Date) + 1
  .ListIndex = 0
End With

obSpesenNein.Value = True

Call setSpinButton

End Sub

Private Sub setSpinButton()
Dim lngAct As Long, lngMax As Long

lngAct = DatePart("ww", Date, vbMonday, vbFirstFourDays)
lngMax = DatePart("ww", DateSerial(cbJahr, 12, 31), vbMonday, vbFirstFourDays)

If lngMax = 1 Then lngMax = 53

SpinButtonAnzahl.Max = lngMax - (lngAct * -(cbJahr = CStr(Year(Date))))
If SpinButtonAnzahl.Max < 5 Then
  SpinButtonAnzahl.Value = SpinButtonAnzahl.Max
Else
  SpinButtonAnzahl.Value = 5
End If
SpinButtonAnzahl.Min = 1
End Sub


Gruß Sepp



  

Betrifft: AW: Nochwas - Userform? von: Kulo
Geschrieben am: 15.01.2018 11:13:03

Hallo Sepp,

absolut perfekt!

Ich freue mich rießig!

Innerhalb von 10 Minuten stand deine Lösung online. Man könnte meinen, Du hast nur noch auf diese Frage gewartet... ;-)

Vielen Dank Sepp und viele Grüße
Kulo


Beiträge aus dem Excel-Forum zum Thema "Input Box Kalenderwochen "