ich habe zu angehängter Datei schon eine Menge Hilfe erhalten. Ein letztes Mal (hoffentlich?) bin ich jedoch nochmal auf euer Expertenwissen angewiesen.
Im Arbeitsblatt "Dispoplan" ist ein Drehfeld (M2) mit dem ich die anzuzeigenden Tage ändern kann (links heute, rechts morgen).
Frage 1: Ist es möglich in einem Drehfeld die Wochenenden und Feiertage zu überspringen?
Frage 2: Das Drehfeld soll mit einer zusätzlichen Funktion hinterlegt werden. Je nach angezeigten Tagen sollen die Daten (Datum (K2 oder S2), Fahrzeug, Fahrer, Auflieger, Auftrag1 und evtl. Auftrag 2) in das Archiv verschoben werden, bzw. aus dem Archiv geholt werden. Wenn kein Auftrag vorliegt soll die Zeile natürlich leer bleiben.
Hintergrund ist folgender: Unsere Disponentin nutzt Excel 2007 (ich selber Excel 2016) und möchte eine Datei in der sie den jeweils ausgewählten Tag und den nächsten als Übersicht sieht. Ab und zu ändern sich die Daten der Aufträge, daher ist es notwendig die Daten aus dem Archiv zu holen und auch wieder zu überschreiben.
kümmern wir uns zuerst mal um das Drehfeld. Auf dem Blatt hast Du eines aus Formular. Das hat den Nachteil, dass es dafür keine Ereigniscodes gibt. Man könnte über den Umweg des Calculate-Ereignisses versuchen, die Tage zu überspringen. Allerdings weiß man erst mal nicht, in welche Richtung Du gedrückt hast und müsste sich das irgendwie merken ...
Hier mal ein Prinzipbeispiel für einen Wochen(end)tag. Das müsste man noch ausbauen für den anderen und die Feiertage.
Code:
Private Sub Worksheet_Calculate() If WorksheetFunction.Weekday(Range("K2").Value) = 7 Then Range("K2").Value = Range("K2").Value + 1 End If End Sub
In Deinem Code ist ja noch was für den ActiveX drin. Allerdings hab ich den Button nicht auf dem Blatt gefunden. Hier könnte man des Up und Down verwenden ...
Private Sub SpinButton1_SpinDown()
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
erstmal Entschuldigung für die späte Antwort aber die Arbeit kam mir leider in den Weg...[img] Dateiupload bitte im Forum! So geht es: Klick mich! ]
Vielen Dank für deine Hilfe, das ist ein interessanter Ansatz für den 1. Teil meines Problems. Momentan ist für das Drehfeld folgender Code hinterlegt:
Private Sub SpinButton1_SpinDown() Dim dt As Date
dt = CDate(txtxDatum.Text) dt = DateAdd("d", -1, dt) txtxDatum.Text = CStr(dt) End Sub
Private Sub SpinButton1_SpinUp() Dim dt As Date
dt = CDate(txtxDatum.Text) dt = DateAdd("d", 1, dt) txtxDatum.Text = CStr(dt) End Sub
Ich überlege gerade wie ich das umschreiben muß um deinen Ansatz mit If WorksheetFunction.Weekday(Range("K2").Value) = 7 Then
Range("K2").Value = Range("K2").Value + 1
einzubringen. Leider kenne ich mich da zu wenig aus.
Vielleicht hast du eine Idee?
Schöne Grüße Thomas
P.S. Wenn jemand noch eine Idee hat wie ich den Datenübertrag zwischen Blatt "Dispoplan" und Blatt "Archiv" herstellen kann wäre mir sehr geholfen.
den aktuellen Stand meiner Tabelle findet Ihr in der beigefügten Datei.
Ich stehe leider immer noch vor meinen 2 Problemen.
1. Möchte ich den up/down Button den ich im Feld M2 eingefügt habe dahingehend programmieren, dass er bei up einen Tag im Feld K2 dazuzählt aber Samstage, Sonntage auslässt. Also wenn Freitag ist er bei up auf Montag springt. Bei down natürlich entsprechend einen Tag abzieht aber bei Montag wieder auf Freitag der Vorwoche springt. (Feiertage wären natürlich der Oberhammer, diese hätte ich im Tabellenblatt "Urlaubsplan" unter C26-C44)
2. Möchte ich die Tabelle F4-L25 und die Tabelle N4-T25 aus den entsprechenden Daten aus dem Arbeitsblatt "Archiv" füttert, bzw Änderungen bei Wechsel des Tages ins Archiv übernommen werden.
Ich kann mir vorstellen, dass dies keine leichte Aufgabe ist und mein Aufbau vielleicht auch nicht perfekt ist. Ich bin von der Form her jedoch ziemlich gebunden.
entferne die Verlinkung des Spinbuttons zur Zelle A3 und füge in das VBA-Modul des Tabellenblattes Dispoplan ("Tabelle2(Dispoplan)") folgenden Code ein:
Private Sub SpinButton1_SpinDown() Dim datB3 As Date datB3 = Range("B3").Value Range("A3").Value = Range("A3").Value - 1 + ((Weekday(datB3, vbTuesday) > 5) * (Weekday(datB3, vbSunday))) End Sub
Private Sub SpinButton1_SpinUp() Dim datB3 As Date datB3 = Range("B3").Value Range("A3").Value = Range("A3").Value + 1 - ((Weekday(datB3, vbSunday) > 5) * (3 - Weekday(datB3, vbFriday))) End Sub
vielen Dank, das funktioniert super! Mein Problem ist immer das ich zwar ungefähr entziffern kann was ein Code macht, ich es aber nicht schaffe den Code selbst zu schreiben.
Ich bin so froh, das es dieses Forum und euch gibt.
Offtopic: Ich lese mir hier zwar so gut wie jeden Beitrag durch um weiter zu lernen, aber vielleicht habt ihr auch noch Tips für Übersichtsseiten VBA und Formeln?
Private Sub SpinButton1_SpinDown() Dim datB3 As Date Dim i As Long Dim rngF As Range datB3 = Range("B3").Value - 1 Set rngF = Worksheets("Urlaubsplan").Names("Feiertage").RefersToRange i = 1 Do If Not IsError(Application.Match(CLng(datB3), rngF, 0)) Or Weekday(datB3, vbMonday) > 5 Then datB3 = datB3 - 1 i = i + 1 Else Exit Do End If Loop Range("A3").Value = Range("A3").Value - i End Sub
Private Sub SpinButton1_SpinUp() Dim datB3 As Date Dim i As Long Dim rngF As Range datB3 = Range("B3").Value + 1 Set rngF = Worksheets("Urlaubsplan").Names("Feiertage").RefersToRange i = 1 Do If Not IsError(Application.Match(CLng(datB3), rngF, 0)) Or Weekday(datB3, vbMonday) > 5 Then datB3 = datB3 + 1 i = i + 1 Else Exit Do End If Loop Range("A3").Value = Range("A3").Value + i End Sub
auch hierfür herzlichen Dank! (Diesmal bin ich beim Versuch den Code zu lesen und zu verstehen allerdings gescheitert...[img] Dateiupload bitte im Forum! So geht es: Klick mich! ])
26.01.2017, 13:30 (Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2017, 13:40 von snb.)
Oder:
Code:
Private Sub SpinButton1_Change() With SpinButton1 y = 1 + 2 * (Date + .Value < Cells(2, 11)) If Weekday(Date + .Value, 2) > 5 Or InStr(1, Join(Application.Transpose(Sheets("Urlaubsplan").Range("C26:C44")), "_"), Format(1 * (Date + .Value)), 1) Then .Value = .Value + y Cells(2, 11) = Date + .Value End With End Sub
1. Verzichte auf 'merged cells' 2. Man braucht kein 'linkedCell', weil VBA benützt wird 3. Das heutige Datum kann auch ohne HilfZelle geschrieben werden.
jetzt muss ich das Thema leider noch mal hochholen. Ich habe zwar Codes gefunden was das Verschieben von Zellen betrifft, aber ich kann nichts davon auf meine Bedürfnisse anpassen. Ich muss dazu sagen dass ich Excel erst seit 3 Monaten überhaupt nutze und in meiner neuen Arbeitsstelle jetzt in der Winterzeit für die "Modernisierung" der Bürosoftware zuständig bin. Bisher war das meiste über Handzettel und sonstiges organisiert. Wir sind ein kleiner Familienbetrieb und haben saisonbedingt im Sommer Stress und im Winter Zeit. Deshalb stelle ich zur Zeit auch so unendlich viele Fragen zum Thema Excel...
Mein aktuelles Arbeitsblatt habe ich angehängt.
Wie ihr seht verstelle ich mit dem Drehfeld oben das Datum des Tages und des Folgetages. Ab Spalte Y befindet sich die Tabelle "Auftragsarchiv". Mein Wunsch wäre eine Erweiterung des Drehfeld Codes der mir folgendes erlaubt:
Es sollen von beiden Tagen jeweils das angezeigte Datum z.B. N2 sowie den LKW z.B. J4,J6,J8... den Fahrer z.B. J5,J7;J9... den Auflieger, Z.B. K4,K5,K6... und die Aufträge L4,L5... in die Tabelle "Auftragsarchiv" verschoben werden, die Daten aus den Tagen anschließend gelöscht werden und die Daten des neu angezeigten Tages aus der Tabelle "Auftragsarchiv" geholt und angezeigt werden.
Kann mir noch jemand folgen? [img] Dateiupload bitte im Forum! So geht es: Klick mich! ]
Ich habe zwar immer wieder Codes gefunden die mir hierbei weiterhelfen werden (z.B. Clear.Contents um Inhalte zu löschen oder lngErste = Application.Count(.Columns(2)) + 5 letzte Zeile finden usw.) aber ich krieg den kompletten Code einfach nicht auf die Reihe.