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

Forumthread: Set Bereich ist Workbook-Worksheet-Range.Value

Set Bereich ist Workbook-Worksheet-Range.Value
17.01.2017 12:58:52
Nilo
Moin alle zusammen,
kann mir bitte einer kurz licht machen!?
Set Bereich funzt so nicht.
Wenn ich .Value rausnehme läuft er durch aber ohne Ergebnis!?
Die einfachen Dinge...!
Sub Schaltfläche6_Klicken()
Dim Wert As Long
Dim Zelle As Range
Dim Bereich As Range
Set Bereich = Workbooks("Daten.xlsm").Worksheets("AllIn").Range("A:A").Value
With Sheets("Kalk")
Wert = .Range("A2").Value
For Each Zelle In Bereich
If Zelle.Value = Wert Then
.Range("A2").Interior.ColorIndex = 5
End If
Next Zelle
End With
End Sub
Besten Dank
Nilo
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Set Bereich ist Workbook-Worksheet-Range.Value
17.01.2017 13:16:40
ChrisL
Hi Nilo
.Value muss sowieso weg, weil du weist einen Bereich und keine Werte zu.
Sub t()
Dim Bereich As Range
Set Bereich = Workbooks("Daten.xlsm").Worksheets("AllIn").Range("A:A")
With Sheets("Kalk")
If WorksheetFunction.CountIf(Bereich, .Range("A2")) > 0 Then _
.Range("A2").Interior.ColorIndex = 5
End With
End Sub
cu
Chris
Anzeige
.Value rausnehmen
17.01.2017 13:19:22
KlausF
Hallo Nilo,
Set Bereich definiert eine Range aber keinen Value-Wert.
Deshalb:
Set Bereich = Workbooks("Daten.xlsm").Worksheets("AllIn").Range("A:A")
Gruß
Klaus
AW: Set Bereich ist Workbook-Worksheet-Range.Value
17.01.2017 13:22:34
UweD
Hallo
du definierst einen Bereich und möchtest einen Wert zuweisen.
Hab noch was verändert und kommentiert...
Sub Schaltfläche6_Klicken()
    Dim Wert As Long
    Dim Zelle As Range
    Dim Bereich As Range
    
    Set Bereich = Workbooks("Daten.xlsm").Worksheets("AllIn").Range("A:A")
    
    With Sheets("Kalk")
        Wert = .Range("A2").Value
        For Each Zelle In Bereich.SpecialCells(xlCellTypeConstants, 3) ' nur Zellen mit Inhalt 
            MsgBox Zelle
            If Zelle.Value = Wert Then
             '.Range("A2").Interior.ColorIndex = 5' du färbst ja immer wieder die gleiche Zelle 
             Zelle.Interior.ColorIndex = 5
            End If
        Next Zelle
    End With

End Sub

LG UweD
Anzeige
AW: Set Bereich ist Workbook-Worksheet-Range.Value
17.01.2017 13:23:58
EtoPHG
Hallo Nilo,
Set Bereich muss ohne .Value sein, schliesslich handelt es sich um eine Range!
Das Ergebnis können wir mangels Beispielmappe nicht kontrollieren. Fallstrick könnte sein:
Wert ist als Long definiert, d.h. hier hat nur eine Ganzzahl Platz.
Die Zelle.Value enthält aber per Default einen Double Wert, d.h. eine Gleitkommazahl!
Ich würde mal Wert als Double dimensionieren.
Gruess Hansueli
Anzeige
AW: Set Bereich ist Workbook-Worksheet-Range.Value
17.01.2017 13:59:51
Nilo
Hi alle,
also ich kapier es nicht!?
Hier mal Beispielmappen!
https://www.herber.de/bbs/user/110645.zip
Keine der Codes funzt oder mach was er soll!
Danke nochmal fürs drüberschauen.
Gruß
Nilo
ich krieg es nicht so hin wie es soll...
17.01.2017 14:36:39
Nilo
Nochmal kurz erklärt was es tun soll:
Wenn eine Zahl in Daten gefunden dann die Zahl in Test farbig markieren.
Eigentlich simpel, ich weiß auch nicht woran es wieder hapert!
https://www.herber.de/bbs/user/110645.zip
Danke für Euren Support.
Gruß Nilo
Anzeige
AW: ich krieg es nicht so hin wie es soll...
17.01.2017 16:28:03
UweD
Hallo nochmal
falscher Ansatz.
Du müsstest ja mit 2 Schleifen jede Zelle aus der einen Tabelle mir jeder Zelle der anderen Tabelle vergleichen.
Das geht mit Zählenwenn() besser.
Sub Test1()
    Dim Zelle As Range
    Dim BereichA As Range, BereichB As Range
    
    Set BereichA = ThisWorkbook.Worksheets("Kalk").Range("A:A")
    Set BereichB = Workbooks("Daten.xlsm").Worksheets("AllIn").Range("A:A")
    'reset 
    BereichA.Cells.Interior.ColorIndex = xlNone
    
    For Each Zelle In BereichA.SpecialCells(xlCellTypeConstants, 3) ' nur Zellen mit Inhalt 
        If WorksheetFunction.CountIf(BereichB, Zelle.Value) > 0 Then
            Zelle.Interior.ColorIndex = 8
        End If
    Next Zelle
End Sub
LG UweD
Anzeige
AW: ich krieg es nicht so hin wie es soll...
17.01.2017 16:44:06
Gunter
Hallo Zusammen
Ich hab das mit Uwes Code mal ausprobiert und das funzt auch.
Muss da aber nicht noch am Anfang definiert sein, wo sich die Datei "Daten" befindet? Da gab es bei Nilos Beispiel Datei nämlich eine Fehlermeldung.
Etwas in der Art wie:
pfad = "F:\Excel\Beispiele"
datei = "Daten.xlsm"
blatt = "AllIn"
Set BereichB = Range("A:A")
Set BereichA = ThisWorkbook.Worksheets("Kalk").Range("A:A")
Gruss
Gunter
Anzeige
AW: ich krieg es nicht so hin wie es soll...
17.01.2017 16:49:29
UweD
Ich bin davon ausgegangen dass beide Dateien geöffnet sind
Lg UweD
Vielen lieben Dank an alle! Funzt super! Gruß...
18.01.2017 09:57:56
Nilo
Hallo zusammen,
vielen Dank für Eure Hilfe.
Läuft super und erspart mir einiges an Frust :)
Beste Grüße
Nilo
gern geschehen owT
18.01.2017 10:14:06
UweD
Anzeige
AW: ich krieg es nicht so hin wie es soll...
19.01.2017 13:00:37
UweD
Ich bin davon ausgegangen dass beide Dateien geöffnet sind
Lg UweD
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Setzen von Bereichen in Excel VBA: Workbook, Worksheet und Range


Schritt-für-Schritt-Anleitung

Um in Excel VBA einen Bereich von Zellen in einem Workbook und Worksheet korrekt zu setzen, befolge diese Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (drücke ALT + F11).

  2. Füge ein neues Modul hinzu: Rechtsklicke auf dein Projekt und wähle "Einfügen" > "Modul".

  3. Definiere Variablen für dein Workbook, Worksheet und den Range. Zum Beispiel:

    Sub Beispiel()
       Dim wb As Workbook
       Dim ws As Worksheet
       Dim rng As Range
  4. Setze das Workbook und Worksheet:

    Set wb = Workbooks("Daten.xlsm")
    Set ws = wb.Worksheets("AllIn")
  5. Definiere den Bereich:

    Set rng = ws.Range("A:A")
  6. Verwende den Range nach Bedarf, z.B. um Werte zu lesen oder zu verändern.


Häufige Fehler und Lösungen

  • Fehler: „Set Bereich = Workbooks("Daten.xlsm").Worksheets("AllIn").Range("A:A").Value“

    • Lösung: Entferne .Value, da Set einen Range und keinen Wert zuweist. Der korrekte Code lautet:
    Set Bereich = Workbooks("Daten.xlsm").Worksheets("AllIn").Range("A:A")
  • Fehler: Typkonflikt bei der Verwendung von Long für Werte, die Gleitkommazahlen enthalten.

    • Lösung: Ändere die Dimensionierung von Wert zu Double:
    Dim Wert As Double

Alternative Methoden

Eine alternative Methode zur Bearbeitung von Bereichen kann die Verwendung von For Each Schleifen sein, um durch die Zellen in einem bestimmten Range zu iterieren:

For Each Zelle In rng
    If Zelle.Value = Wert Then
        Zelle.Interior.ColorIndex = 5
    End If
Next Zelle

Diese Methode ermöglicht es dir, jede Zelle im definierten Bereich zu prüfen und spezifische Aktionen durchzuführen.


Praktische Beispiele

Hier ist ein praktisches Beispiel, das zeigt, wie du Zellen in einem Range basierend auf einem bestimmten Wert farblich markieren kannst:

Sub MarkiereZellen()
    Dim Wert As Double
    Dim Zelle As Range
    Dim Bereich As Range

    Set Bereich = Workbooks("Daten.xlsm").Worksheets("AllIn").Range("A:A")
    Wert = ThisWorkbook.Worksheets("Kalk").Range("A2").Value

    For Each Zelle In Bereich
        If Zelle.Value = Wert Then
            Zelle.Interior.ColorIndex = 5
        End If
    Next Zelle
End Sub

In diesem Beispiel wird die Zelle in "Kalk" mit dem Wert in "AllIn" verglichen und die Übereinstimmung farbig hervorgehoben.


Tipps für Profis

  • Variablen klar definieren: Achte darauf, dass du alle Variablen korrekt dimensionierst. Nutze Dim für eine bessere Lesbarkeit und Wartbarkeit des Codes.
  • Fehlerbehandlung einfügen: Verwende On Error Resume Next, um mögliche Laufzeitfehler zu handhaben, ohne dass das Programm sofort abbricht.
  • Verwende die .SpecialCells-Methode, um nur Zellen mit bestimmten Eigenschaften zu bearbeiten, z.B. nur Zellen mit Werten:

    For Each Zelle In Bereich.SpecialCells(xlCellTypeConstants)

FAQ: Häufige Fragen

1. Warum funktioniert Set Bereich = Range("A:A").Value nicht?
Value gibt die Werte der Zellen im Bereich zurück, anstatt den Bereich selbst zu setzen. Entferne .Value, um den Range korrekt zu definieren.

2. Wie kann ich sicherstellen, dass mein Workbook geöffnet ist?
Überprüfe vor dem Zugriff auf das Workbook, ob es geöffnet ist, oder öffne es programmgesteuert:

If Not IsWorkbookOpen("Daten.xlsm") Then
    Workbooks.Open "F:\Excel\Beispiele\Daten.xlsm"
End If

3. Was ist der Unterschied zwischen Workbook.Worksheets und ThisWorkbook.Worksheets?
Workbook.Worksheets bezieht sich auf ein spezifisches Workbook, während ThisWorkbook.Worksheets das Workbook bezeichnet, in dem der Code ausgeführt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige