Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1600to1604
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Input Box Kalenderwochen

Input Box Kalenderwochen
09.01.2018 23:25:34
Kulo
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

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Input Box Kalenderwochen
09.01.2018 23:45:23
Sepp
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

Anzeige
Das minus 1 muus weg!
10.01.2018 00:07:30
Sepp
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

Anzeige
noch ne Frage
10.01.2018 22:20:54
Kulo
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  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
Anzeige
AW: noch ne Frage
10.01.2018 23:00:08
Sepp
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

Anzeige
AW: noch ne Frage
12.01.2018 12:37:00
Kulo
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
Anzeige
Du hast es durchschaut! ;-)) o.T.
12.01.2018 13:42:26
Sepp
Gruß Sepp

Nochwas - Userform?
14.01.2018 23:32:28
Kulo
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
Anzeige
AW: Nochwas - Userform?
14.01.2018 23:46:02
Sepp
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

Anzeige
AW: Nochwas - Userform?
15.01.2018 11:13:03
Kulo
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige