Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Spalten in VBA anpassen
10.12.2008 20:45:20
Markus
Hallo zusammen,
eine vermutlich blöde Frage.
Ich lese aus einem Anwendungsfenster Daten in bestimmte Zellen aus. Wenn alle Daten (je nach Anwendung bis zu 30 Spalteneinträge) ausgelesen sind, erfasse ich die Zeit mit ActiveCell.Offset(0, 10).Value = Format(Date & " " & Time)
Wenn ich im nachhinein aber eine Änderung meiner Tabelle vornehme (z.B. ich füge eine weitere Spalte ein), so muss ich manuell in VBA den Code z.B. in ActiveCell.Offset(0, 11).Value = Format(Date & " " & Time)
ändern. Das kann in einem längeren Makro schon ziemlich anstrengend sein, da ich ja alle anderen VBA-Zeilen auch ändern muss (hier ändern sich ja dann auch die Spalten).
Gibt es da eine elegantere Lösung? Bin für jedes Vorschlag dankbar!
Danke im Voraus!
Viele Grüße
Markus

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten in VBA anpassen
10.12.2008 20:52:00
chris
Hallo Markus,
du könntest in deiner Tabelle der oder den Spalten Namen geben und dann im VBA Code die Spalten nicht mit 1 2 oder 3 usw... ansprechen sondern den Namen suchen und daraus dann die Spaltenzahl bekommen.
Verstanden ?
gruß Chris
AW: Spalten in VBA anpassen
10.12.2008 20:58:00
Markus
Das hört sich gut an. Muss ich dann einfach einen Bereichnamen definieren (also die Spalte würde dann z.B. "Zeit" heißen) und dann sähe die Formel so aus?
ActiveCell.Offset(0, Zeit).Value = Format(Date & " " & Time)
Habe ich Dich da richtig verstanden?
AW: Spalten in VBA anpassen
10.12.2008 21:03:05
chris
Hallo das ganze könnte dann so aussehen.

Sub test()
deine_spalte1 = ActiveSheet.Range("spalte1").Column
Cells(1, deine_spalte1).Value = Format(Date & " " & Time)
End Sub


Natürlich kannst du das ganze auch mit offset machen.
Um den Namen "spalte1" zu vergeben einfach die ganze Spalte Markieren und oben links Statt B1
z.b spalte2 eingeben.
Oder unter Einfügen , Namen , definieren
Hoffe es klappt
gruß Chris

Anzeige
AW: Spalten in VBA anpassen
10.12.2008 21:07:40
Markus
Prima, ich probiere es morgen auf der Arbeit direkt aus.
Danke schön!
AW: Spalten in VBA anpassen
11.12.2008 18:59:00
Markus
Hallo,
ich muss noch einmal auf offen stellen, weil es zwar klappt, aber recht merkwürdig.
Ich habe zwei Spalten mit Namen versehen (Zeit und Time).
Wenn ich jetzt das Makro laufen lasse, dann werden die Einträge auch immer in den gleichen Spalten vorgenommen, es läuft also auch, wenn ich eine Spalte löschen oder einfüge.
Und jetzt kommt die Merkwürdigkeit: Der EIntrag erfolgt aber immer eine Spalte früher und ich verstehe nicht warum. Lösen könnte ich das ja mit dem Zusatz (- 1), aber ich würde es halt auch gerne verstehe.
DAnke!

Sub test()
Range("a2").Select
Do Until ActiveCell.Value = ""
i = i + 1
If i = 20 Then
ActiveWorkbook.Save
i = 1
Else
End If
f = ActiveSheet.Range("Zeit").Column
g = ActiveSheet.Range("Time").Column
ActiveCell.Offset(0, f).Value = Format(Date)
ActiveCell.Offset(0, g).Value = Format(Time)
ActiveCell.Offset(1, 0).Select
Loop
End Sub


Anzeige
AW: Spalten in VBA anpassen
11.12.2008 21:49:08
chris
Hallo Markus,
ich sag mal ist doch klar :) ...
Wenn du in der Hilfe von "Offset" nachliest steht dort geschrieben das der offset die Zelle anwählt um die zahl die du eingibst.
In deinem Beispiel steht z.b in
f = ActiveSheet.Range("Zeit").Column
f = 3
g = ActiveSheet.Range("Time").Column
g = 6
also wird auch von der ActiveCell um 3 bzw. 6 nach rechts verschoben.
Befindest du Dich also in Zelle Range("a2")
wird beim verschieben um 3 stellen (f = 3) nach rechts Nicht die Spalte(Column) C aktiviert sondern D da Spalte A + 3 = Spalte D
Hoffe du hast es verstanden.
gruß Chris
Anzeige
AW: Spalten in VBA anpassen
12.12.2008 20:23:00
Markus
Hallo,
irgendwie stehe ich aber auf dem Schlauch. Ich der Spalte ja gar keine Zahl vorgegeben, sondern nur wie oben das Makro.
Nehme ich Deinen Vorschlag mit

Sub test()
Dim Mldg, Titel, Voreinstellung, Wert1
Mldg = "Zeile angeben wo das Makro anfangen soll"    ' Aufforderung festlegen.
Titel = "Zeilenanfang"    ' Titel festlegen.
Voreinstellung = "2"    ' Voreinstellung festlegen.
'Meldung, Titel und Standardwert anzeigen.
Wert1 = InputBox(Mldg, Titel, Voreinstellung)
Range("a2").Select
Do Until ActiveCell.Value = ""
i = i + 1
If i = 20 Then
ActiveWorkbook.Save
i = 1
Else
End If
deine_spalte1 = ActiveSheet.Range("zeit").Column
deine_spalte2 = ActiveSheet.Range("time").Column
Cells(i, deine_spalte1).Value = Format(Time)
Cells(i, deine_spalte2).Value = Format(Date)
ActiveCell.Offset(1, 0).Select
Loop
End Sub


dann trägt er mir das in der betreffenden Spalte (z.B. Time) in die erste Zeile. Das will ich aber auch nicht, da ich ja unter Umständen das Makro ja in einer anderen Zeile beginnen lassen will (daher auch die Inputbox).
Ich habe mal eine einfache Tabelle hochgeladen.

Die Datei https://www.herber.de/bbs/user/57590.xls wurde aus Datenschutzgründen gelöscht

Die Spalte F trägt den Namen Zeit und die Spalte G den Namen Time. Und jetzt soll ab Zeile 2 bis 6 in jede Zeile DAte und Time geschrieben werden.
Wie kann ich jetzt mit ActiveCell.Offset die gewünchte Spalte (Zeit oder Time) ansprechen?
Sorry, dass ich mich zu doof anstelle.
Vielen Dank für die Hilfe!
Viele Grüße
Markus
Anzeige
erledigt
13.12.2008 19:59:42
Markus
.

318 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige