Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBS Funktion soll Range Obj. zurückgeben

Forumthread: VBS Funktion soll Range Obj. zurückgeben

VBS Funktion soll Range Obj. zurückgeben
27.06.2005 16:40:29
GothicFiction
Liebes Forum,
ich habe jetzt bereits seit einigen Tagen und Versuchen dass Problem, dass eine Funktion einfach nicht das machen will, was ich mir eigentlich erhofft habe.
Sie soll mit zwei Integers, eine für Zeile, eine für Spalte, gefüttert ein Range Objekt von der Anfangs bis zur letzten gefüllte Zelle erzeugen und dieses zurückliefern, so dass es durch eine Andere Funktion durchsucht werden kann. Der relevante Code:
'Funktion erstellt Range-Objekt, das durchsucht werden soll
'Funktion funktioniert nicht wie ichs mir dachte :-(

Function bestimme_bereich(ByVal row As Variant, ByVal col As Variant)
Dim last_row As Variant
last_row = Cells(Rows.Count, col).End(xlUp).row
Set bestimme_bereich = ActiveSheet.Range(Cells(row, col), Cells(last_row, col))
End Function

'Funktion sucht Anzahl der Übereinstimmungen
'in bereich cell mit dem wert datum

Function suche_datum(ByVal rngBereich As Range, ByVal datum As String)
Dim cell As Variant, i As Integer
i = 0
For Each cell In rngBereich
If cell.Value = datum Then
i = i + 1
End If
Next
suche_datum = i
End Function


Sub Datumssuche()
'Spalte U test
bereich = bestimme_bereich(101, 21)
colU = suche_datum(bereich, "TT.MM.JJJJ")
a = Cells(Rows.Count, 1).End(xlUp).row + 1
Cells(a, 2).Value = colU
End Sub

Im Bezug auf die Funktion bestimme_bereich in der Zeile
Set bestimme_bereich = ActiveSheet.Range(Cells(row, col), Cells(last_row, col))
erscheint die Fehlermeldung:
- Laufzeitfehler "91" Objektvariable oder With-Blockvariable nicht festgelegt
Was mache ich falsch, wieso ist das falsch, wie wäre es richtig, warum?
Vielen Dank schon einmal
GothicFiction
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBS Funktion soll Range Obj. zurückgeben
27.06.2005 17:11:07
Boris
Hi,
arbeite mal mit Option Explicit - dann wärst du schon mal drüber gestolpert, dass u.a. die Variable bereich nicht deklariert wurde.
Und dann wiederum wärst du wohl dahingekommen, dass es eine Variable des Typs Range hätte sein sollen, der man wiederum Werte mit der Set-Anweisung zuweist...;-)
Dieses vereinfachte Beispiel läuft problemlos durch:
Option Explicit

Function bestimme_bereich(ByVal row As Variant, ByVal col As Variant)
Dim last_row As Variant
last_row = Cells(Rows.Count, col).End(xlUp).row
Set bestimme_bereich = ActiveSheet.Range(Cells(row, col), Cells(last_row, col))
End Function


Sub aufruf()
Dim bereich As Range
Set bereich = bestimme_bereich(1, 2)
MsgBox bereich.Address
End Sub

Grüße Boris
Anzeige
AW: VBS Funktion soll Range Obj. zurückgeben
27.06.2005 17:23:10
GothicFiction
Hallo Boris,
vielen Dank für deine Antwort, die Zeile mit dim bereich as range habsch beim code kürzen aus Versehen mit rausgeworfen, aber der Aufruf von bestimme Bereich mittels set bereich = bestimme_bereich (x, y) schien der Knackpunkt zu sein, damit funktionierts *freu* ich habe immer an der falschen Stelle gesucht, weil er in der Funktion gemeckert hat!
LG
GothicFiction
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

VBS Funktion zur Rückgabe eines Range Objekts


Schritt-für-Schritt-Anleitung

Um eine VBS-Funktion zu erstellen, die ein Range-Objekt zurückgibt, folge diesen Schritten:

  1. Aktiviere Option Explicit: Damit stellst du sicher, dass alle Variablen deklariert werden müssen. Dies hilft, Fehler zu vermeiden.

    Option Explicit
  2. Definiere die Funktion: Erstelle die Funktion bestimme_bereich, die zwei Parameter (Zeile und Spalte) entgegennimmt und ein Range-Objekt zurückgibt.

    Function bestimme_bereich(ByVal row As Variant, ByVal col As Variant) As Range
       Dim last_row As Variant
       last_row = Cells(Rows.Count, col).End(xlUp).Row
       Set bestimme_bereich = ActiveSheet.Range(Cells(row, col), Cells(last_row, col))
    End Function
  3. Nutze die Funktion: Implementiere die Funktion in einem Sub, um das zurückgegebene Range-Objekt zu verwenden.

    Sub aufruf()
       Dim bereich As Range
       Set bereich = bestimme_bereich(1, 2)
       MsgBox bereich.Address
    End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler "91": Dieser Fehler tritt auf, wenn eine Objektvariable nicht korrekt festgelegt wurde. Stelle sicher, dass du die Set-Anweisung verwendest, um das Range-Objekt zuzuweisen.

  • Variable nicht deklariert: Wenn du keine Deklaration für bereich hast, wird der Compiler einen Fehler ausgeben. Deklariere alle Variablen mit Dim.


Alternative Methoden

Eine alternative Methode zur Rückgabe eines Range-Objekts ist die Verwendung von vbscript range. Dies kann eine einfachere Syntax bieten, jedoch ist der Einsatz von VBA in Excel häufig effizienter, da er besser mit den Cells und Range Objekten von Excel interagiert.

Sub alternative_methode()
    Dim bereich As Range
    Set bereich = Range("A1:B10") ' Beispiel für einen festen Range
    MsgBox bereich.Address
End Sub

Praktische Beispiele

Hier ist ein praktisches Beispiel, das die Verwendung der Funktion suche_datum zeigt, die ein Range-Objekt verwendet:

Function suche_datum(ByVal rngBereich As Range, ByVal datum As String) As Integer
    Dim cell As Range
    Dim i As Integer
    i = 0
    For Each cell In rngBereich
        If cell.Value = datum Then
            i = i + 1
        End If
    Next cell
    suche_datum = i
End Function

Du kannst diese Funktion dann verwenden, um die Anzahl der Übereinstimmungen in einem bestimmten Bereich zu zählen.


Tipps für Profis

  • Verwende With-Blöcke: Um deinen Code zu optimieren und lesbarer zu machen, nutze With-Blöcke, wenn du mehrfach auf dasselbe Objekt zugreifst.

    With ActiveSheet
       Set bestimme_bereich = .Range(.Cells(row, col), .Cells(last_row, col))
    End With
  • Fehlersuche: Nutze die Debugging-Funktionen von VBA, um Schritt für Schritt durch deinen Code zu gehen und Probleme zu identifizieren.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Range und Cells in VBA?
Range bezieht sich auf einen bestimmten Bereich von Zellen, während Cells eine Einzelzelle innerhalb eines Arbeitsblatts identifiziert.

2. Wie kann ich einen Range in einer anderen Arbeitsmappe referenzieren?
Du kannst dies tun, indem du den Namen der Arbeitsmappe in deiner Range-Referenz angibst, z.B. Workbooks("AndereMappe.xlsx").Sheets("Tabelle1").Range("A1").

3. Warum bekomme ich einen Laufzeitfehler beim Zugriff auf ein Range-Objekt?
Das kann verschiedene Gründe haben, z.B. wenn das Arbeitsblatt nicht aktiv ist oder die Range nicht existiert. Überprüfe die Namen und die Aktivität des Arbeitsblatts.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige