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

Datenerfassung in Excel 2003

Discussion in 'Office-Programme' started by Lametta 17, Jul 31, 2008.

Thread Status:
Not open for further replies.
  1. Lametta 17

    Lametta 17 Byte

    Hi,
    ich habe das Problem in Excel eine sichere Datenerfassung einzurichten.
    D.h. Das Datum muß gültig sein und darf nur aus dem laufenden Jahr sein und die Auswahlfelder basieren auf Listen mit Gültigkeit. Die Listen sind im Arbeitsblatt Listen definiert.
    Im Arbeitsblatt Endverbraucher_2008 wird zuerst das Datum eingetragen.
    Danach wird in Auswahlfeld1 die Liste für Auswahlfeld2 gewählt. In Auswahlfeld2 wird dann auch ein Listenpunkt ausgewählt.
    Und jetzt kommt die Schwierigkeit.

    Wenn nach der Auswahl in Auswahlfeld2 der Listeneintrag in Auswahlfeld1 wieder geändert wird, kriegt das Auswahlfeld2 davon nichts mit. Dieses sollte dann leer werden oder gelb.

    Die Variante die Daten über ein UserForm zu erfassen währe auch denkbar. natürlich mit der gleichen Funktionalität.

    Dank im vorraus
     

    Attached Files:

  2. Urs2

    Urs2 Megabyte

    Für mich würde ich ein Userform nehmen, da können alle möglichen Fehleingaben abgefangen werden.

    Die ZIP konnte ich nicht öffnen > invalid string... Wenn die XLS < 100KB ist, kannst Du sie unkomprimiert hier Einstellen, und zwar mit einem angehängten TXT, so > "DeineDatei.XLS.TXT"

    Im Prinzip:

    Das Datum kann mit zwei Dropdowns eingegeben werden, einer für den Monat und einer für den Tag. Das Jahr wird dann vom Code hinzugefügt.
    Oder man nimmt das Calendar.Control (im VB-Editor > Extras > Verweise...). Dann hat man einen richtigen Kalender mit den Wochentagen. Das Jahr könnte man dort zwar auch ändern, aber über das Click-Ereignis kann es dann gleich wieder zurückgesetzt werden...

    Die Auswahl mit 2 Dropdowns >
    Zuerst ist nur der Erste aktiviert. Nach Eingabe wird der Zweite gefüllt und aktiviert... und der Erste deaktiviert.
    Oder bei späterer Aenderung des Ersten, wird der Zweite zurückgesetzt...

    Gruss Urs
     
  3. Lametta 17

    Lametta 17 Byte

    Hallo,

    vielen Dank für die schnelle Antwort.
    Ich habe die XLS nocheinmal hochgeladen.
     
  4. Lametta 17

    Lametta 17 Byte

    bitte die Rekla.txt in Rekla.xls umbenennen.
     

    Attached Files:

  5. Lametta 17

    Lametta 17 Byte

    Und noch einmal. (der Code war nicht enthalten)
    Bitte wieder aus txt mach xls

    Gruß

    Tamás
     

    Attached Files:

  6. Urs2

    Urs2 Megabyte

    Hi Tamás

    Ich habe etwas zusammengestellt...
    Alle Erklärungen sind in der Datei oder im Code.

    Eventuell musst Du im VB-Editor unter Extras > Verweise... das "Microsoft Calendar Control" such und aktivieren (falls Deine Excel-Version ein anderes Control verwenden sollte als meine Version2003).

    Die angehängte Datei ist eine echte XLS, nur das .txt entfernen.
    Teste und nimm daraus was Du brauchen kannst...

    Gruss Urs

    PS: Jetzt schreibe ich den Mist zum vierten Mal... das Forum hat heute Zerstörungswut...
     

    Attached Files:

  7. Lametta 17

    Lametta 17 Byte

    Hallo Urs,
    erst einmal vielen Dank für die freundliche Unterstützung.
    Ich habe mir Deinen Vorschlag angeschaut und ein bisschen auf unsere Bedürfnisse angepasst.
    Ich habe noch ein paar offene Punkte.

    - Wie kann ich die "Schreibschutz"-Meldung beim Start unterdrücken?

    - Ich habe einen Scrollbar eingefügt, der mit die Datensätze anzeigen soll. Klappt leider nicht mit allen Feldern.
    Wenn ich dann Daten ändere werden diese auch nicht übernommen (z.B. Kalender)
    Sollte diese Art der Dateneingabe/Datenänderung funktionieren, würde ich gern die Tabellen sperren.

    - Die Felder ArtNr sollen nur Zahlen (immer 5stellig) enthalten dürfen. Bei der Eingabe prüfen

    - wie kann ich mit der eingegebenen ArtNr per ODBC in eine Datenbank hineinschauen und automatisch die Art Bezeichnung ausfüllen?

    Vielleicht kannst Du mir eine Adresse nennen. Ich würde mich gern Erkenntlich zeigen.

    Gruß

    Tamás
     
    Last edited: Aug 7, 2008
  8. Lametta 17

    Lametta 17 Byte

    Ich weis nicht warum, aber wenn ich eine intakte ZIP Datei hochlade, sie wieder runterlade und dann öffnen will, ist sie defekt.

    Also noch ein Vesuch
     

    Attached Files:

  9. Urs2

    Urs2 Megabyte

    Hi Tamás,

    Die ZIP aus #7 konnte ich jetzt öffnen... das ist oft geheimisvoll... manchmal geht es, manchmal nicht...

    Schreibschutz-Meldung >>>
    Das ist oft eine Vorsichtsregel von Excel, wenn man eine fremde Datei öffnet. Sie ist ja auch fremd, nämlich meine Datei...
    Wenn Du sie unter anderem Namen auf Deinem Excel abspeicherst, sollte es dann Deine sein.

    Erkenntlich zeigen >>>
    Bestätigung, dass es funktioniert und allenfalls ein kurzer Dank freuen mich.
    Wenn Ihr unbedingt etwas Gutes tun wollt, dann spendet an die DGzRS. In Seenot können viele geraten...
    Als Segler auch ich, aber hoffentlich nie !

    Den Rest schaue ich mir heute Nacht an.

    Bis morgen und Gruss,
    Urs
     
  10. Lametta 17

    Lametta 17 Byte

    Hallo Urs,

    versuche mal die Datei von 10:00 heute morgen.

    Gruß

    Tamás
     
  11. Urs2

    Urs2 Megabyte

    Hallo Tamás,

    Da hat sich ja was getan....
    Ich dachte schon, dass das noch erweitert wird, mein Code bestand ja fast nur aus Eingabefehler-Verhinderung.

    1. Schreibschutzmeldung jetzt weg?
    Deine XLS meckerte bei mir auch. In Excel > Optionen > Sicherheit war der Haken gesetzt bei "Schreibschutz empfehlen"

    2. Prüfung Artikelnummer
    Ersetze im Sub ErrorEnter() die rote Zeile durch die grüne Zeile
    (strArtikelNr ist String, also muss man direkt die tbxArtikelNr auslesen)
    Code:
    [I]    [COLOR="Red"]ElseIf strArtikelNr = "" Then                 [/COLOR]'ersetzen durch[/I]
                            'wenn keine Zahl, oder Zahl > fünf-stellig oder Zahlwert < 10000
                            'setzt natürlich voraus, dass keine Nummern 00123 existieren
        [COLOR="Red"][COLOR="SeaGreen"]ElseIf IsNumeric(tbxArtikelNr) = False Or _
            tbxArtikelNr > 99999 Or tbxArtikelNr < 10000 Then[/COLOR][/COLOR]
    
    Errortext ergänzen mit zB "nur Zahl 10'000 - 99'999"
    Wenn der Artikelname aus der Datenbank geholt werden soll, muss die Prüfung natürlich schon bei jenem Aufruf erfolgen.

    3. Vorhandene Datensätze
    Ideen habe ich schon, aber die Zeit reicht nicht mehr... morgen/übermorgen...
    Du willst die vorhandenen Rekla-Meldungen anzeigen und ggf. gewisse Einträge ändern lassen können. Richtig ?
    Welche Aenderungen (Bemerkungen, Massnahmen...) ?
    Mit dem Drehfeld nur Nummern anzuzeigen ist etwas gar dürftig... das werden doch sicher hunderte von Einträgen (ohne jetzt Euer Geschäft schlecht reden zu wollen...).

    Was hältst Du von einer Combobox, die alle Einträge anzeigt, aber natürlich nur eine oder zwei bestimmte Spalten davon?
    Entsprechend sortieren könnte man die Sammlung dann noch im Vorbeigehen.
    Wenn ja, welche Spalten?
    Nach Auswahl würde dann das ganze Formular gefüllt.

    4. Mit ODBC den Artikelnamen aus einer Datenbank fischen
    Ich könnte den Namen aus einer Datensammlung in einem anderen Arbeitsblatt oder einer anderen Mappe suchen und einfügen, aber aus einer echten Datenbank?
    Meine DB-Erfahrung beschränkt sich aufs Benutzen und sogar das ist schon einige Zeit her...
    Aber hier im Forum wird sich schon jemand finden, der uns mit der Aufruf-Syntax weiterhelfen könnte...
    ...ich kenne sogar einen Fachmann :wink:

    Gruss Urs
     
  12. Lametta 17

    Lametta 17 Byte

    Hallo Urs,

    1. ist erledigt ;)
    2. ist erledigt (super);)
    3. Die Anzeige der Datensatznummer (Zeile) ist ok.
    Es sollen alle Daten in allen Feldern des ausgewählten Datensatzes angezeigt werden. Auch in den Comboboxen und OptionButtons.
    Es sollen auch Änderungen in allen Feldern (Auch in den Comboboxen und OptionButtons.) möglich sein.

    4. Bin gespannt
     
  13. Urs2

    Urs2 Megabyte

    ...naja... dann wird aber das Sperren des Blattes "2008" eher sinnlos...
    ...wenn jeder so seine Ur-Einträge, und damit seine Fehler, praktisch zerstören könnte...

    Was ich als Drehfeld ansah, ist ja eine zusammengestauchte Bildlaufleiste !
    Diese würde im Prinzip auch einigermassen funktionieren... ich habe sie etwas angepasst...

    Auf dem Link gibt es meine Vorschlag2.xls (sie wächst und wächst...).
    >>> http://www.file-upload.net/download-1032952/Vorschlag2.xls.html
    Erklärungen sind in der Datei oder im Code.

    Bei mir läuft das Ding, aber das ausführliche Testen überlasse ich Dir.

    Gruss Urs
     
  14. Urs2

    Urs2 Megabyte

    @Alle Datenbank-Fachleute

    Ich kenne mich mit Datenbanken gar nicht aus. Ich weiss nicht einmal wie leicht oder wie schwierig es ist, aus einem Excel-Makro einen Wert in der Datenbank abzurufen.

    Code:
    Private Sub tbxArtikelNr_Change()
                        'Artikelbezeichnung aus der DB importieren
    strArtikelNr = tbxArtikelNr
    
        lblError.BackColor = &H8000000F                 'setzt Farben und Text zurück
        lblError = ""
        If IsNumeric(tbxArtikelNr) = False Or _
            tbxArtikelNr > 99999 Or tbxArtikelNr < 10000 Then
                lblError.BackColor = RGB(255, 255, 0)
                lblError = vbCr & ">>> Aha !!" & vbCr & vbCr & _
                    " Artikelnummer falsch..." & vbCr & _
                    " ...Zahl von 10000 bis 99999" & _
                    vbCr & " ... Eingeben und neu übertragen!"
                Exit Sub
        End If
    
    '------------------
    'strArtBez = ????
    
    'die Datenbank sollte jetzt über ODBC mit strArtNr
    'die dazugehörige Artikelbezeichnung strArtBez liefern...
    
    'entweder von hier direkt oder über eine Funktion...
    '------------------
    
       lblArtBez = strArtBez
    
    End Sub
    
    Vielleicht hat jemand einen Rat für das Problem des TO ?

    Danke und Gruss,
    Urs
     
  15. Urs2

    Urs2 Megabyte

    Hallo Tamás ,

    Die Datenbank... es ist Urlaubszeit...

    Ich hatte noch eine Idee zum Anzeigen des Arbeitsblatt-Wertes in den Combos.

    Das Problem ist, dass die Zelle keinen Index zurückgeben kann... weil sie ihn nicht kennt...
    Dieser Vorschlag3 kann deshalb auch nur eine Krücke sein, aber ich denke er ist eine luxuriösere Krücke als Vorschlag2.

    >>> http://www.file-upload.net/download-1035282/Vorschlag3.xls.html

    Schau Dir die beiden Vorschläge an, Erklärungen sind enthalten, Du hast freie Wahl...

    Gruss Urs
     
  16. Lametta 17

    Lametta 17 Byte

    Hallo Urs,

    erst einmal schönen Dank für die schnelle Hilfe.
    Ich habe EInige Teile aus Deiner Version 2 entnommen und implementiert.
    Hat echt Spaß gemacht. Noch mals Dank.

    Die Eingabemaske wurde ein wenig angepaßt, weil mehrere Gründe gleichzeitig erfaßt werden sollen.

    Die Eingabemaske ist im Prinzip fertig. Es sollen nur noch:

    1. alle Tabellenblätter gesperrt werden. Eingabe nur nach entsperren oder per Maske möglich) Wie kann man das realisieren?
    2. Die Geschichte mit der Datenbankabfrage. Hast Du da schon eine Idee?

    Gruß

    Tamás

    Deine Version 3 werde ich mir natürlich auch noch anschauen.
     

    Attached Files:

  17. Urs2

    Urs2 Megabyte

    ...es sollte nur noch funktionieren...

    1. Mit der Datenbank kann ich Dir nicht helfen, ich kenne diese Befehle nicht. Dazu ist Urlaubszeit, mein Bekannter ist nicht da und die Forums-Software lief in letzter Zeit so grottenschlecht, dass kaum noch jemand hier vorbeigeschaut hatte.
    Eröffne einen neuen Thread für die Datenbankbefehle und beziehe Dich dort auf diesen Thread... vielleicht hilfts...

    2. Die Blätter "Listen" und "2008" braucht eigentlich niemand zu sehen. Unter Format > Blatt > Ausblenden kannst Du sie verstecken. Dann sind sie aber noch nicht geschützt!

    Extras > Schutz > Blatt schützen (mit oder ohne Passwort) schützt die Blätter.

    Jetzt kann aber auch der Code nicht mehr ins Blatt "2008" schreiben!
    Im Sub cbnOK_click() muss vor dem Schreiben ActiveSheet.UnProtect("ev Passwort") stehen, und nachher den Schutz wieder aktivieren mit ActiveSheet.Protect("ev Passwort"), dann gehts.

    Im VB-Editor > Extras > Eigenschaften von VB-Projekt > Schutz... kann auch der Code mit Passwort geschützt werden (man sieht ja sonst dort das Passwort für den Blattschutz...).

    3. Das Füllen der Dropdowns mit den Werten im Blatt 2008 funktioniert so nicht !

    Entweder mit den roten Hilfszellen in Vorschlag2 oder mit den IndexNummern in Vorschlag3.
    Vorschlag3 eignet sich doch sehr gut für das vereinfachte UserForm. Lies meine Bemerkungen in Vorschlag3.xls, damit Sinn und Verwendung klar sind.

    Ich habe Deine letzte Datei an Vorschlag3 angepasst.
    >>> http://www.file-upload.net/download-1042123/Vorschlag4.xls.html

    Zum Testen fehlte die Zeit... es wird schon gehen...

    Gruss Urs
     
  18. Lametta 17

    Lametta 17 Byte

    Hallo Urs,

    Vorschlag 4 ist super,:jump:

    wie kann man verhindern das die Index Nr in den cbo's angezeigt werden - und nicht mit in die Liste 2008 gelangen?

    Das Eingabeformular soll sich erst beim click auf Abbrechen schliesen.

    Außerdem bräuchte ich noch einen Knopf "Neu erfassen", denn wenn ich einmal auf die Scrollbar geklickt habe, kann man nur noch ändern aber nicht mehr neu erfassen.

    Gruß

    Tamás
     
  19. Urs2

    Urs2 Megabyte

    Hallo Tamás,

    Wenn das Ding einmal steht, lässt es sich gut verändern. Allerdings muss man zuerst überlegen, ob das Gewünschte auch sinnvoll ist. Das Problem ist dabei weniger, was Du als sinnvoll empfindest, sondern das, was der Benutzer dann, gewollt oder aus Versehen, an Mist bauen könnte...
    Hier muss verhindert werden, dass der gleiche Eintrag plötzlich mehrmals in der Datenbasis steht...

    Der OK-Knopf soll das UserForm nicht schliessen >>>
    Kein Problem! Aber was soll er denn nach der Datenübertragung tun?
    - Alle Einträge stehen lassen? Dann drückt der User ("Mist, geht nicht") halt noch einmal > Kopie1... + Kopie2... +
    - Alles auf Null zurücksetzen? Kann man machen.

    Nach dem Abruf der alten Einträge sofort Neue erfassen >>>
    Ich hatte diesen Code aus Deinem Beispiel übernommen...
    - Kein Problem, einfach alles zurücksetzen lassen! Aber das wird wohl nicht das Ziel sein?
    - Alles stehen lassen > siehe oben!
    Willst Du Texteinträge aus alten Daten übernehmen, damit man sie nicht neu zusammensuchen muss?
    Welche Textboxen sollen das sein? Alle? Die Schadensangaben etc aber doch sicher nicht?
    Kann man machen, mit einem Button.

    Die ListIndex-Nummern >>>
    Hast Du meine Erklärungen in Vorschlag3.xls gelesen?
    Das Makro interessiert sich nicht für den Text im Blatt 2008, sondern ausschließlich für die Nummer... die Du weg haben willst...
    Es gibt 2 Möglichkeiten >

    - Du verkaufst diese Nummern als sinnvolle Angaben. Richtig geordnet als Gradmesser: 0=OK, 1=läppisch.... 7=explosiv

    - Im Blatt 2008 kommt neben jede Combo-Spalte eine Zusatzspalte die nur die Zahl enthält. Die Zusatzspalte kann man ausblenden.
    Das Makro liest dann nur die Zusatzspalte, schreibt aber auch in die andere.
    Blatt Listen würde auch angepasst.

    - Es gäbe noch Nummer3, aber die ist so fehleranfällig, dass sie unbrauchbar ist.
    Für jede Combo vergleicht das Makro den Zellinhalt mit seinem Listeninhalt...
    Der kleinste verschobene I-Punkt, in den Blättern Liste oder 2008, verhindert dann das Funktionieren. Solch kleine Fehler kann niemand verhindern... während eines ganzen Jahres !

    Und? Was machen wir?

    Warum ist Deine Datei eigentlich so gross? 300KB für kaum etwas - sind das Formatierungen?

    Gruss Urs
     
    Last edited: Aug 16, 2008
  20. Lametta 17

    Lametta 17 Byte

    Hallo Urs,

    wir haben uns Gedanken gemacht und sind zu folgenden Ergebnissen gekommen:

    Der OK-Knopf soll das UserForm nicht schliessen >>>
    Kein Problem! Aber was soll er denn nach der Datenübertragung tun?

    - Alles so stehen lassen und im Info-Fenster die Meldung anzeigen das der Datensatz gespeichert wurde.

    Jetzt kann er entweder diesen Datensatz noch einmal speichern, von der Datensatzposition weiter vorwärts oder rückwärts „blättern“, oder mit Hilfe des neuen Buttons „Neuer Datensatz“ alle Felder leeren und neue Daten eingeben, die dann über Daten speichern hinter dem letzten Datensatz gespeichert werden.

    - - Im Blatt 2008 kommt neben jede Combo-Spalte eine Zusatzspalte die nur die Zahl enthält. Die Zusatzspalte kann man ausblenden.
    Das Makro liest dann nur die Zusatzspalte, schreibt aber auch in die andere

    Dies ist die Lösung.

    Warum ist Deine Datei eigentlich so gross? 300KB für kaum etwas - sind das Formatierungen?

    Kann ich Dir auch nicht sagen.

    Vielen Dank für Deine Mühe

    Gruß

    Tamás
     
Thread Status:
Not open for further replies.

Share This Page