Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Drehfeld Programmierung bzw. Datenübertrag
#1
Hallo liebe Forengemeinde,

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.

Kann mir hierbei jemand behilflich sein?

Vielen Dank!

Thomas


Angehängte Dateien
.xlsm   test upload.xlsm (Größe: 887,39 KB / Downloads: 12)
Antworten Top
#2
Hallo Thomas,

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)
Antworten Top
#3
Hallo André,

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.
Antworten Top
#4
Hallo nochmal,

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.

Vielleicht hat ja noch jemand eine Idee?

Vielen Dank schonmal, Thomas!


Angehängte Dateien
.xlsm   upload.xlsm (Größe: 880,13 KB / Downloads: 8)
Antworten Top
#5
Hallo Thomas,

zu 1.:

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
Gruß Uwe
Antworten Top
#6
Hallo Uwe,

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?

Schöne Grüße

Thomas
Antworten Top
#7
Hallo Thomas,

zu 1. mit Feiertagsberücksichtigung:
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
Zu Tips für Übersichtsseiten VBA und Formeln:
http://www.online-excel.de/
http://www.herber.de/excelformeln und bitte suchen .../

Gruß Uwe
Antworten Top
#8
Guten Morgen Uwe,

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!
])

Ich wünsch dir einen schönen Tag

Thomas
Antworten Top
#9
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.


Angehängte Dateien
.xlsm   __upload snb.xlsm (Größe: 885,95 KB / Downloads: 2)
Antworten Top
#10
Hallo Leute,

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.

Ich bin für jede Hilfe dankbar!

Schöne Grüße Thomas


Angehängte Dateien
.xlsm   upload dispo.xlsm (Größe: 246,95 KB / Downloads: 3)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste