Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
728to732
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
728to732
728to732
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Automatisch Zellen horizontal 3x kopieren

Automatisch Zellen horizontal 3x kopieren
Jens
Hallo,
Habe gerade ein Grundlagenkurs in VBA gemacht und versuche mich mit meinem ersten Projekt...ein Schichtplan. Es ist für euch sicherlich ein Klacks, ich kämpfe allerdings schon seit Stunden an dieser Prozedur:
Ich möchte einfach nur den erzeugten Zellentyp in weitere 3 bzw. 4 Tage inkl. Formatierung kopieren, d.h. Montag ist Schicht "T" und diese wird automatisch beim Setzen auch auf Di+Mi+Do gesetzt, also insgesamt in 4 horizontale Zellen.
Public

Sub Tagschicht()
ActiveCell.FormulaR1C1 = "T"
ActiveCell.Interior.ColorIndex = 40
Selection.Font.Bold = True
With Selection
.HorizontalAlignment = xlCenter
End With
End Sub

AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 17:05:33
Reinhard
Hi Jens,
Option Explicit
Public Sub Tagschicht()
With Range(ActiveCell, ActiveCell.Offset(0, 3))
.FormulaR1C1 = "T"
.Interior.ColorIndex = 40
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 19:50:18
Jens
Hi Reinhard,
herzlichen Dank, funktioniert einwandfrei. So kann ich mit Kontextmenü Mo-Do bzw. Fr-So auswählen und die Zahlen 2 oder 3 zuweisen.
Nun hatte ich die Idee, dass ich doch gleich festlegen kann, dass bei Klick im Kontextmenü auf eine Zelle in Spalte B, I, P und W (das sind immer die Montage) "Tage = 3" ist, bei Spalte E, L, S und Z (Donnerstage) "Tage = 2". Wenn bei einer Auswahl andere Spalten verwendet werden, sollte msgbox "Ungültiger Wochentag" oder sowas kommen. Nachdem was ich gelernt hab, realisiert ich das mit einer mehrstufigen Auswahl (if, elseif, else). Passt das soweit? Leider fehlt mir hier noch einiges an Befehlen, im Lehrgang ging es immer um feste Werte wie "Range("a1")".
Nun möcht ich nicht andere meine Programme schreiben lassen, sondern selber Lernen, daher ist mir das hier doch schon eher peinlich. Nur ist es sehr schwierig, Fuß zu fassen.
Hier im Beispiel hab den Tage-Wert zunächst als Variable deklariert und fest auf 2 gesetzt. Leider funktioniert es nicht als globale Variable, muss also auch bei der Spät- und Nachtschicht mit dim nochmal deklarieren, muss ich noch sehen warum. Deswegen hier als "Dim Tage As Byte".
Option Explicit
Public

Sub Tagschicht()
Dim Tage As Byte
Tage = 2
With Range(ActiveCell, ActiveCell.Offset(0, Tage))
.FormulaR1C1 = "T"
.Interior.ColorIndex = 40
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
End Sub

Anzeige
AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 20:00:18
Reinhard
Hi Jens,
das mit dem Kontextmenu habe ich nicht ganz verstanden. Welches Kontextmenu meinst du? Rechhtsklick?
Ansonsten, globale Variablen einmalig oben im Modul deklarieren.
Option Explicit
Dim Tage As Byte
Public Sub Tagschicht()
Tage = 2
With Range(ActiveCell, ActiveCell.Offset(0, Tage))
.FormulaR1C1 = "T"
.Interior.ColorIndex = 40
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
End Sub
Public Sub Nachtschicht()
End Sub
Public Sub Spaetschicht()
End Sub

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 20:19:26
Jens
Ja, mit Rechtsklick in die Zelle. Das hab ich mit Suchen im Netz hinbekommen.
Deklariere ich im Modul die Variable, dann findet Excel beim Anklicken im Kontextmenü das Macro Tagschicht nicht, egal was ich über dem "Sub" schreibe.
Sieht so aus (die anderen Schichten lass ich hier mal weg, ist dann ja 1:1):
Option Explicit
Public Tage As Byte
Tage = 2
Public

Sub Tagschicht()
With Range(ActiveCell, ActiveCell.Offset(0, Tage))
.FormulaR1C1 = "T"
.Interior.ColorIndex = 40
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
End Sub

Die Erstellung vom Kontextmenü erfolgt in nem anderen Modul, der Übersicht halber. Oder ist das unsinnig?
Anzeige
AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 22:15:58
Reinhard
Hi Jens,
wie soll ich wissen warum die Sub nihct gefunden wird wenn ich den Code zur Erzeugung des Kontextes nicht kenne, poste ihn bitte.
Nö, wer weiss wie die Codes sich noch vermehren, es lohnt sich schon sie in einzelnen Modulen zu verteilen. Dann noch die Module bennen mit "Schichten" und "Kontext", das hilft beim Überblick.
Const Tage = 2
wäre auch eine idee, wenn Tage immer 2 ist
und setze <pre> vor und </pre> nach deinen Code, dann verschiebt sich das "Public" nicht.
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 22:39:33
Jens
Das "Const Tage = 2" funktioniert, wenn ich es über die einzelnen Prozeduren in dem Modul setze. Frage ich mich, warum das mit Public nicht geht...?
Wie bekomme ich den Inhalt einer beliebigen aktiven Zelle in eine Variable?
Active.... = Variable
Und wie kann ich ihm sagen, "wenn aktive Zelle sich in Spalte "B" befindet, dann..."
?
Damit sollte ich paar Schritte weiter kommen.
Hier noch mein Syntax zur Kontexterstellung:
Option Explicit

Sub KontextmenüErstellen()
Dim NeuesMenü As CommandBarButton
Dim Kontext As CommandBarButton
Dim Kontext2 As CommandBarButton
Dim Kontext3 As CommandBarButton
Dim Kontext4 As CommandBarButton
With CommandBars("Cell")
'Bestehendes Menü löschen
Do While .Controls.Count > 0
On Error Resume Next
.Controls(1).Delete
Loop
'Neues Menü erstellen
Set NeuesMenü = .Controls.Add(msoControlButton)
With NeuesMenü
.Caption = "Tagschicht"
.OnAction = "Tagschicht"
End With
Set Kontext = CommandBars("Cell").Controls.Add
With Kontext
.Caption = "Spätschicht"
.OnAction = "Spätschicht"
End With
Set Kontext2 = CommandBars("Cell").Controls.Add
With Kontext2
.Caption = "Nachtschicht"
.OnAction = "Nachtschicht"
End With
Set Kontext4 = CommandBars("Cell").Controls.Add
With Kontext4
.Caption = "Urlaub"
.OnAction = "Urlaub"
End With
Set Kontext3 = CommandBars("Cell").Controls.Add
With Kontext3
.Caption = "Schicht löschen"
.OnAction = "Löschen"
End With
End With
End Sub


Sub KontextmenüWiederherstellen()
CommandBars("Cell").Reset
End Sub

Anzeige
AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 22:46:33
Reinhard
Hi Jens,
umgedreht:
x=activecell.value
if activecell.column=2 then
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 22:53:38
Reinhard
Hi Jens,
das Makro Nachtschicht wird doch gestartet:
https://www.herber.de/bbs/user/30968.xls
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 23:13:14
Jens
Ja schon, so klappt es bei mir auch, aber schreib mal die Variable dazu, dann gehts nicht mehr.
Option Explicit
Public Variable As Byte
Variable = 8

Sub nachtschicht()
MsgBox "nightshift"
End Sub

Das andere probier ich morgen mal aus, sofern ich es schaffe. Melde mich bestimmt wieder ;)
Ich danke für heut schon mal.
Anzeige
AW: Automatisch Zellen horizontal 3x kopieren
12.02.2006 23:13:41
Jens
Ja schon, so klappt es bei mir auch, aber schreib mal die Variable dazu, dann gehts nicht mehr.
Option Explicit
Public Variable As Byte
Variable = 8

Sub nachtschicht()
MsgBox "nightshift"
End Sub

Das andere probier ich morgen mal aus, sofern ich es schaffe. Melde mich bestimmt wieder ;)
Ich danke für heut schon mal.
Grüße
Jens
AW: Automatisch Zellen horizontal 3x kopieren
13.02.2006 00:53:56
Reinhard
Hi Jens,
da kommt doch die eindeutige Fehlermeldung zu "Variable=8", außerhalb einer Prozedur ungültig!?
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Automatisch Zellen horizontal 3x kopieren
14.02.2006 11:18:27
Jens
Kleiner Zwischenstand; Bin mit Erfolg weiter gekommen und mein Szenario umgesetzt. Interessanterweise nimmt er jetzt öffentliche Variablen. Ich weiss nicht, was jetzt anders ist. Was soll´s, das Ergebnis zählt. Werde noch weiter dran feilen, da bestimmte Schichtfolgen aufgrund von Ruhezeiten nicht möglich sind, dass dann entsprechende Fehlermeldungen kommen.
Option Explicit
Public Tage
Public WoTag As Byte

Private Sub FesteSchicht()
Tage = 0
WoTag = ActiveCell.Column
If WoTag = 2 Or WoTag = 9 Or WoTag = 16 Or WoTag = 23 Then
Tage = 3
ElseIf WoTag = 6 Or WoTag = 13 Or WoTag = 20 Or WoTag = 27 Then
Tage = 2
Else
MsgBox "Schicht regulär nur montags" & vbCrLf & "und freitags möglich!" & vbCrLf & "Schicht wird als Einzeltag gesetzt", 64
End If
End Sub

Grüße
Jens
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige