Excel VBA eine definierte Shape bewegen?
Hallo Zusammen,
Ich habe in einem File mit zwei Blättern (Genehmigung und Planung) einen Balken (benannt "Datumsbalken"). Dieser ist jeweils auf dem heutigen Tag fixiert.
Jetzt will ich seine Verschiebung anhand des heutigen Datums automatisieren. Ich bringe jedoch das Makro nicht zum laufen. Was ist mein Fehler?
Sub BalkenSchieben3()
Dim Today As Variant
Dim Last As Variant
Dim TodaySheet As Variant
Dim Difference As Variant
Dim Form As Shape
Set Form = Sheets("Planung").Shapes.Range("Datumsbalken") '(Array("Datumsbalken")) soll die Shape "Datumsbalken" suchen
Set Today = Date 'Setzt das heutige Datum
Set Difference = Sheets("Genehmigung").Range("AO3") 'Setzt den Unterschied zwischen letzter Bearbeitung und Heute
Set TodaySheet = Sheets("Genehmigung").Range("AK3")
If Difference > 0 Then
For Difference = 1 To Difference 'Die Anzahl Tagesunterschiede (Difference) entscheidet, wie viele Male der Balken verschoben werden soll.
With Sheets("Planung")
Form.Select
Selection.ShapeRange.IncrementLeft 21
End With
Next
Else
End If
Set Sheets("Genehmigung").Range("AK3") = Today 'Das heutige Datum wird in die Zelle abgespeichert
Set Sheets("Genehmigung").Range("AM3") = TodaySheet 'Das letzte Bearbeitungsdatum (vorheriges "Heute") wird abgespeichert, damit die nächste Difference berechnet werden kann
End Sub
Vielen Dank im Voraus!
2 Antworten
Dein shape hat die "left" Eigenschaft. Diese mit dem "left" der entsprechenden Zelle (die mit dem richtigen Datum) synchronisieren.
For Difference = 1 To Difference
An dieser Stelle hast du vielleicht ein bisschen zu viel versucht zu tricksen.
Ich würde, auch wenn es technisch geht, nicht die Zählvariable wie die Begrenzung nennen.
Wenn du dann immer noch einen Fehler haben solltest, solltest du dir Debugtechniken aneignen. Debugge dich bis zu der Stelle, die das Problem verursacht und überprüf die Variablenwerte an dieser Stelle.
Weiterhin könntest du alle Teile, bis auf den Kern in einer Funktionskopie löschen und die Parameter des zu verarbeitenden Teils auf feste Konstanten setzen.
Und noch ein Extrahinweis:
Variablen haben von Haus aus den Typ Variant, wenn du keinen Datentyp angibst. Zu einem guten Programmierstil gehört es aber, die Datentypen zu verwenden, die zu den Daten passen. Zum Beispiel wäre TodaySheet ein (Work)Sheet.
Variantdeklarationen erschweren manchmal das Debuggen.