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 Gültigkeitsprüfung Datum

Discussion in 'Office-Programme' started by C2C4, Apr 13, 2009.

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

    Urs2 Megabyte

    Jetzt beginnt aber der Hund in der Pfanne schon zu brutzeln...

    - die XLSM v3 aus Beitrag #17 hatte ich ja zufälligerweise selbst schon als korrupt enttarnt

    - die XLS v4 (Excel2003) aus #18, die in meinem 2003 funktioniert, ohne Activ-X-Buttons, müsste doch eigentlich von Deinem 2007 konvertiert werden können....

    Dann wäre ja meine XLS auch korrupt, und nur bei mir lesbar.
    Und ich müsste sie wohl irgendwie rekonstruieren...



    HILFEEEEEE ! .... :wink:

    Könnte ein geneigter Mitleser versuchen, mit seinem Excel2007 meine XLS-2003 aus Beitrag #18 zu öffnen ?
    Und mitteilen was passiert ?
    Hier nochmals der Link dazu >>> http://www.file-upload.net/download-1594787/Haushaltsbuch2009pc-forum-v4-.xls.html

    Das wäre nett, ohne Excel2007 weiss ich zZ nicht mehr weiter....... Danke !

    Gruss Urs
     
  2. C2C4

    C2C4 Byte

    So ein mist, hatte doch alle Vorgänger-Versionen von Excel (auch 2003)

    Kann ich dann selbst etwas konvertieren etc. ?

    LG c2c4
     
  3. Urs2

    Urs2 Megabyte

    Und in Excel2003 kannst Du die meine XLS auch nicht öffnen?

    Ich habe mich umgeschaut >>> http://technet.microsoft.com/en-us/library/cc179050.aspx

    Excel2007 soll beim Import von sich aus, ohne Rückfragen (!), alle Makros, Active-X etc deaktivieren.
    Das soll gewollt sein, weil die User sonst einfaches alles abnicken würden...
    In einem "Trust-Center" (im engl. Excel) soll man dieses Verhalten verändern können...

    Inwieweit mein Kompatibilitäts-Tool dabei schon etwas verbrochen hatte, weiss ich nicht... möglich ist alles.
    Ich habe eben meine eigene XLS v4 von file-upload heruntergeladen > im 2003 funktioniert sie wie vorher! Was natürlich auch bedeuten könnte, dass nur ICH diese öffnen kann... ich hatte sie ja selbst aus Deiner XLSM konvertiert...
    ...dann müsstest Du vielleicht die XLSM selbst als XLS speichern, und mir geben... wer weiss schon...


    Noch ein Versuch, wenn es da nicht auch wieder einen Spezialhaken gibt... >

    Ich habe das Userform exportiert, zumindest in Excel2003 kann man das im VB-Editor mit Datei > Datei importieren in jede andere Datei importieren.
    Lege beide Dateien in den gleichen Ordner, entferne bei beiden die .TXT-Endung und dann importieren (es wird dort nur eine der beiden angeboten, die andere wird aber mitgeladen) in die XLSM, die hier im Forum ist.

    Das Userform selbst und der Code sind enthalten, aber >

    - Auf Blatt Eingabe einen benannten Bereich "Kostenart" erstellen, enthaltend den Text in den Zellen N1:N13 aber zuoberst, anstelle von "Hilfsspalte 1", eine leere Zelle.

    - DropDown in Zelle B4 entfernen

    - im VB-Editor zum Beispiel im Modul1 dieses Sub einfügen
    Code:
    Sub NeuEingabe()
                'ruft das Userform auf, mit allem Code
        Erfassen_frm.Show
    End Sub
    
    Dieses Sub starten... oder einen Button auf das Blatt, der es aufruft.
    ...und hoffen...

    Wenn in Betrieben aufs Mal zigtausend äusserst komplexe Dateien nicht mehr brauchbar sein könnten, verstehe ich deren Skepsis vor neuen Programm-Versionen.

    Gruss Urs
     

    Attached Files:

  4. Hascheff

    Hascheff Moderator

    In Excel 2000 gibt es kein Problem.
     
  5. Hascheff

    Hascheff Moderator

    Hallo,
    ich bin's noch mal.
    In Excel 2007 muss im Vertrauensstellungscenter unter "vertrauenswürdige Speicherorte" der Ordner hinzugefügt werden, in dem sich die Datei befindet.
    Auch in Excel 2003 konnte die Datei problemlos geöffnet werden. Hier habe ich mal auf "Neuen Datensatz erfassen" geklickt, die Maske erschien.

    Gruß
    Hascheff
     
  6. C2C4

    C2C4 Byte

    @Hascheff...

    Vielen Dank, werde das auch mal ausprobieren.

    @Urs...

    Auch das werde ich testen und dann (abends?) berichten.

    LG an Euch alle... c2c4
     
  7. C2C4

    C2C4 Byte

     
    Last edited: Apr 21, 2009
  8. Urs2

    Urs2 Megabyte

    @Hascheff
    Danke für die Unterstützung, sie hat wohl den Knoten durchtrennt...

    @C2C4
    Irgendwie werde ich den Verdacht nicht los, dass Du den Code noch gar nicht gesehen hattest >>>
    Im VB-Editor > Doppelclick auf "Erfassen_frm" > Doppelclick auf eine freie Stelle im so angezeigten UserForm

    Datum in der Zukunft >
    Irgendwann ist mir diese Prüfung in der Entwicklung abhanden gekommen..
    Ersetze das Sub ErrorEnter durch dieses hier >
    Code:
    Private Sub ErrorEnter()
                                    'prüft Eingaben
    Dim strFeld, strTag, strBetrBrr, strBetrMin, strBetrMax, strBetrCnt, strFutDate, errWarning
                                    
                                    'Fehlermeldungen
    strFeld = "  Ein Eingabe-Feld ist nicht ausgefüllt..."
    strTag = "  Tag ist nicht angegeben..."
    strBetrBrr = "  Betrag ist keine Zahl..."
    strBetrMax = "  Betrag ist zu gross..."
    strBetrMin = "  Betrag ist zu klein..."
    strBetrCnt = "  Betrag enthält Zehntel-Cent"
    strFutDate = "  Datum liegt in der Zukunft..."
    
    
                                            'prüfen
        If xArt = "" Or xBez = "" Or xBetrag = "" Then
            errWarning = strFeld
            GoTo errWarn
        ElseIf Calendar1.Day = 0 Then
            errWarning = strTag
            GoTo errWarn
        ElseIf IsNumeric(xBetrag) = False Then
            errWarning = strBetrBrr
            GoTo errWarn
        ElseIf xBetrag < minBetrag Then
            errWarning = strBetrMin
            GoTo errWarn
        ElseIf xBetrag > maxBetrag Then
            errWarning = strBetrMax
            GoTo errWarn
        ElseIf Int(xBetrag * 100) <> xBetrag * 100 Then
            errWarning = strBetrCnt
            GoTo errWarn
        ElseIf xBetrag > limBetrag Then
            If limBetr = False Then
                limBetr = True
                GoTo errWarn
            Else
                limBetr = False
            End If
        ElseIf xDate > Date Then
            errWarning = strFutDate
            GoTo errWarn
        End If
            
        If errNum = False Then Exit Sub                 'wenn kein Eingabe-Fehler > hier Ausstieg
    
    errWarn:                                            'zeigt Fehler und beendet
    lblError.BackColor = RGB(255, 255, 0)
    If limBetr = False Then
        lblError = vbCr & ">>> Fehler !!" & vbCr & vbCr & errWarning & _
                   vbCr & vbCr & "  ...eingeben und neu speichern!"
                                                        'wenn Limite für Bestätigumg überschritten
    Else
        lblError = vbCr & ">>> Achtung !!" & vbCr & vbCr & _
                "  Betrag übersteigt Limite" & vbCr & "  Ist er bestätigt ?" & vbCr & vbCr & _
                "  ...Aendern oder so Speichern !"
    End If
                   
    errNum = True
          
    End Sub
    
    
    Beschreibungsfeld als Kann-Feld >
    Habe ich im obigen Sub berücksichtigt

    Limiten verändern
    Die musst natürlich DU setzen, ich kann das nicht wissen...
    Im Sub UserForm_Initialize, zuoberst bei Vorgaben für Gültigkeit, sind die ersten vier Werte anzupassen.

    Bar als Vorgabe beim öffnen
    Im Sub UserForm_Initialize, gleich darunter, ersetze die Zeile >
    optKonto = True
    durch diese hier >
    optBar = true

    Das PS verstehe ich nicht recht, wo und wann genau genau passiert das?
    Zahlen müssen natürlich immer Zahlen sein...
    Ich verwende allerdings die Windows-Vorgabe (deutsch/Schweiz), dort ist der Dezimaltrenner der Punkt, und nicht das Komma wie bei (deutsch/Deutschland)
    Wenn ich weis wo das passiert, kann ich meinen Code überprüfen

    Gruss Urs
     
  9. Hascheff

    Hascheff Moderator

    Ich glaube, das Thema hatten wir vor einigen Monaten schon mal.
    In Deutschland ist zwar das Komma der Dezimaltrenner, aber im VBA-Code hat Microsoft die englische Version belassen.
     
  10. Urs2

    Urs2 Megabyte

    Korrekturen - zus&#228;tzlich zu denen in #28...

    im Sub cbnOK_click() .... ganz unten >
    ...die Zeile
    optKonto = True
    ...muss sein
    optBar = True

    im Sub ErrorEnter()
    ...die Zeile
    If xArt = "" Or xBez = "" Or xBetrag = "" Then
    ...muss sein
    If xArt = "" Then


    Wieder etwas neues mit Komma und Punkt >

    Bei mir mit Standards/Formate und Eingabegebietsschema Deutsch/Schweiz wird das Dezimalzeichen im Zahlenblock eingetippt (neben der Null) immer als Punkt geschrieben.

    Wenn ich beides auf Deutsch/Deutschland &#228;ndere, wird das Dezimalzeichen in der Excel-Zelle als Komma, im Userform aber als Punkt ausgegeben.
    Seltsam! Ist das bei Euch auch so?


    Wenn ich, mit Deutschland-Einstellungen den Betrag im Zahlenblock tippe wird daraus folgerichtig (mit dem Punkt) ein String und die weitere Tabellenkalkulation funktioniert nicht mehr.
    Wenn ich aber f&#252;r 123,45 das Satzzeichen-Komma bei den Buchstaben nehme, wird alles richtig berechnet.
    Sehr seltsam, verstehe ich nicht. Oder ist das etwa normal?

    Gruss Urs


    @Hascheff ... eben gesehen...
    Das ist ja ein sch&#246;ner Mist... der mit meinen Einstellungen einfach keine Auswirkung hat...
    Ja dann halt, nehmen oder lassen...
    Danke
     
    Last edited: Apr 22, 2009
  11. Urs2

    Urs2 Megabyte

    So, bin wieder da..... wir haben ja erst 30 Beiträge...

    Ich habe den blöden Punkt abgefangen.
    Du kannst jetzt im Zahlenblock den Betrag mit dem dortigen Dezimaltrenner eintippen. Angezeigt im Form wird Dir zwar ein Punkt (123.45), gerechnet wird dann aber mit einem Komma (123,45).

    Bei meinem umgeschalteten System klappt es, aber teste gut mit einem echten Deutschland-System.

    Den Ueberblick über die Aenderungen habe ich jetzt auch schon verloren... hier ist der komplette, nachgeführte Code.
    Er ersetzt alles was bis jetzt hinter dem UserForm steht.
    Kopiere ihn dorthin.

    Code:
    Option Explicit
    
    Dim errNum As Boolean, xDate As Date, xArt As String, xBez As String, xBetrag As Variant, _
        limBetr As Boolean, cYear As Integer, minBetrag As Double, maxBetrag As Double, _
        limBetrag As Double, xMwst, xPrivat, xKonto, xFremd
    
    
    Private Sub UserForm_Click()
        'nur hier als Platzhalter > Click auf Form setzt Focus hierher im Code > keine Funktion
    End Sub
    
    
    Sub UserForm_Initialize()
                                            'startet Form
    Dim rngKostenart As Range
    
                            'Vorgaben für die Gültigkeit der Eingaben
    cYear = 2009            'gewünschtes Jahr
    minBetrag = 0.2         'minimal nötiger Betrag
    maxBetrag = 10000       'maximal erlaubter Betrag
    limBetrag = 100         'Limit für Rückfrage
    
                            'Default beim Start für OptionsButtons
    optMwst19 = True
    optGesch = True
    optBar = True
    optFremdNo = True
    
    limBetr = False         'setzt Rückfrage-Option auf false
    
                                            'verhindert Flackern des Bildschirms
        Application.ScreenUpdating = False
        
        If Year(Date) = cYear Then
            Calendar1 = Date - 1            'setzt Defaultdatum auf Heute -1 = gestern
        Else
                                            'wenn "Heute" schon im Januar nächstes Jahr, dann
            Calendar1 = "31.12." & cYear    'Default Datum = 31.Dez letztes Jahr
        End If
        Calendar1.DayFont.Bold = True
        With Calendar1.GridFont             'verbessert Aussehen des Kalenders
            .Bold = True
            .Size = 11
        End With
                                            
                                            'füllt die ComboBox
        Sheets("Eingabe").Activate          '= Blatt, das die Liste enthält
    Set rngKostenart = Application.Names("Kostenart").RefersToRange
        With Me.cboKostenart
            .Clear
            .ColumnCount = 1
            .RowSource = rngKostenart.Address
                            'zeigt als Default "" > es braucht einen Eintrag!
            .ListIndex = 0
        End With
    
    
                             'zurücksetzen
    Set rngKostenart = Nothing
    
    End Sub
    
    Private Sub cbnCancel_Click()
                                    'beendet das Form
        Unload Erfassen_frm
        Worksheets("Eingabe").Activate         '= Blatt wo der Button ist
        Application.ScreenUpdating = True
            
    End Sub
    
    Private Sub UserForm_QueryClose(Cancel As Integer, closemode As Integer)
                                    'wenn Form mit "Kreuz" geschlossen
        If closemode <> 1 Then cbnCancel_Click
        
    End Sub
    
    Private Sub Calendar1_Click()
                                    'setzt geänderte Jahreszahl zurück auf vorgegebenes Jahr
        Calendar1.Year = cYear
        
    End Sub
    
    Private Sub optPrivat_Click()
    'nur Idee > wenn Ausgabe privat, keine Vorsteuerverrechnung, MwSt also zwingend 0%
    'setzt MwSt auf 0% und deaktiviert OptionButtons für MwSt
    'wenn meine Idee falsch > diese beiden Subs einfach löschen
    
    optMwst0 = True
    fraMwst.Enabled = False
    
    End Sub
    
    Private Sub optGesch_Click()
    'siehe oben
    fraMwst.Enabled = True
    optMwst19 = True
    
    End Sub
    
    Private Sub cbnOK_click()
    
    errNum = False                                      'Fehlermeldung zurücksetzen
        lblError.BackColor = &H8000000F                 'setzt Farben und Text zurück
        lblError = ""
                                                        'liest Eingaben
    xDate = Calendar1
    xArt = cboKostenart
    xBez = tbxBez
    xBetrag = tbxBetrag
    If optMwst0 = True Then
        xMwst = 0
    ElseIf optMwst7 = True Then
        xMwst = 7
    Else: xMwst = 19
    End If
    If optGesch = True Then xPrivat = "geschäftlich" Else xPrivat = "privat"
    If optKonto = True Then xKonto = "Konto" Else xKonto = "bar"
    If optFremdNo = True Then xFremd = "ja" Else xFremd = "nein"
    
    
        ErrorEnter                                      'prüft Eingaben...
        If errNum = True Then Exit Sub                  '...wenn dort Fehler > fertig
                                                        'sonst...
        FillCells                                       'füllt Zellen in Blatt Eingabe
        
        Datenübergabe1                                  'führt Sub Datenübergabe1 aus
        
        
                            'wenn fertig, löscht Eingaben im Form, für neue Erfassung
    
    If Year(Date) = cYear Then          'wenn Datum bleiben soll, dieses If/Else/EndIf entfernen
        Calendar1 = Date - 1            'setzt Defaultdatum auf Heute -1 = gestern
    Else
                                        'wenn "Heute" schon im Januar nächstes Jahr, dann
        Calendar1 = "31.12." & cYear    'Default Datum = 31.Dez letztes Jahr
    End If
    
    cboKostenart.Value = ""
    tbxBez.Value = ""
    tbxBetrag.Value = ""
                    'ob OptButtons auch zurückgesetzt werden sollen, weiss ich nicht
                    'wenn nicht, einfach folgende Zeilen auskommentieren
    optMwst19 = True
    optGesch = True
    optBar = True
    optFremdNo = True
        
    End Sub
    
    Private Sub FillCells()
                            'fügt Daten in Blatt Eingabe ein
        Sheets("Eingabe").Activate
        With ActiveSheet
            .Unprotect
            .Cells(3, 2) = xDate
            .Cells(4, 2) = xArt
            .Cells(5, 2) = xBetrag
            .Cells(6, 2) = xBez
            .Cells(7, 2) = xMwst
            .Cells(8, 2) = xPrivat
            .Cells(9, 2) = xKonto
            .Cells(10, 2) = xFremd
            .Protect
        End With
    
    End Sub
    
    
    Private Sub ErrorEnter()
                                    'prüft Eingaben
    Dim strFeld, strTag, strBetrBrr, strBetrMin, strBetrMax, strBetrCnt, strFutDate, errWarning
                                    
                                    'Fehlermeldungen
    strFeld = "  Ein Eingabe-Feld ist nicht ausgefüllt..."
    strTag = "  Tag ist nicht angegeben..."
    strBetrBrr = "  Betrag ist keine Zahl..."
    strBetrMax = "  Betrag ist zu gross..."
    strBetrMin = "  Betrag ist zu klein..."
    strBetrCnt = "  Betrag enthält Zehntel-Cent..." & vbCr & _
                 "  ...oder zuviele Dezimalzeichen"
    strFutDate = "  Datum liegt in der Zukunft..."
            
                                    'wenn Dezimalzeichen als Punkt ab Zahlentastatur
                                    'ersetzt EINEN Punkt durch Komma
                                    'wenn mehrere Punkte > später Fehlermeldung
        If Len(xBetrag) > 0 Then
            xBetrag = Replace(xBetrag, ".", ",", , 1)
        End If
    
                                            'prüfen
        If xArt = "" Then
            errWarning = strFeld
            GoTo errWarn
        ElseIf Calendar1.Day = 0 Then
            errWarning = strTag
            GoTo errWarn
        ElseIf IsNumeric(xBetrag) = False Then
            errWarning = strBetrBrr
            GoTo errWarn
        ElseIf xBetrag < minBetrag Then
            errWarning = strBetrMin
            GoTo errWarn
        ElseIf xBetrag > maxBetrag Then
            errWarning = strBetrMax
            GoTo errWarn
        ElseIf Int(xBetrag * 100) <> xBetrag * 100 Then
            errWarning = strBetrCnt
            GoTo errWarn
        ElseIf xDate > Date Then
            errWarning = strFutDate
            GoTo errWarn
        End If
                                                        
        If xBetrag > limBetrag Then                     'prüft RückfrageLimite
            If limBetr = False Then
                limBetr = True
                GoTo errWarn
            Else
                limBetr = False
            End If
        End If
        
        xBetrag = CDbl(xBetrag)                         'wandelt String in Zahl
            
        If errNum = False Then Exit Sub                 'wenn kein Eingabe-Fehler > hier Ausstieg
    
    errWarn:                                            'zeigt Fehler und beendet
    lblError.BackColor = RGB(255, 255, 0)
    If limBetr = False Then
        lblError = vbCr & ">>> Fehler !!" & vbCr & vbCr & errWarning & _
                   vbCr & vbCr & "  ...eingeben und neu speichern!"
                                                        'wenn Limite für Bestätigumg überschritten
    Else
        lblError = vbCr & ">>> Achtung !!" & vbCr & vbCr & _
                "  Betrag übersteigt Limite" & vbCr & "  Ist er bestätigt ?" & vbCr & vbCr & _
                "  ...Aendern oder so Speichern !"
    End If
                   
    errNum = True
          
    End Sub
    
    
    Gruss Urs
     
  12. Hascheff

    Hascheff Moderator

    Wirklich seltsam! Bei mir wird auf dem Nummernblock immer ein Komma ausgegeben, unabhängig davon, ob ich in der Maske oder sonst wo bin.
    (Dass die Taste umbelegt werden kann, ist ja jetzt nicht das Thema. Die PC-Welt hatte da mal ein kleines Tool auf CD.)
    Und im alten Code führte das Komma zum Fehler und nicht der Punkt.
    Die Windows-Einstellungen können länderspezifisch angepasst werden, das ist klar und ich rechne da auch nicht mit Unterschieden von Rechner zu Rechner. Wenn sich dein und mein Rechner in Deutsch/Deutschland unterschiedlich verhalten, sehe ich dafür drei mögliche Ursachen:
    - Excel hat eine (unsichtbare) länderspezifische Setup-Variation.
    - Deine Tastatur ist intelligenter als meine.
    - Du warst heute Nacht zu müde.

    Stimmt, ich hab's probiert.

    Wieder was dazugelernt.

    Gruß Hascheff
     
  13. Urs2

    Urs2 Megabyte

    Richtig !
    Das Tool wäre auch im Betrieb sichtbar... wenn man wüsste, dass es existiert.
    Ich habe es jetzt gefunden (dort wo man nie vorbei kommt) > "Microsoft Office 2003 Spracheinstellungen"

    Das DE-Windows-Komma funktioniert in Excel, aber nicht bei der Eingabe im Userform.
    Erst mit der DE-Einstellung in diesem Tool wird es auch im Userform zum Komma.

    Wenn meine XLS auf Deinem PC normal anzeigt, könnte natürlich sein, dass beim TO in diesem Tool nicht Deutsch-DE eingetragen ist. Da er noch nie ein Userform benutzt hatte, muss das gar nicht weiter aufgefallen sein >>> Prüfen !

    Warten wir ab, was die Tests in Berlin ergeben...

    Gruss Urs
     
  14. C2C4

    C2C4 Byte

    Hiiillffeeee :)

    bin nach #29 kurzfristig ausgestiegen und wollte gerade darauf antworten.
    Nun sehe ich aber, dass ihr wieder sehr flei&#223;ig gewesen seid.

    @Urs2: Erstmal ein Kompliment, wie du die einzelnen Schritte beschreibst, denn ich konnte so Schgritt f&#252;r Schritt alles nachvollziehen.

    Nun muss ich genau lesen und acht geben, wo ich noch weitere &#196;nderungen vornehmen muss.

    Ich schaffe es aber erst zu Donnerstag nachts bzw. Freitag.

    Danke an @Hascheff, f&#252;r deine Mithilfe.

    Ich teste in Berlin und schreibe dann, wie die PCs hier anders laufen :)

    bis bald... c2c4
     
  15. Urs2

    Urs2 Megabyte

    ...vielleicht h&#228;ngt das ja auch weniger mit dem PC zusammen, und daf&#252;r mehr mit der Zeit.

    Wir sollen ja ber&#252;hmt sein f&#252;r genaue Zeit. Bei Euch in der N&#228;he (Google = 185 km), im Landkreis Glash&#252;tte... ( = S&#228;chsische Schweiz), machen die aber auch ganz sch&#246;ne, teure und genaue "Zeit".

    Gruss Urs
     
    Last edited: Apr 23, 2009
  16. C2C4

    C2C4 Byte

    So, da bin ich wieder. Sry, ist nun doch Samstag geworden.

    Habe nunmehr eine 5. Version erstellt und den Code kopiert. Dann war ich mal gespannt auf meine Tastatur usw. :)

    Meine "Uhr" geht auch RICHTIG :)

    Nun ist doch nach vielem Testen kein Fehler bislang aufgetreten - ach bin ich froh und dankbar.

    Ist es denn m&#246;glich - jetzt will er aber &#252;bertreiben :ironie: - dass man gar keinen Punkt setzen kann?

    Bei mir macht der Punkt ansonsten ein Komma (was ja auch nicht schlecht ist).
    In Excel2007 (deutsch-deutsch) ist der Punkt jedoch ein Tausender-Trennzeichen.

    @Urs2: Du hattest Recht, als du geschrieben hattest, dass du vermutest, dass ich den Code noch gar nicht gesehen hatte. Ich hatte dies jedoch = nachgeholt und festgestellt, dass ich da ja einiges anpassen kann. Vielen Dank daf&#252;r.

    Nun ist doch mein kleines Haushaltsbuch zu einer richtigen Datei geworden - und obwohl ich alleine nur an dieser Datei arbeite, freue ich mich umso mehr, dass ihr da so geholfen habt!

    Vll k&#246;nnt ihr ja meine kleine Datei trotzdem "gebrauchen".

    Euch ein sch&#246;nes WE mit viel Sonne, LG aus Berlin (wo die Uhren wie andere ticken)

    c2c4

    P.S.: So ein Mist, beim weiteren Testen habe ich gemerkt, dass die Daten zur "Datenbank" nicht mehr aufsteigend sortiert werden und dass der Blattschutz nicht mehr aktiv ist. Liegt das jetzt an meinem Makro??
     
    Last edited: Apr 25, 2009
  17. Urs2

    Urs2 Megabyte

    ...von mir aus gesehen, w&#228;re das ja auch der Sinn einer Hilfe.
    Leute, die noch nie ein Makro gesehen hatten, sind gl&#252;cklich &#252;ber einen nur zu kopierenden Code... solange er das tut, was sie wollten. Die Syntax interessiert sie logischerweise nicht.
    Bei Dir ist das nat&#252;rlich anders...


    Klares Nein, weder in VBA.Forms, noch in Excel selbst ist das m&#246;glich.
    Formatiere eine Zelle in Excel als Datum > tippe "25,4.09" > das wird akzeptiert, aber nicht als Datum, sondern als Text.
    Sehen kannst Du das nur (bei Default-Ausrichtung) daran, dass das Datum rechtsb&#252;ndig und der Text linksb&#252;ndig ist.
    Sp&#252;ren wirst Du es, wenn Du mit diesem "Datum" weiter arbeiten willst >>> #WERT!

    VBA kann die Eingabe abfangen und pr&#252;fen...


    Da ich jetzt auch die MS-Office-L&#228;nder-Einstellung kenne, dank Hascheff, werde ich heute Nacht das Makro noch einmal mit DE-Einstellung pr&#252;fen. Irgendwie habe ich das Gef&#252;hl, da w&#252;rden Zahlen nicht als Zahlenwert, sondern als Text-String verglichen...

    Ich werde mich melden...

    Gruss Urs


    Sehe noch das PS >
    Mit Sortieren oder Blattschutz hat mein VBA nichts zu tun (im Blatt "Eingabe" hebt es den Schutz auf, zum Schreiben, und setzt ihn dann wieder).
    Sonst macht das Makro, &#252;berhaupt nichts, weder an Deinen Makros, noch an Deinen Einstellungen in den Bl&#228;ttern.
    Das Makro &#252;bergibt nur an "Daten&#252;bertragung1" >>> und fertig!
     
    Last edited: Apr 25, 2009
  18. Hascheff

    Hascheff Moderator

    Ich habe die Datei schon meinen Schülern gezeigt. Sie ist ein gutes Beispiel, was man so Schritt für Schritt in Excel aufbauen kann.
     
  19. Urs2

    Urs2 Megabyte

    @Hascheff - Da fühle ich mich ja direkt geehrt...
    ...hoffentlich war nicht zu viel CH-Dialekt in den Kommentaren... von wegen Auslachen...

    Ich habe jetzt nochmals mit DE-Einstellungen geprüft, VBA passt sich tatsächlich nicht ganz an, aber wie genau, bleibt für mich noch mysteriös. Das Umstellen ist etwas mühsam, ich kann dann meine eigenen XLS nicht als Beispiel laufen lassen, und die Zeichen auf der Buchstabentastatur finde ich auch nicht...

    @C2C4 - Hier meine Erkenntnisse

    Im Code selbst muss der Dezimalpunkt verwendet werden.
    Ganz oben im Sub Userform_Initialize steht "minBetrag = 0.2". Wenn dort 0,2 getippt wird, kommt ein Fehler.
    Das wird nicht als Zahl erkannt, und für einen String fehlen die Anführungszeichen.
    Zur Laufzeit, im Schrittmodus, wird dann 0.2 allerdings als 0,2 Double angezeigt...

    Der eingegebene Betrag mit Komma wird als Variant/String behandelt, in den Formeln mit < oder > jedoch richtig als Zahl geprüft (und nicht als Zeichenfolge, wie ich befürchtete).

    Mit dem Rechnen klappte es aber nicht recht.
    Mit dem eingegebenen Betrag von 9.20 (= xBetrag) scheint er über die Multiplikation zu stolpern.
    Int(xBetrag * 100) soll laut VBA 919 sein ???
    100 * xBetrag soll <> 920 sein ???

    Ich verstehe diese Welt nicht...

    Wenn Du im echten DE-System auch solche Probleme haben solltest, kannst Du im Sub ErrorEnter die Zeile >
    ElseIf Int(xBetrag * 100) <> xBetrag * 100 Then
    ...durch diese ersetzen >
    ElseIf Round(xBetrag * 100) <> Round(xBetrag * 100, 2) Then

    Diese funktionierte bei mir richtig.

    Wenn ein Betrag mit Dezimalpunkt eingegeben werden sollte, wird er übrigens vom Code kommentarlos in eine Zahl mit Dezimalkomma gewandelt.

    Gruss Urs
     
  20. Hascheff

    Hascheff Moderator

    Das überrascht mich nicht - ich meine, dass Excel manchmal falsch rechnet. Alte Excel-Versionen hatten da weit größere Schwierigkeiten. In Excel 97 oder 95 war es noch so, dass die Summe aus 10 Zellen, die 0,1 enthielten dann 0,9999... war.
    Von Excel 2003 weiß ich, dass es zu Rechenfehlern bei einer Stückelung kommt. (Ein Geldbetrag soll in Münzen gestückelt werden.)
    In Excel 2000 als Demo hat es sofort geklappt: View attachment 13249
    Die Ursache ist die Umwandlung in Dualzahlen. Eigentlich ist eher erstaunlich, wie richtig Excel oft rechnet.

    Auf der sicheren Seite wäre man, wenn Geldbeträge als String so verarbeitet werden, dass man mit Cent als Ganzzahl rechnet.

    Gruß Hascheff
     
Thread Status:
Not open for further replies.

Share This Page