Microsoft Excel

Herbers Excel/VBA-Archiv

Macro

Betrifft: Macro von: Carsten
Geschrieben am: 10.09.2004 21:16:44

Hallo !

Ich möchte per Makro in Spalten automatisch das Datum, von einem ausgehend, setzen lassen.

__________Mo|Di|Mi|Do|Fr|Sa|So|
|13.10.2004|__|__|__|__|__|__|__|
|20.10.2004|__|__|__|__|__|__|__|

Ich möchte den Cursor auf das Datum setzen, und das sollen in die jeweiligen Spalten, die Tagesdaten, also 13|14|15 etc. eingesetzt werden. Für eine Spalte schaffe ich das per Makro.
Es ist mir aber nicht möglich, das dann für die nächste Spalte laufen zu lassen. Das Macro füllt immer nur die gleichen Felder aus. Mit einem $-Zeichen ($B3) kam ich auch nicht weiter.

Was mache ich falsch ?

  


Betrifft: AW: Macro von: ypsilon
Geschrieben am: 10.09.2004 21:28:54

hi Carsten,
versteh ich nicht,
zeig mal dein vorhandenes makro vielleicht wirds dann klarer
cu Micha


  


Betrifft: AW: Macro von: Carsten
Geschrieben am: 10.09.2004 21:41:12

Range("$B$4").Select
Selection.Copy
Range("$E$4").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.NumberFormat = "dd"
Selection.AutoFill Destination:=Range("$E$4:$K$4"), Type:=xlFillDefault
Range("$E$4:$K$4").Select


  


Betrifft: AW: Macro von: yps
Geschrieben am: 10.09.2004 21:56:40

hi Carsten,
ich habe mal alle selects dringelassen um dich nicht zu verwirren
die brauchst du nicht wirklich ;-)

Sub test()
Dim zeile As Long
For zeile = 1 To 3 'wenn mehr zeilen dann hier ergänzen
Range("B" & zeile).Select
Selection.Copy
Range("E" & zeile).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.NumberFormat = "dd"
Selection.AutoFill Destination:=Range("E" & zeile & ":K" & zeile), Type:=xlFillDefault
Next zeile
End 
Sub 

cu Micha



  


Betrifft: AW: Macro von: y
Geschrieben am: 10.09.2004 22:20:18

...und trotzdem mal ohne select sonst hab ich ein schlechtes gewissen ;-)

Sub test2()
Dim zeile As Long
For zeile = 4 To 7 'wenn mehr zeilen dann hier ergänzen
Range("B" & zeile).Copy Destination:=Range("E" & zeile)
Range("E" & zeile).AutoFill Destination:=Range("E" & zeile & ":K" & zeile)
Range("E" & zeile & ":K" & zeile).NumberFormat = "dd"
Next zeile
End Sub


cu Micha


  


Betrifft: AW: Macro von: PeterW
Geschrieben am: 10.09.2004 22:30:25

Hallo Micha,

welchen Vorteil hat das Kopieren:
Range("B" & zeile).Copy Destination:=Range("E" & zeile)
gegenüber der direkten Zuweisung:
Range("E" & zeile) = Range("B" & zeile) ?

Gruß
Peter


  


Betrifft: AW: Macro von: y
Geschrieben am: 10.09.2004 22:35:15

hi Peter,
gar keinen (nach meiner meinung) ich weiss um ehrlich zu sein auch nicht welche methode schneller ist
weisst du näheres oder müssen wir auf Nepumuk warten ? ;-)
cu Micha


  


Betrifft: AW: Macro von: y
Geschrieben am: 10.09.2004 22:41:20

jaja,
von: Hans W. Hofmann
Geschrieben am: 08.02.2003 - 19:35:21

das mit copy ist das selbe wie mit select.
Copy/Paste ist ein typisches Relict der Tabellenuser und passt nicht in ein Programmierparadigma. Programmtechnisch ist unter Kopieren eine Zuweisung zu verstehen. Z.B bei einer Integer würde niemand auf die Idee kommen davon ein Kopie mit copy/paste anzulegen, sondern
EineKopie = Original
eine Zuweisung formulieren, um eine Kopie anzulegen. Mit einem Range dagegen ist man wohl gerne mit copy/paste dabei, weil mans in der Tabellenarbeit so gelernt hat.
Der Programmierer sollte aber objektorientiert, direkter und schneller per Zuweisung arbeiten

ist ja gut und werde ich mir merken DANKE
cu Micha


  


Betrifft: AW: Macro von: Carsten
Geschrieben am: 11.09.2004 07:13:58

wow - super.

Danke für die schnellen Antworten.

Das Problem ist, daß ich nicht erwähnt hatte, daß sich zwischen den eigentlichen Zeilen auch noch Leerzeilen befinden.

__________Mo|Di|Mi|Do|Fr|Sa|So|
|13.10.2004|__|__|__|__|__|__|__|
|_________|__|__|__|__|__|__|__|
|_________|__|__|__|__|__|__|__|
|20.10.2004|__|__|__|__|__|__|__|

Ist es nicht möglich, dieses Macro in der Zeile durchführen zu lassen, in der ich ein Feld markiert habe (vielleicht sogar das ursprüngliche Datumsfeld) ?

Sorry, ich hätte es gestern besser erklären müssen.


  


Betrifft: AW: Macro von: yps
Geschrieben am: 11.09.2004 11:42:03

hi Carsten,
probier mal:

Sub test2()
Dim zeile As Long
For zeile = 4 To 7 Step 2 'beginn in zeile 4 bis zeile 7 wenn mehr zeilen dann hier ergänzen
'step 2 ist eine leerzeile step 3 sind 2 leerzeilen etc.
Range("E" & zeile) = Range("B" & zeile)
Range("E" & zeile).AutoFill Destination:=Range("E" & zeile & ":K" & zeile)
Range("E" & zeile & ":K" & zeile).NumberFormat = "dd"
Next zeile
End Sub


cu Micha


  


Betrifft: AW: Macro von: Carsten
Geschrieben am: 11.09.2004 21:47:01

Ja, danke.

Das war die Lösung.

Range("E" & zeile & ":K" & zeile).NumberFormat = "dd"
Range("E" & zeile).AutoFill Destination:=Range("E" & zeile & ":K" & zeile)

Habe das Autoformat nur nach vorne gesetzt, denn sonst stand dann in jeder Zelle das selbe Datum.

Nochmal vielen Dank.


  


Betrifft: AW: Macro von: yps
Geschrieben am: 11.09.2004 22:28:58

warum hast du die frage als noch offen gekennzeichnet ?


  


Betrifft: AW: Macro von: Carsten
Geschrieben am: 12.09.2004 08:20:41

Ups, sorry.

Es funzte erst nicht. Ich wollte (schon wieder) nachfragen. Bis ich mir die Sache genauer angeschaut habe (auch mein alter Versuch dazu) und merkte, daß das Autoformat nach eine Zeile nach vorne gesetzt werden muß.

Deshalb war die Frage als noch offen gekennzeichnet.

Nochmal sorry und vieeeeelen Dank.


  


Betrifft: AW: Macro von: PeterW
Geschrieben am: 11.09.2004 12:22:23

Hallo Carsten,

formatiere die Spalten E bis K benutzerdefiniert als tt. Mit folgendem Makro werden dann die Daten der aktiven Zeile in E bis K geschrieben.
Sub GanzeWoche()
   Dim bCount As Byte
   Cells(ActiveCell.Row, 5) = Cells(ActiveCell.Row, 2)
   For bCount = 1 To 6
      Cells(ActiveCell.Row, 5 + bCount) = Cells(ActiveCell.Row, 5) + bCount
   Next
End Sub

Gruß
Peter