Mit VBA die heutige Kalenderwoche finden

Moderator: ModerationP

Mit VBA die heutige Kalenderwoche finden

Beitragvon mjberger » 09. Aug 2018, 11:17

Moin,

ich mal wieder :D in einer Excel Tabelle würde ich gerne ein VBA Userform erstellen, in der man Daten für die Kalenderwoche eintragen kann und auf Bestätigen klickt und die Daten immer der heutigen KW zugeordnet werden. (Beispiel im Bild)

Mit einem Datum habe "ich" das schon wie folgt lösen können:

Code: Alles auswählen
Dim Zeile As Long
Zeile = Date - Sheets("AB1").Range("C5").Value + 5
Sheets("AB1").Cells(Zeile, 4).Value = TextBox1.Text


Kann jemand helfen? :)

Gruß,

mjberger
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
mjberger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 78
Registriert: 23. Jul 2018, 08:15

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon losgehts » 09. Aug 2018, 11:31

Hallo,

hm, mir ist nicht so wirklich klar, was du jetzt benötigst.

Vielleicht hilft dir bereits die Kalenderwoche als Zahl weiter. Du kannst die Funktion benutzen, die du auch im Tabellenblatt als Formel benutzt :
=KALENDERWOCHE(heute();2)
Code: Alles auswählen
MsgBox Application.WorksheetFunction.WeekNum(Date, 2)


Viel Erfolg!

Grüße, Ulrich
Ich freue mich über jede Art von Feedback
Die Forensoftware sendet mir aktuell keine Benachrichtigungen mehr zu, daher kann es gut sein, dass ich deine Antwort auf meinen Post nicht mitbekomme.
losgehts
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4498
Registriert: 03. Okt 2006, 14:08

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon steve1da » 09. Aug 2018, 11:33

Hola,

ab Excel sollte man bei Kalenderwoche() den Parameter 21 benutzen. Vorher:

http://www.excelformeln.de/formeln.html?welcher=7

Gruß,
steve1da
Benutzeravatar
steve1da
Moderator
 
Beiträge: 27870
Registriert: 24. Sep 2003, 10:54

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon mjberger » 09. Aug 2018, 11:41

@ steve1da @losgehts

also ich habe hier bspw. dieses Userform (Anhang) und wenn jemand auf Bestätigen klickt, sollen diese Werte rechts von der heutigen KW eingetragen werden.

Also theoretisch so etwas: Sheets("AB1).Cells(ZeileKWheute, 4).Value = TextBox1.Text

Nur wie baue ich ZeileKWheute auf?

Gruß,

mjberger
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
mjberger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 78
Registriert: 23. Jul 2018, 08:15

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon slowboarder » 09. Aug 2018, 11:54

Im Prinzip genau so

Zeile Aktuelle KW = Aktuelle KW - Erste KW + Erste Zeile

Wie du die KW berechnet, wurde dir ja gezeigt.


Allerdings ist die KW eine normale Zahl oder ein Text (je nachdem, ob das "KW" jetzt im Zellwert mit drin ist oder nicht.
Dh du kannst hier auch normal mit .FIND suchen.

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 24688
Registriert: 18. Apr 2009, 13:33

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon losgehts » 09. Aug 2018, 11:58

Hallo,

@steve1da vielen Dank für deinen Hinweis! Dass Excel das erst in Version 2010 hinbekommt :oops:. Dabei habe ich extra in der Hilfe von Excel2007 nachgesehen?!
Muss man nicht verstehen..

Zur Berechnung der Zeilennummer: entweder du kannst mit der Zahl der Kalenderwoche ( DIN_KW(Date) ) etwas anfangen, oder du musst eben in der Spalte suchen:
Code: Alles auswählen
Sub bspl()
Dim rngKW As Range
    With Sheets("AB1")
        Set rngKW = .Columns(3).Cells.Find("KW " & DIN_KW(Date), lookat:=xlPart, LookIn:=xlValues)
        If rngKW Is Nothing Then
            MsgBox "Kalenderwoche konnte nicht gefunden werden"
            Exit Sub
        Else
            .Cells(rngKW.Row, 4).Value = TextBox1.Text
        End If
    End With
End Sub

Public Function DIN_KW(DasDatum As Date) As Byte
'Quelle: https://www.online-excel.de/excel/singsel_vba.php?f=48
 Dim KW As Date
 KW = 4 + DasDatum - Weekday(DasDatum, 2)
 DIN_KW = (KW - DateSerial(Year(KW), 1, -6)) \ 7
End Function

Der Code ist natürlich ungetestet... An Bildern kann ich nicht testen. Ich sehe ja noch nicht einmal, in welcher Spalte ich suchen soll!

Wie du bemerkst, habe ich nichts mit Kalenderwochen zu tun - kenne mich da also nicht aus, aber der Quelle vertrau ich!

Grüße, Ulrich
Ich freue mich über jede Art von Feedback
Die Forensoftware sendet mir aktuell keine Benachrichtigungen mehr zu, daher kann es gut sein, dass ich deine Antwort auf meinen Post nicht mitbekomme.
losgehts
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4498
Registriert: 03. Okt 2006, 14:08

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon slowboarder » 09. Aug 2018, 12:04

Kalenderwoche berechnen kann Excel schon länger.
Allerdings wurde die Berechnungsmethode nach deutscher Norm erst mit 2010 implementiert, davor kannst du nur nach amerikanischer Norm rechnen und die weicht etwas von der deutschen ab, so dass es in machen Jahren zu einem Unterschied zwischen beiden Methoden kommt.

Gruß Daniel
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 24688
Registriert: 18. Apr 2009, 13:33

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon mjberger » 09. Aug 2018, 12:13

@slowboarder

Aber Aktuelle KW ist ja nur eine Funktion für Excel und nicht für VBA oder? Also VBA kann mit Aktuelle KW ja nichts anfangen

Gruß,

mjberger
mjberger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 78
Registriert: 23. Jul 2018, 08:15

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon Gast » 09. Aug 2018, 12:22

Hi mjberger

Versuchs mal hiermit
Code: Alles auswählen
Option Explicit
Sub Test_KW()
Dim KaWo As Integer
Dim t&
    t = DateSerial(Year(Date + (8 - Weekday(Date)) Mod 7 - 3), 1, 1)
    KaWo = (Date - t - 3 + (Weekday(t) + 1) Mod 7) \ 7 + 1
    MsgBox KaWo
End Sub

mfg
Gast
 

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon slowboarder » 09. Aug 2018, 12:22

Hi

Wenn es in Excel ein Funktion gibt, dann kann man die in den meisten Fällen auch in VBA verwenden über

WorkSheetFunction.Englischer Funktionsname(...)

Wurde dir ja schon gezeigt.
Nur sollte man in Deutschland eben als 2. Parameter die 21 einsetzen, sofern man Excel 2010 oder höher hat (Berechnung nach deutscher Norm)


Wen du dem nicht traust, dann berechne die aktuelle KW in einer freien Zelle mit einer Excelformel und verwende diesen Zellwert.

Gruß Daniel.
slowboarder
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 24688
Registriert: 18. Apr 2009, 13:33

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon losgehts » 09. Aug 2018, 12:36

Hallo allerseits,

mir scheint, dass hier von dir, mjberger, übersehen wird, dass ich im Post 09. Aug 2018, 11:58 ebenfalls mit einer korrekt ermittelten KW arbeite.

Grüße, Ulrich
Ich freue mich über jede Art von Feedback
Die Forensoftware sendet mir aktuell keine Benachrichtigungen mehr zu, daher kann es gut sein, dass ich deine Antwort auf meinen Post nicht mitbekomme.
losgehts
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4498
Registriert: 03. Okt 2006, 14:08

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon mjberger » 10. Aug 2018, 07:52

Also so richtig bekomme ich es nicht hin.

@losgehts

Bei deinem Code sagt er mir zu DIN_KW(Date) -> Sub oder Function nicht definiert.

Dann habe ich es mit
Code: Alles auswählen
Zeile = Application.WorksheetFunction.WeekNum(Date, 2)
Sheets("AB1").Cells(Zeile, 3).Value = TextBox1


Das läuft aber auch nicht.
Ich habe mal eine Beispieldatei hochgeladen, vielleicht versteht ihr dann ja etwas besser das Problem.

Und ja ich weiß, ich höre mittlerweile schon bei den neuen Tabellen auf die Zellen zu verbinden :D

Gruß, mjberger
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
mjberger
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 78
Registriert: 23. Jul 2018, 08:15

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon losgehts » 12. Aug 2018, 22:16

Hallo,

ich glaube, du übersiehst die Scrallbalken seitlich vom Code und kopierst nur den halben Code!

Hier eine auf deine Beispieldatei zugeschnittene Möglichkeit:
Code: Alles auswählen
Sub bspl2()
Dim strWert1 As String
Dim zeileKW As Long
    strWert1 = "Beispiel"
    zeileKW = 6 + 4 * DIN_KW(Date)
    Sheets("Tabelle1").Cells(zeileKW, 4).Value = strWert1
End Sub

Public Function DIN_KW(DasDatum As Date) As Byte
'Quelle: https://www.online-excel.de/excel/singsel_vba.php?f=48
 Dim KW As Date
 KW = 4 + DasDatum - Weekday(DasDatum, 2)
 DIN_KW = (KW - DateSerial(Year(KW), 1, -6)) \ 7
End Function

Die letzte Zeile des Codes lautet End Function, wenn die nicht dabei ist, dann lief was beim kopieren schief!

Grüße, Ulrich
Ich freue mich über jede Art von Feedback
Die Forensoftware sendet mir aktuell keine Benachrichtigungen mehr zu, daher kann es gut sein, dass ich deine Antwort auf meinen Post nicht mitbekomme.
losgehts
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4498
Registriert: 03. Okt 2006, 14:08

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon snb » 13. Aug 2018, 09:13

Keep it simple

Für KW in VBA ohne Excel, schau mal: http://www.snb-vba.eu/VBA_ISO_weeknummer_en.html
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
snb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6064
Registriert: 25. Sep 2014, 16:37

Re: Mit VBA die heutige Kalenderwoche finden

Beitragvon hddiesel » 13. Aug 2018, 09:21

Hallo mjberger,

VBA und Dateiendung .xlsx geht nicht, wenn mit VBA, dann mit Dateiendung .xlsm
Mit freundlichen Grüssen
Karl

BS: Windows 10_64-Bit, MS Office Professional Plus 2016_32-Bit
Benutzeravatar
hddiesel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3443
Registriert: 17. Feb 2006, 11:40
Wohnort: Deutschland


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Hajo_Zi, Klaus-Dieter, lupo1 und 21 Gäste