Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro Zellinhalt dynmisch überschreiben

Forumthread: Makro Zellinhalt dynmisch überschreiben

Makro Zellinhalt dynmisch überschreiben
22.05.2014 14:55:37
Nitram
Hi Spezialisten,
bin etwas unbeleckt was VBA angeht und hoffe auf eure Hilfe.
Hatte heute morgen hier das Thema:
MAKRO Drehfelder "aktueller Wert" Nullen erstellt.
Da es noch keine Antwort gibt und ich seit Tagen schon das Internet durchforste, kam mir vorhin eine kleine, aber doch gewinnversprechende Idee.
Ich möchte in meinem Sheet "Zubehör" von Zelle H4 bis H...(Ende der formatierten Tabelle, sollte dynamisch sein, falls die Tabelle sich weiter füllt) den aktuellen Inhalt dieser Zellen (der Inhalt stammt aus der Zellverknüpfung von Formularsteuerelementen Drehfeld im Sheet "Auswahl" mit einer einfachen 0 überschreiben.
Dadurch wird in dem Drehfeldern der interne, "aktuelle Wert" auch auf Null gesetzt.
Das ist quasi der Rückwärtsweg.
Wenn das von Zubehör!H4 bis Zubehör!H...Tabellenende funktioniert, möchte ich dieses Makro (Überschreiben mit Null) mit einem Button auf dem Sheet "Auswahl" verknüpfen um dadurch dann alle Drehfelder intern auf den Wert Null zu setzen.
Mein sicherlich mikriger Quellcode sieht bisher folgendermaßen aus:
Sub Ueberschreibe_Zellinhalt_H4bisH207()
'Kommentar
Dim intI As Integer
For intI = 1 To 207
Range("H4").Value = 0
Next
End Sub
H4 wird auch genullt, mehr aber auch nicht.
Bitte um Hilfe ;-)

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Makro Zellinhalt dynmisch überschreiben
22.05.2014 15:07:37
kimbo
Hallo Nitram,
in dem Makro hast du ja auch nur H4 zum nullen angegeben.
Sub Ueberschreibe_Zellinhalt_H4bisH207()
lstrow = Sheets("Zubehör").Cells(Rows.Count, 8).End(xlUp).Offset(0, 0).Row
'Kommentar
Dim intI As Integer
For intI = 1 To 207
For n = 4 to lstrow
Cells(n,8).Value = 0
Next n
Next
End Sub
Gruß
kimbo

Anzeige
AW: Makro Zellinhalt dynmisch überschreiben
22.05.2014 15:10:38
Pepi
Hallo ?
meinst Du so was?
Sub Ueberschreibe_Zellinhalt_H4bisH207()
'Kommentar
iZeiAnz = UsedRange.Row
For intI = 1 To iZeiAnz
Range("H" & cstr(intI)).Value = 0
Next
End Sub

gruss Pepi

AW: Makro Zellinhalt dynmisch überschreiben
22.05.2014 15:20:55
Nitram
Hey danke erstmal, Pepi deine Variante bringe mir Laufzeitfehler 424 Objekt erwartet. Hatte bei dir noch
Dim intI as Integer eingefügt, aber brachte keine Abhilfe

Anzeige
AW: Makro Zellinhalt dynmisch überschreiben
22.05.2014 15:30:29
Nitram
Kimbo deine Variante funktioniert soweit ich das einschätzen kann.
Würdest du so freundlich sein und mir erklären,was die Zeile
lstrow = Sheets("Zubehör").Cells(Rows.Count, 8).End(xlUp).Offset(0, 0).Row
im einzelnen macht?
Und wenn bei dir:
For n = 4 to lstrow
Cells(n,8).Value = 0
Next n

steht, heißt dann Cells(n,8) das n die Zählvariable der zweiten Schleife ist und die 8? Was macht die 8.
Ich möchte das wissen, weil ich in VBA besser werden will.
Vielen Dank erstmal an euch beide für die Mühe

Anzeige
AW: Makro Zellinhalt dynmisch überschreiben
22.05.2014 15:42:13
kimbo

lstrow = Sheets("Zubehör").Cells(Rows.Count, 8).End(xlUp).Offset(0, 0).Row

Sheets("Zubehör") - sagt aus welches Tabellenblatt gemeint ist
Cells(Rows.Count,8) - gibt eine Zelle an, wobei der erste Wert die Zeile (als Nummer) und die Spalte (ebenfalls als Nummer!) darstellt. // Rows.Count zählt die Zeilen
End(x1Up) - sagt ".End" weisst EXCEL an, dass es dort beginnen soll zu zählen xlUp gibt die Richtung an
Offset(Zeile,Spalte) - mit Offset kannst du von der gefunden letzten Zeile, wenn man z.B. Offset(1,0) schreibt, eine Zeile nach unten gehen. also das man quasi die letzte benutze Zeile sucht und dann noch eine runter geht.
Wegen der Schleife:
Ja, eine Schleife kannst du gut dazu gebrauchen um ganze Reihen oder Spalten zu füllen.
For n = 4 to lstrow
Er Soll in Zeile 4 anfangen und bis zur "lstrow" letzten Zeile laufen.
Cells(n,8).Value = 0
Cells ist wie oben beschrieben - Cells(Zeile,Spalte) , hierbei ist die Spalte 8 = H... lässt sich ja im Alphabet durchzählen ;)
Hoffe das war einigermaßen verständlich, falls nicht ruhig fragen, dann versuch ich es nochmal anders.
Gruß
kimbo

Anzeige
AW: Makro Zellinhalt dynmisch überschreiben
22.05.2014 15:50:15
Nitram
das ist top erklärt.
Danke dir vielmals!

Nein ist es mitnichten...
22.05.2014 16:04:18
EtoPHG
Nitram,
@Kimbo:
1. Offset(0,0) ist ein so nötig wie ein Kropf!
2. Glaubst du wirklich, dass 207 x den gleichen Bereich zu "nullen", mehr bringt als nur 1 mal
3. Jede Zelle einzeln anzusprechen ist bedeutend langsamer, als einen ganzen Bereich auf einmal. Dazu brauchts also auch keine Schleife....
Also Vorschlag:
Option Explicit
Sub SpalteH_Nullen()
With ThisWorkbook.Worksheets("Zubehör")
.Range(.Cells(4, 8), .Cells(.Rows.Count, 8).End(xlUp)) = 0
End With
End Sub
Gruess Hansueli

Anzeige
AW: Nein ist es mitnichten...
22.05.2014 16:18:31
Nitram
Hi Hansueli, ich habe deine Variante jetzt mal probiert und was soll ich sagen. Geht deutlich schneller.
Danke an euch, echt toll hir Hilfe zu bekommen.
Anzeige
Anzeige

Infobox / Tutorial

Makro zum dynamischen Überschreiben von Zellinhalten in Excel


Schritt-für-Schritt-Anleitung

Um den Zellinhalt in Excel dynamisch zu überschreiben, kannst du ein einfaches VBA-Makro verwenden. Folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Wähle in der linken Seitenleiste dein Arbeitsblatt aus, z.B. "Zubehör".

  3. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject (dein Arbeitsblattname)" klickst und "Modul einfügen" wählst.

  4. Kopiere und füge den folgenden Code in das Modul ein:

    Sub Ueberschreibe_Zellinhalt()
       Dim lstrow As Long
       lstrow = Sheets("Zubehör").Cells(Rows.Count, 8).End(xlUp).Row
       Sheets("Zubehör").Range("H4:H" & lstrow).Value = 0
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Du kannst das Makro jetzt ausführen, um alle Zellen in der Spalte H von Zeile 4 bis zur letzten befüllten Zeile auf 0 zu setzen.


Häufige Fehler und Lösungen

1. Laufzeitfehler 424 - Objekt erwartet

  • Überprüfe, ob du alle notwendigen Variablen deklariert hast. Füge Dim intI As Integer zu deinem Code hinzu.

2. Makro funktioniert nicht wie erwartet

  • Stelle sicher, dass der Blattname genau übereinstimmt und dass du das richtige Arbeitsblatt bearbeitest.

Alternative Methoden

Es gibt mehrere Möglichkeiten, die gleichen Ergebnisse zu erzielen. Eine effizientere Methode könnte sein, den gesamten Zellbereich auf einmal zu überschreiben, anstatt jede Zelle einzeln zu adressieren:

Sub SpalteH_Nullen()
    With ThisWorkbook.Worksheets("Zubehör")
        .Range(.Cells(4, 8), .Cells(.Rows.Count, 8).End(xlUp)) = 0
    End With
End Sub

Diese Methode ist schneller und einfacher, da sie keine Schleifen benötigt.


Praktische Beispiele

Wenn du die Zellen in H4 bis zur letzten gefüllten Zelle auf 0 setzen möchtest, kannst du einfach das folgende Makro verwenden:

Sub Ueberschreibe_Zellen()
    Dim lstrow As Long
    lstrow = Sheets("Zubehör").Cells(Rows.Count, 8).End(xlUp).Row
    Sheets("Zubehör").Range("H4:H" & lstrow).Value = 0
End Sub

Führe dieses Skript aus, und alle Zellen in der Spalte H werden auf 0 gesetzt.


Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Nutze With-Anweisungen, um den Code lesbarer und effizienter zu gestalten.
  • Teste dein Makro in einer Kopie deiner Arbeitsmappe, um unerwünschte Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich das Makro per Button ausführen?

  • Füge einen Button über die Entwicklertools hinzu und weise das Makro zu, um es mit einem Klick auszuführen.

2. Kann ich das Makro für andere Spalten verwenden?

  • Ja, ändere einfach die Spaltennummer im Code (z.B. Cells(n, 8) für Spalte H) zu der gewünschten Spalte.

3. Was passiert, wenn ich das Makro mehrmals ausführe?

  • Alle Zellen im angegebenen Bereich werden jedes Mal auf 0 gesetzt. Dies kann nützlich sein, wenn du die Werte zurücksetzen möchtest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige