1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Excel Datum aus KW & Feldfarbe verändern durch Zahleneingabe

Discussion in 'Office-Programme' started by d4chillin, Jun 5, 2008.

Thread Status:
Not open for further replies.
  1. Hascheff

    Hascheff Moderator

    Halo Urs2,
    die Funktion reift langsam.
    Idiotensicher werden wir die Funktion nicht hinbekommen. Aber überflüssige Leerzeichen lassen sich entfernen.
    Code:
    ...
        Else
            WT_Wort = Trim(WT_Wort)
            Select Case WT_Wort
    ...
    
    :grübel: Habe ich die Liste erstellt oder wurde die bereits bei der Installation angelegt?

    In der Regel wid die Funktion auf eine ganze Spalte angewendet werden, die Worte werden, wenn nicht aus einer Liste, dann durch Kopieren erzeugt, Schreibfehler werden dann sicher entdeckt.

    Edit: @ Beverly: Ich habe deinen Beitrag jetzt erst entdeckt. Bis bald.
     
  2. Hascheff

    Hascheff Moderator

    Das wäre reine Kosmetik, man könnte die Select Case-Konstruktion ersetzen. Die halte ich nicht für besonders elegant.
    Ein über die Kosmetik hinausgehender Effekt wäre die Möglichkeit der Anwendung auf andere Listen, aber ich sehe da jetzt keinen Nutzen.

    BTW: Ich vergaß:
    Ich habe das Programmieren zu Zeiten gelernt, als es (in Hochsprachen) kein Exit gab. Ich halte Exit für schlechten Programmierstil. Bis jetzt bin ich noch immer ohne Exit ausgekommen.

    Hast recht, eine Fehlermeldung ist nicht unbedingt nötig.
     
  3. Beverly

    Beverly Halbes Megabyte

    Hi Hascheff,

    ich habe inzwischen noch ein wenig recherchiert und getestet bezüglich der benutzerdefinierten Listen: einige sind schon voreingestellt (Mo, Di, usw. und Montag, Dienstag, usw.). Man könnte sie auf diesem Weg benutzen

    Code:
    Function WOCHENTAG2ZAHL(WT_Wort As Variant) As Variant
        Dim listArray1
        Dim listArray2
        listArray1 = Application.GetCustomListContents(5)
        listArray2 = Application.GetCustomListContents(6)
        Application.Volatile
        If IsEmpty(WT_Wort) Or IsNumeric(WT_Wort) Then
            If WT_Wort > 0 And WT_Wort < 8 Then
                WOCHENTAG2ZAHL = Weekday(WT_Wort)
            Else
                WOCHENTAG2ZAHL = ""
            End If
        Else
            Select Case WT_Wort
                Case listArray1(1), listArray2(1):  WOCHENTAG2ZAHL = 1
                Case listArray1(2), listArray2(2):  WOCHENTAG2ZAHL = 2
                Case listArray1(3), listArray2(3):  WOCHENTAG2ZAHL = 3
                Case listArray1(4), listArray2(4):  WOCHENTAG2ZAHL = 4
                Case listArray1(5), listArray2(5):  WOCHENTAG2ZAHL = 5
                Case listArray1(6), listArray2(6):  WOCHENTAG2ZAHL = 6
                Case listArray1(7), listArray2(7):  WOCHENTAG2ZAHL = 7
                Case Else: WOCHENTAG2ZAHL = ""
            End Select
        End If
    End Function
    
    Allerding müsste man, damit der Code "allround" einsetzbar ist, die Sprachversion prüfen, und davon abhängig die Listennummer wählen. Ich habe im Code mal die deutsche Spracheinstellung vorausgesetzt. Ich weiß leider nicht, ob in den anderen Sprachen die 5 und die 6 die Liste der jeweiligen Spracheinstellung ist (ich habe nur die deutsche Version), was jedoch sehr wahrscheinlich ist. Die 1 und 2 ist die englische und ich nehme nicht an, dass sich daran in den anderen Sprachversionen etwas ändert.
     
  4. Urs2

    Urs2 Megabyte

    Es geht ja nur noch um des Kaisers Bart... aber interessanter als "Wo ist jetzt meine gelöschte Datei?"

    Klar, ich hatte mich aber an die letzte gültige Version von Hascheff gehalten...

    Auch klar, aber manchmal sind wir selbst die Idioten, wenn wir nach einem halben Jahr nicht mehr wissen...

    >> Installation durch das deutsche Office... und wenn Du Dein Werk nach China exportieren willst?

    In diesem Fall ginge aber End Function nicht, das End Select könnte dann nicht schliessen... und würde in Runtime meckern...

    Gruss Urs
     
  5. Beverly

    Beverly Halbes Megabyte

    Hi Urs,

    da du meine Beiträge ignorierst und die darin enthaltenen Lösungen und Vorschläge nur erneut mit anderen Worten aufwärmst, scheint es dir offensichtlich nicht darum zu gehen, hier ein Problem zu lösen, sondern nur mit Hascheff zu fachsimpeln. Bitteschön, ich habe nichts dagegen - aber ich habe auch nicht vor, meine Zeit unnütz zu vertun und ich ziehe mich hiermit aus der Diskussion zurück.
     
  6. Hascheff

    Hascheff Moderator

    @ Beverly, Urs:
    ich will jetzt nicht beurteilen, ob Beverlys Vorwürfe berechtigt sind. In solchen Sachen bin ich kein Blitzmerker.
    Ich musste ja vorhin auch aufpassen, dass ich Beverlys Beitrag #20 nicht übersehe.

    Aber ich bin ohnehin dafür, dass wir hier Schluss machen.
    Ich hab einiges gelernt, auch wieder in Beverlys letztem Code.

    Bei mir sind aber die Kurzbezeichnungen Liste 1 und die Langbezeichnungen Liste 2.
    Nun könnte man statt der Select Case-Konstruktion eine Do ... Loop until-Schleife bauen.
    Code:
            i = 0
            Do
                i = i + 1
                Loop Until i = 8 Or WT_Wort = listArray1(i) Or WT_Wort = listArray2(i)
            If i = 8 Then
                    WOCHENTAG2ZAHL = ""
                Else
                    WOCHENTAG2ZAHL = i
                End If
    
    Er führt aber zur Fehlermeldung #WERT im Fall i = 8 wegen listArray1(8), was aber nicht weiter schlimm ist.

    Genug der Spielerei, ich kehre wieder zum Code aus #20 zurück.
    Danke noch mal an Euch.
     
    Last edited: Jun 16, 2008
  7. Urs2

    Urs2 Megabyte

    Wenn Du damit das "deutsche Office" im Beitrag 24 meinst... ich hatte da Deinen #23 noch gar nicht gesehen...
    Manchmal geht man auch vom PC weg, zwischendurch...

    Der Grund, dass ich hier beigetreten bin, war nur der:
    Da war doch offensichtlich, dass hier nicht über das Gleiche geschrieben wurde - wie es halt manchmal passiert.

    Gruss Urs
     
  8. Beverly

    Beverly Halbes Megabyte

    Hi Hascheff,

    ich habe doch noch eine Möglichkeit gefunden, wie man einen Wert mit der Funktion übergeben kann:

    Code:
    Function kwdatum(KW, WT, Jahr, WTTyp As Variant, Optional Korrektur As Integer = 1)
        Application.Volatile
        If Not IsNumeric(Jahr) Then Jahr = Year(Now())
        kwdatum = DateValue("1.1." & Jahr) + 7 * (KW - Korrektur) - Weekday(DateValue("1.1." & Jahr), WTTyp) + WT
    End Function
    
     
  9. Hascheff

    Hascheff Moderator

    Danke, Beverly,
    diese Variante werde ich noch ausprobieren, aber heute fehlt mir dazu die Zeit.

    Eigentlich erreicht man mit dieser Syntax-Variante fast das gleiche wie auf die Art, mit der der Parameter Jahr behandelt wurde. Der einzige für mich sichtbare Unterschied ist, dass die Jahr-Variante nur mit dem Datentyp Variant funktioniert. Ob das bei dem universellen Typ wirklich eine Einschränkung ist?

    Meine Hoffnung, dass mit "Optional" in der Deklaration der Parameter auch im Funktions-Assistenten als optional dargestellt wird, erfüllte sich leider nicht. Also ist es ratsam, den Namen des Parameters irgendwie zu kennzeichnen. Ich bin dafür, dass optionale Parameter (, wie das woanders für Konstanten Konvention ist,) in Großbuchstaben geschrieben werden.
     
Thread Status:
Not open for further replies.

Share This Page