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

Forumthread: Makro Zellbezug

Makro Zellbezug
30.06.2007 14:08:00
Thomas
Hallo zusammen,
ich hoffe ihr könnt mir bei meinem Problem helfen.
Folgendes:
Wenn man in Visual Basic ein Makro schreibt, legt man ja die Zellen, auf welches es
bezogen ist, fest. Aber wenn ich nun in Excel oberhalb des Bezuges Zellen hinzufüge
dann stimmt ja die Zelladressierung meines Makros nicht mehr. Gibt es da die mögl.
dies zu berücksichtigen?
Und noch was. Worin liegt in Visual Basic der Unterschied zwischen "DieseArbeitsmappe",
"Tabellenblatt" und "Modul" ?

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Zellbezug
30.06.2007 14:30:00
chris
Also zu 1 kann ich dir helfen.
Du könntest zum beispiel der zelle in dem Exceltabellenblatt einen Namen geben.
Dazu markierst du den zellbereich ... B3:c4 und dann trägst du in das feld links über Zelle A1 einen namen ein zum beispiel mein_breich
und dann kannst du VIA VBA auf den bereich zugreifen mit
Range("mein_breich")
hoffe das Hilft dir
lasse aber die frage noch offen.

Anzeige
AW: Makro Zellbezug
30.06.2007 14:40:00
Chris
Servus,
zu 2.:
Grundsätzlich können überall Makros stehen.
In Modulen stehen zumeist Functions und Makros, die sich darauf beziehen.
In DieseArbeitsmappe kommen i.d.R. solche Dinge wie Workbook_Open, Workbook_BeforeClose, die sich auf die gesamte Arbeitsmappe beziehen.
Und in den Tabellenmodulen stehen normalerweise die Makros, die sich auf die Tabelle beziehen, muss aber nicht, hängt von deiner Programmierweise ab.
Range("xy") geht nur im Tabellenmodul, Sheets("xy").Range("xy") dagegen auch in anderen
zu 1. das geht natürlich bedingt auch, aber dann muss dein Makro so aufgebaut sein, dass die bezüge variabel gestaltet werden können, als Integer oder sonstige deklarierte Variablen
z.B.:

Sub variable()
Dim i As Integer
For i = 2 To 100 Step 1
Cells(i, 1).Value = "X"
Next i
End Sub


kannst du auch so schreiben (nur ein Beispiel)


Sub variable1()
Dim i As Integer, a as Integer, b As Integer
a = InputBox("Anfangswert")
b = InputBox("Endwert")
For i = a To b  Step 1
Cells(i, 1).Value = "X"
Next i
End Sub


wenn du jetzt über Zeile B eine Spalte einfügst würde Makro 1 die jetzige Zeile 101 = früher 100 nicht berücksichtigen. Beim 2. Makro kannst du jetzt 3 bis 101 eingeben und es geht für den gleichen Bereich wieder.
Ist aber natürlich sehr umständlich.
Gruß
Chris

Anzeige
AW: Makro Zellbezug
30.06.2007 14:42:00
Peter
Hallo Thomas,
zu Punkt 1
bei Formeln wird der Bezug beim Einfügen von Zeilen (Einfügen, Zeilen) automatisch fortgeschrieben.
In einem Makro musst du das schon selber hochsetzen, es sei denn, du hast eine kleine Routine im Coding, die eine bestimmet Zelle sucht und dann mit der Zeile beginnt.
Zu Punkt 2
DieseArbeitsmappe kann Makros enthalten, die beim Open, Close, Print, Activate der Mappe aktiv werden.
Rechtsklick auf DieseArbeitsmappe, dann im großen Fenster oben im linken DropDown Worksheet auswählen und im rechten DropDown die möglichen Ereignisse ansehen.
Ein Tabellenblatt kann ebenfalls Makros enthalten, die sich dann auf das Blatt beziehen und beim Ändern einer Zelle oder beim Aktivieren des Blattes usw. wirksam werden.
Rechtsklick auf den Tabellenblattreiter - Code anzeigen (Linksklick drauf) dann im großen Fenster oben im linken DropDown Worksheet auswählen und im rechten DropDown die möglichen Ereignisse ansehen.
In einem Modul kannst du Makos unterbringen, die allgemein tätig werden und meist über einen CommandButton aufgerufen werden.
Gruß Peter

Anzeige
AW: Makro Zellbezug
30.06.2007 17:38:09
Thomas
Vielen Dank an euch,
das ihr mir weiter geholfen habt.
Thomas
;
Anzeige
Anzeige

Infobox / Tutorial

Makro Zellbezug: Praktische Anleitungen und Tipps


Schritt-für-Schritt-Anleitung

  1. Zellen benennen: Du kannst Zellen in Excel einen Namen geben, um die Zellbezüge in deinem Makro zu vereinfachen. Markiere den gewünschten Zellbereich (z.B. B3:C4) und trage im Namensfeld links über Zelle A1 einen Namen wie mein_bereich ein.

  2. Zugriff auf den benannten Bereich: Verwende in deinem VBA-Makro den Befehl Range("mein_bereich"), um auf diesen Zellbereich zuzugreifen.

  3. Variablen für Zellbezüge nutzen: Wenn du sicherstellen möchtest, dass dein Makro auch nach dem Einfügen von Zeilen funktioniert, solltest du Variablen verwenden. Beispiel:

    Sub variable()
       Dim i As Integer
       For i = 2 To 100 Step 1
           Cells(i, 1).Value = "X"
       Next i
    End Sub
  4. Eingabewerte verwenden: Du kannst Benutzereingaben in dein Makro integrieren, um die Flexibilität zu erhöhen:

    Sub variable1()
       Dim i As Integer, a As Integer, b As Integer
       a = InputBox("Anfangswert")
       b = InputBox("Endwert")
       For i = a To b Step 1
           Cells(i, 1).Value = "X"
       Next i
    End Sub

Häufige Fehler und Lösungen

  • Problem: Zellbezüge stimmen nicht mehr nach dem Einfügen von Zeilen.

    • Lösung: Verwende benannte Bereiche oder passe dein Makro so an, dass es Variablen für die Zellbezüge nutzt.
  • Problem: Fehler beim Zugriff auf die Arbeitsmappenobjekte.

    • Lösung: Stelle sicher, dass du die richtigen Objekte in deinem Makro verwendest (z.B. ThisWorkbook, Worksheets, Sheets).

Alternative Methoden

  • Verwendung von Formeln: Formeln in Excel passen sich automatisch an, wenn du Zeilen oder Spalten einfügst. Wenn du beispielsweise =B1+C1 in einer Zelle hast und eine Zeile darüber einfügst, wird die Formel automatisch zu =B2+C2.

  • Ereignisgesteuertes Programmieren: Du kannst auch Makros erstellen, die auf bestimmte Ereignisse reagieren, wie das Öffnen oder Schließen einer Arbeitsmappe. Beispiel:

    Private Sub Workbook_Open()
      MsgBox "Willkommen in der Arbeitsmappe!"
    End Sub

Praktische Beispiele

  • Makro zur Automatisierung: Ein einfaches Beispiel könnte ein Makro sein, das alle Zellen in einer bestimmten Spalte mit "X" füllt:

    Sub FillColumn()
      Dim i As Integer
      For i = 1 To 100
          Cells(i, 1).Value = "X"
      Next i
    End Sub
  • Zellen basierend auf Bedingungen formatieren: Wenn du Zellen basierend auf einem bestimmten Kriterium formatieren möchtest, könntest du Folgendes verwenden:

    Sub FormatCells()
      Dim i As Integer
      For i = 1 To 100
          If Cells(i, 1).Value = "X" Then
              Cells(i, 1).Interior.Color = RGB(255, 0, 0) ' Rot
          End If
      Next i
    End Sub

Tipps für Profis

  • Verwende Debugging-Tools: Nutze die Debugging-Tools in VBA, um Fehler schnell zu identifizieren und zu beheben.

  • Modularisiere deinen Code: Teile dein Makro in kleinere, wiederverwendbare Subroutinen auf, um die Übersichtlichkeit zu erhöhen.

  • Dokumentiere deinen Code: Füge Kommentare hinzu, um die Funktionsweise deines Makros zu erklären, besonders wenn es komplex ist.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass mein Makro nach dem Einfügen von Zeilen noch funktioniert? Verwende benannte Bereiche oder programmiere dein Makro mit variablen Zellbezügen.

2. Was ist der Unterschied zwischen "DieseArbeitsmappe", "Tabellenblatt" und "Modul"? "DieseArbeitsmappe" enthält Makros, die für die gesamte Arbeitsmappe gelten, während "Tabellenblatt" spezifische Makros für ein einzelnes Blatt enthält. In Modulen sind allgemeinere Makros abgelegt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige