VBA: Berechnung Monatsname

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: VBA: Berechnung Monatsname
von: Kai
Geschrieben am: 06.05.2015 16:21:49

Hi,
ich habe mir eine Übersicht zusammen gestellt.
Übersicht

 ABCDE
1    Abrechnung
2    Jahr
3    2015
4    Monat
5    10.Oktober


Per Makro Button kann ich die Werte ändern.

Sub Jahr_UP()
 Range("E3").Value = Range("E3").Value + 1
End Sub
Sub Jahr_DOWN()
 Range("E3").Value = Range("E3").Value - 1
End Sub
Sub Monat_UP()
 If Range("E5") = "01.Januar" Then
  Range("E5").Value = "02.Februar"
 ElseIf Range("E5") = "02.Februar" Then
  Range("E5") = "03.März"
 ElseIf Range("E5") = "03.März" Then
  Range("E5") = "04.April"
 ElseIf Range("E5") = "04.April" Then
  Range("E5") = "05.Mai"
 ElseIf Range("E5") = "05.Mai" Then
  Range("E5") = "06.Juni"
 ElseIf Range("E5") = "06.Juni" Then
  Range("E5") = "07.Juli"
 ElseIf Range("E5") = "07.Juli" Then
  Range("E5") = "08.August"
 ElseIf Range("E5") = "08.August" Then
  Range("E5") = "09.September"
 ElseIf Range("E5") = "09.September" Then
  Range("E5") = "10.Oktober"
 ElseIf Range("E5") = "10.Oktober" Then
  Range("E5") = "11.November"
 ElseIf Range("E5") = "11.November" Then
  Range("E5") = "12.Dezember"
 ElseIf Range("E5") = "12.Dezember" Then
  Range("E5") = "01.Januar"
 Else
  Range("E5") = "01.Januar"
 End If
End Sub
Sub Monat_DOWN()
 If Range("E5") = "12.Dezember" Then
  Range("E5").Value = "11.November"
 ElseIf Range("E5") = "11.November" Then
  Range("E5").Value = "10.Oktober"
 ElseIf Range("E5") = "10.Oktober" Then
  Range("E5").Value = "09.September"
 ElseIf Range("E5") = "09.September" Then
  Range("E5").Value = "08.August"
 ElseIf Range("E5") = "08.August" Then
  Range("E5").Value = "07.Juli"
 ElseIf Range("E5") = "07.Juli" Then
  Range("E5").Value = "06.Juni"
 ElseIf Range("E5") = "06.Juni" Then
  Range("E5").Value = "05.Mai"
 ElseIf Range("E5") = "05.Mai" Then
  Range("E5").Value = "04.April"
 ElseIf Range("E5") = "04.April" Then
  Range("E5").Value = "03.März"
 ElseIf Range("E5") = "03.März" Then
  Range("E5").Value = "02.Februar"
 ElseIf Range("E5") = "02.Februar" Then
  Range("E5").Value = "01.Januar"
 ElseIf Range("E5") = "01.Januar" Then
  Range("E5").Value = "12.Dezember"
 Else
  Range("E5").Value = "01.Januar"
 End If
End Sub

Und übder ein Link öffne ich die Arbeitsmappe.

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
On Error GoTo Fehler
 Dim appExcel As Excel.Application
 Set appExcel = CreateObject("Excel.Application")
  With appExcel
  .Visible = True
    If Target.Parent.Address = "$E$5" Then
      On Error GoTo Fehler
      If Range("$E$5") = "01.Januar" Then
        Datei = "H:\" & Range("$E$3").Text & "\01_Januar_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "02.Februar" Then
        Datei = "H:\" & Range("$E$3").Text & "\02_Februar_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "03.März" Then
        Datei = "H:\" & Range("$E$3").Text & "\03_März_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "04.April" Then
        Datei = "H:\" & Range("$E$3").Text & "\04_April_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "05.Mai" Then
        Datei = "H:\" & Range("$E$3").Text & "\05_Mai_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "06.Juni" Then
        Datei = "H:\" & Range("$E$3").Text & "\06_Juni_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "07.Juli" Then
        Datei = "H:\" & Range("$E$3").Text & "\07_Juli_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "08.August" Then
        Datei = "H:\" & Range("$E$3").Text & "\08_August_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "09.September" Then
        Datei = "H:\" & Range("$E$3").Text & "\09_September_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "10.Oktober" Then
        Datei = "H:\" & Range("$E$3").Text & "\10_Oktober_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      ElseIf Range("$E$5") = "11.November" Then
        Datei = "H:\" & Range("$E$3").Text & "\11_November_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "passowrd", , True
      ElseIf Range("$E$5") = "12.Dezember" Then
        Datei = "H:\" & Range("$E$3").Text & "\12_Dezember_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
      End If
    End If
  End With
Exit Sub
Fehler:
    MsgBox "Die Datei konnte nicht gefunden werden!", vbCritical, ""
End Sub

Könnte man das auch Vereinfachen?
Danke schon im Voraus.
LG Kai

Bild

Betrifft: Ja.
von: Michael
Geschrieben am: 06.05.2015 16:44:36
Hallo Kai,
aber nicht ohne Datei, weil ich mir dann einige Mühe sparen kann.
Vorab nur soviel: ich würde mir irgendwo "rechts" ein paar Hilfszellen mit Tag/Monat/Jahr anbringen, aus denen Du dir die angezeigten Angaben zusammenstöpselst. Da kannst Du in Deinem Makro direkt hochzählen und sparst Dir jede Menge elseifs (die Du übrigens auch durch select case ersetzen könntest, das schreibt sich übersichtlicher).
Anstelle der ganzen Reihe von


If Range("$E$5") = "01.Januar" Then
        Datei = "H:\" & Range("$E$3").Text & "\01_Januar_" & Range("$E$3").Text & ".xls"
        .Workbooks.Open Datei, , , , "password", , True
kannst Du den String mit replace direkt generieren. Codeschnipsel zum Testen anbei:

Sub test()
Dim monat As String, jahr As String
monat = Replace(Range("E5"), ".", "_")
jahr = Range("E3").Text
Datei = "H:\" & jahr & "\" & monat & "_" & jahr & ".xls"
MsgBox Datei
End Sub

Das funktioniert in einem Rutsch mit *allen* Monaten und sieht mit den zwei Variablen monat und jahr schon mal deutlich übersichtlicher aus.
Schöne Grüße,
Michael

Bild

Betrifft: Rest
von: Michael
Geschrieben am: 06.05.2015 17:35:07
Hallo Kai,
hier nun doch der Rest...
In H4 schreibst Du die Nr. des Monats, und in E4 die Formel: =DATUM(E3;H4;H4) und formatierst sie "benutzerdefiniert" mit TT.MMMM (das gibt es schon fertig, Du mußt nur das Leerzeichen nach dem "." entfernen).
Dann laufen die nachfolgenden Makros:


Sub Monat_UP()
  Range("h4") = Range("h4") Mod 12 + 1
End Sub
Sub Monat_Down()
  If Range("h4") = 1 Then
      Range("h4") = 12
    Else
      Range("h4") = Range("h4") - 1
  End If
End Sub
Du mußt nur im Code vom vorhergehenden Post auch bei E5 den angezeigten "Text" auslesen, also die Zeile komplett:
monat = Replace(Range("E5").Text, ".", "_")
Das sollte es im Wesentlichen gewesen sein, oder?
Schöne Grüße,
Michael

 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA: Berechnung Monatsname"