Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Werte via VBA eintragen

Betrifft: Werte via VBA eintragen von: NoPa
Geschrieben am: 22.10.2014 14:39:19

Hallo,

ich habe folgendes Problem!
Anbei die Liste/Diagramm

https://www.herber.de/bbs/user/93289.xlsm

Ich muss via VBA einen Vergleich erstellen, der sich wöchentlich ändert.

Meine Vorarbeit: Eine Abfrage wird in einer festen Form in Excel angelegt. Diese Tabelle muss ich in meine Liste in die Mappe des jeweiligen Mitarbeiters kopieren. Wenn dies geschehen ist soll meine Makro mittels Knopfdruck auf den Button gestartet werden.

Mein Makro soll folgendes ausführen!
Diese Werte aus Spalte „G“ (z.B. aus Mappe „Hans“ ) soll der Kalenderwoche endsprechend in die „Vergleich“ Mappe in die gelbe Zeile (Istumsatz) übertragen werden.

Problem ist, dass ich die Eintragung z.B. von KW2014/40 bis 2014/52 eintragen muss.
Bis jetzt kann ich nur jede einzelne KW ansprechen! Gewünscht ist dass ich z.B. KW 2014/40 bis 2014/52 oder bzw. die letzte KW der Abfrage eintragen lasse!
Zu bedenken ist aber auch, dass monatlich ein neues Monat dazu kommt und ein altes Monat weg fällt! Darum arbeite ich mit der „Find“ Funktion.

Gestartet wir die Eintragung über den Button Eintragung starten!

Bitte um Hilfe!

Danke
Gruß
Norbert

  

Betrifft: AW: Werte via VBA eintragen von: fcs
Geschrieben am: 26.10.2014 11:08:27

Hallo Norbert,

leider ist hier wahrscheinlich das Kind bereits in den berühmten Brunnen gefallen, weil man sich auf eine bestimmte Form der Darstellung/Auswertung festgelegt hat.

Ich persönlich hätte dafür gesorgt, dass die Basis-Daten so aufbereitet werden, dass sie per Pivot-Tabellenbericht/Diagramm nach Mitarbeiter/Jahr/Monat/KW ausgewertet werden können. Dann bräuchte man sich bei der Auswertung "nur" um den auszuwertenden Zeitraum kümmern.

Um in deinem Fall weiter zu kommen solltest du folgendes machen.
1. Erstelle auf einem separaten Hilfs-Blatt eine Liste mit folgenden Inhalten:
Spalte A: Namen = Name/Bezeichnung die im Blatt "Vergleich" gesucht wird, um die Zeile zu finden in der die Daten eingetragen werden sollen.
Psalte B: Tabellenname = Name des Tabellenblatts in dem die Daten zu dem in Spalte A stehenden Namen stehen.

2. Passe dein Userform so an, dass eingegeben werden können:
- Datum des 1. Tags der 1. KW
- Datum des 1. Tages der letzte KW
des zu bearbeitenden Zeitraums.

Da du ja auch Zeiträume über den Jahreswechsel bearbeiten muss, wenn du den darzustellenden Zeitraum jeweils um einen Monat verschieben muss, ist die KW kein geeigneter Zähler für Schleifen. Hier funktioniert das Datum besser, das man ja in 7er Schritten hochzählen kann, um Wochenschritte zu erhalten.
Die KW in der Schleife muss dann berechnet werden.

3. Makro-Ergänzungen:
Das Makro im Userform, das die Daten aus den Namens-Blättern ins Vergleichsblatt kopiert muss jetzt so ergänzt werden.

In einer äußeren For-Next-Schleife werden die KW abgearbeitet
In einer inneren die Namen auf dem Hilfsblatt

Zusätzlich sollte man auch prüfen, ob die Eingabedaten vollständig und formal korrekt sind.

Ich hab deine Datei mal entsprechend ergänzt/angepasst.
https://www.herber.de/bbs/user/93376.xlsm

Ich hoffe, dies ist eine Basis, auf der du aufbauen kannst.

Gruß
Franz


  

Betrifft: AW: Werte via VBA eintragen von: NoPa
Geschrieben am: 28.10.2014 07:09:44

Hi,

danke für deine Bemühungen! Aber das haut nicht hin.
Jedesmal wenn ich ein Datum in das Userform eintrage bringt er mir gleich nen Fehler ohne das ich etwas mache!

Private Sub tbKW1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   With tbKW1
        If .Value = "" Then
        
        ElseIf IsDate(.Value) Then
            .Value = Format(CDate(.Value), "YYYY-MM-DD")
            'KW in Hilfstabelle berechnen
            wksHilf.Range("Hilf_Datum").Value = CDate(.Value)
            wksHilf.Range("Hilf_KW").Calculate
            Me.tbWochtag1 = Format(CDate(.Text), "DDDD") & _
                " KW " & Format(Year(CDate(.Value)), "0000") & "/" & Format(wksHilf.Range(" _
Hilf_KW").Value, "00")
        Else
            MsgBox "Bitte ein gültiges Start-Datum eingeben"
            Cancel = True
        End If
   End With
End Sub

Das markiert er mir immer! Ich komm nicht weiter!

Gruß
Norbert


  

Betrifft: AW: Werte via VBA eintragen von: fcs
Geschrieben am: 28.10.2014 14:15:21

Hallo Norbert,

ich hab deine Datei mit Excel 2010 bearbeitet.
Evtl. passt da irgendetwas nicht, wenn du die Datei jetzt unter Excel 2007 öffnest.

Prüfe mal im VBA-Editor für die Datei unter Menü "extras -- Verweise..." die aktivierten Verweise.

Diese sollten sein:
Visual Basic for Applications
Microsoft Excel x.y Object Library
Ole Automation - nicht unbedingt erforderlich
Microsoft Office x.y Object Library
Microsoft Forms 2.0 Object Library
Ref Edit Control - nicht unbedingt erforderlich

x.y steht für die installierte Version von Office/Excel
ist 14.0 bei Excel 2010 und sollte bei Office 2007 wohl 12.0 sein.

Wenn eine der Objektbibliotheken nicht aktiviert ist, dann musst du sie in der Auswahlliste markieren (Checkbox anklicken) und mit OK aktivieren.

Ein anderer Grund fällt mir jetzt nicht ein, da die Datei bei mir ja ohne Fehlermeldung funktioniert.

Alternativ kannst du in der/den Problemzeilen mal den Referenz-Verweis für die integerierte Funktion Year voranstellen.

            Me.tbWochtag1 = Format(CDate(.Text), "DDDD") & _
                " KW " & Format(VBA.Year(CDate(.Value)), "0000") & "/" _
                & Format(wksHilf.Range("Hilf_KW").Value, "00")
Das ist aber nur Kurieren ohne das Grundproblem zu beseitigen.

Gruß
Franz


 

Beiträge aus den Excel-Beispielen zum Thema "Werte via VBA eintragen"