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

VBA Target Cell

Forumthread: VBA Target Cell

VBA Target Cell
13.10.2003 23:46:32
Ernst Dunkel
Guten Abend

Mit dem untenstehenden Code starte ich das Makro aus einer beliebigen Zelle zwischen B11 bis B19 sowie i11 bis i19.
Es fügt in die Zelle F11 und C11 Werte ein.

Änderung:
Wird eine Zelle B angeklickt, so sollen die Werte in F und C der angeklickten Zelle der Zeile eingefügt werden. (Klick in B11 Werte in F11 und C11 einsetzen, usw.)
Wird eine Zelle i angeklickt, so sollen die Werte in M und J der angeklickten Zelle der Zeile eingefügt werden. (Klick in i19 werte in M19 und J19 einsetzen, usw.)

Wie müsste der untenstehende Code abgeändert werden?

mfg
Ernst Dunkel



Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If (Target.Column = 2 Or Target.Column = 9) And Target.Row > 10 And Target.Row < 19 Then
Application.ScreenUpdating = False
Sheets("U-Werte").Range("F11").Select
ActiveCell.FormulaR1C1 = "=IF(ISNUMBER(RC[-1]),RC[-1]/RC[-2]/1000,0)"
Range("C11").Select
Sheets("Baustoffe").Visible = True
Sheets("Baustoffe").Activate
Selection.AutoFilter
Sheets("Baustoffe").ScrollArea = "c4:c112"
End If
Application.ScreenUpdating = True
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Target Cell
13.10.2003 23:55:16
PeterW
Hallo Ernst,

mit dem Select-Befehl löst du das Worksheet_SelectionChange-Ereignis erneut aus. Ich verstehe noch nicht, welche Werte in F und C bzw. M und J eingetragen werden sollen. Werte in Zeile 19 werden nicht mehr berücksichtigt weil die Bedingung Target.Row < 19 nicht erfüllt wird.

Gruß
Peter
Anzeige
AW: VBA Target Cell
14.10.2003 00:11:05
Ernst Dunkel
Hallo Peter

Auszug aus dem Code:
'Wird B11 angeklickt sowird die Formel in F11 eingesetzt, dann springt das Programm in die Baustoff-Tabelle, dort wird ein Wert gesucht und mittels einer OK-Taste zurück in die U-Wert-Tabelle gewechselt und trägt den Wert in C11 ein. Das funktioniert soweit aber eben nur für F11 und nicht für einen anderen Bereich zwischen F11 und F19 sowie B11 bis B19.

Sheets("U-Werte").Range("F11").Select ActiveCell.FormulaR1C1 = "=IF(ISNUMBER(RC[-1]),RC[-1]/RC[-2]/1000,0)"

Gruss ernst
Anzeige
AW: VBA Target Cell
14.10.2003 00:28:28
PeterW
Hallo Ernst,

im Moment trägst du eine Formel in F11 ein und keinen Wert und ich kann im Code auch nichts finden, was nach einer Suche aussieht.

Ich vermute, dass dein eingeschlagener Lösungsweg nicht der optimale ist. Eine Beispielmappe (mit dem kompletten Code!) dürfte das Problem deutlicher darstellen. Und wenn du in der Mappe dann die Aufgabenstellung noch einmal genau darstellst wird sich bestimmt eine Lösung finden lassen.

Gruß
Peter
Anzeige
AW: VBA Target Cell
14.10.2003 08:08:08
Ernst Dunkel
Guten Morgen Peter

Ist es möglich, dass ich Dir die Datei maile?
Wenn ja, könntest Du mir Deine e-Adresse angeben?

Gruss Ernst Dunkel
AW: VBA Target Cell
14.10.2003 12:03:58
PeterW
Hallo Ernst,

mail sie an peter.wunderlich@gmx.net (komme aber erst heute Abend dazu, mir das Problem genauer anzusehen).

Gruß
Peter
Anzeige
fürs Archiv
15.10.2003 00:07:24
PeterW
Mit dem geposteten Code des Blattes (U-Werte) soll das Arbeitsblatt Baustoffe eingeblendet werden, aus dem ein Datensatz ausgewählt wird, der dann in das Blatt U-Werte mittels einer Schaltfläche geschrieben wird.
Lösungsansatz mit dem vorhandenen Code:
Public Variable in die Target.Row geschrieben wird in einem Standardmodul dimensionieren. Mit dieser Variablen dann aus dem Code der Schaltfläche direkt in U-Werte schreiben.
Code in U-Werte:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Column = 2 Or Target.Column = 9 Then
'hier weitere Bedingungen für den auszuwertenden Zeilenbereich
lgRow = Target.Row
intCol = Target.Column
Cells(lgRow, intCol + 4).FormulaR1C1 = "=IF(ISNUMBER(RC[-1]),RC[-1]/RC[-2]/1000,0)"
Sheets("Baustoffe").Visible = True
Sheets("Baustoffe").Activate
End Sub

Und der Code zum Schreiben des Datensatzes per Schaltfläche:
Sub BaustoffeEin()
If Selection.Cells.Count > 1 Then ActiveCell.Select
With Sheets("U-Werte")
.Cells(lgRow, intCol + 1) = ActiveCell.Value
.Cells(lgRow, intCol + 2) = ActiveCell.Offset(0, 1).Value
.Cells(lgRow, intCol + 3) = ActiveCell.Offset(0, 2).Value
.Activate
End With
End Sub

Anzeige
;
Anzeige

Infobox / Tutorial

VBA Target Cell für dynamische Datenanpassungen


Schritt-für-Schritt-Anleitung

Um eine Zelle in Excel mit VBA dynamisch basierend auf der Auswahl eines Zielbereichs zu aktualisieren, kannst du den folgenden VBA-Code verwenden. Dieser Code reagiert auf die Auswahl von Zellen in den Spalten B und I und aktualisiert die entsprechenden Zellen in den Spalten F, C, M und J:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    If (Target.Column = 2 Or Target.Column = 9) And Target.Row > 10 And Target.Row < 19 Then
        Application.ScreenUpdating = False
        Dim lgRow As Long
        lgRow = Target.Row

        If Target.Column = 2 Then
            Cells(lgRow, 6).FormulaR1C1 = "=IF(ISNUMBER(RC[-1]),RC[-1]/RC[-2]/1000,0)"
            ' Werte in C und F aktualisieren
        ElseIf Target.Column = 9 Then
            Cells(lgRow, 13).FormulaR1C1 = "=IF(ISNUMBER(RC[-1]),RC[-1]/RC[-2]/1000,0)"
            ' Werte in J und M aktualisieren
        End If

        Sheets("Baustoffe").Visible = True
        Sheets("Baustoffe").Activate
    End If
    Application.ScreenUpdating = True
End Sub

Dieser Code verwendet die Target-Eigenschaft, um auf die Zelle zuzugreifen, die der Benutzer ausgewählt hat. Abhängig von der Spalte wird die Formel in die korrekte Zelle eingefügt.


Häufige Fehler und Lösungen

  1. Fehler: Code wird nicht ausgeführt

    • Lösung: Überprüfe, ob das Arbeitsblatt korrekt aktiviert ist und ob Makros in der Datei aktiviert sind. Achte darauf, dass der Code im richtigen Arbeitsblattmodul platziert ist.
  2. Fehler: Formel wird nicht korrekt übernommen

    • Lösung: Stelle sicher, dass du die FormulaR1C1-Eigenschaft korrekt verwendest. Überprüfe die verwendeten Zellreferenzen und passe sie an die Zielzelle an.
  3. Fehler: Sichtbarkeit von Tabellen

    • Lösung: Wenn die Tabelle "Baustoffe" nicht sichtbar ist, wird sie mit Sheets("Baustoffe").Visible = True sichtbar gemacht. Achte darauf, dass der Tabellennamen exakt übereinstimmt.

Alternative Methoden

Eine alternative Methode zur Verarbeitung von Zielzellen könnte die Verwendung von Target.Cells beinhalten, um mehrere Zellen gleichzeitig zu bearbeiten. Hier ein Beispiel:

If Not Intersect(Target, Me.Range("B11:B19, I11:I19")) Is Nothing Then
    For Each cell In Target.Cells
        ' Bearbeitungscode hier
    Next cell
End If

Diese Technik ermöglicht es, mehrere Zellen in einem Schritt zu verarbeiten, was den Code effizienter macht.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du den Code anpassen kannst, um Werte aus einer anderen Tabelle zu ziehen und diese in die Zielzellen einzufügen:

Sub BaustoffeEin()
   Dim lgRow As Long
   Dim intCol As Long
   If Selection.Cells.Count > 1 Then ActiveCell.Select
   With Sheets("U-Werte")
       .Cells(lgRow, intCol + 1) = ActiveCell.Value
       .Cells(lgRow, intCol + 2) = ActiveCell.Offset(0, 1).Value
       .Cells(lgRow, intCol + 3) = ActiveCell.Offset(0, 2).Value
       .Activate
   End With
End Sub

Dieser Code fügt Werte aus der Auswahl in die U-Werte-Tabelle ein.


Tipps für Profis

  • Nutze Application.EnableEvents = False, um unnötige Ereignisse zu vermeiden, wenn du mehrfache Änderungen in einem Makro vornimmst.
  • Achte darauf, die Target.Row und Target.Column nur für die relevanten Zellen zu verwenden, um die Performance zu verbessern.
  • Verwende das Debug.Print-Statement, um die Werte von Target während der Ausführung zu überprüfen und Fehler leichter zu identifizieren.

FAQ: Häufige Fragen

1. Wie kann ich den Code für andere Spalten anpassen?
Du kannst die Spaltennummern in den Bedingungen anpassen, um den Code für andere Spalten zu verwenden.

2. Was ist der Unterschied zwischen Target und ActiveCell?
Target bezieht sich auf die Zelle oder den Zellbereich, den der Benutzer ausgewählt hat, während ActiveCell immer die aktuell aktive Zelle ist.

3. Wie kann ich sicherstellen, dass der Code nur für einen bestimmten Zellbereich funktioniert?
Verwende die Intersect-Methode, um sicherzustellen, dass der Code nur für die gewünschten Zellen ausgeführt wird.

4. Gibt es eine Möglichkeit, mehrere Zellen gleichzeitig zu verarbeiten?
Ja, du kannst eine Schleife verwenden, um über Target.Cells zu iterieren und mehrere Zellen in einem Durchgang zu bearbeiten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige