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

Syntax WorksheetFunction "IF"

Forumthread: Syntax WorksheetFunction "IF"

Syntax WorksheetFunction "IF"
WernerB.
Hallo Experten,
ich möchte per VBA prüfen, ob die Zelle "A1" ("Tabelle1", "Mappe2.xls") einen Inhalt (auch eine eingetragene Ziffer "Null" ist ein Inhalt!) hat.
Erschwerend kommt hinzu, dass die Datei "Mappe2.xls" dabei geschlossen ist.
Meine Versuche mit der Worksheet-Funktion "IF" sind bisher kläglich gescheitert; was sehr wahrscheinlich an einer falschen Syntax liegt.
Wer kann mir mit der richtigen Syntax oder ggf. auch mit einem völlig anderen Lösungsvorschlag weiter helfen?
Im nachstehenden Problem-Makro wird das Apostroph/Hochkomma im Pfad angemeckert, wenn ich dieses entferne, gefällt Excel der Doppelpunkt nicht.

Sub Test01()
Dim Check As Boolean
Check = WorksheetFunction.IF('C:\Daten\[Mappe2.xls]Tabelle1'!R1C1="",TRUE,FALSE)
MsgBox Check
End Sub

Gruß
WernerB.
Anzeige
AW: Syntax WorksheetFunction "IF"
14.02.2006 12:33:23
Peter
Servus,
schau mal in den Eigenschaftskatalog ob du die Application.Worksheetfunction if findest, bei meinem xls gibt es die nicht.
Würde es evtl so lösen, hab allerdings auch nicht dein Level, deshalb nur ein Vorschlag.


Sub test()
Dim strNam As String
Dim wbk As Workbook
Dim bolCheck As Boolean
strNam = ThisWorkbook.Path & "\" & "Kasse2006.xls"
Set wbk = GetObject(strNam)
If wbk.Sheets("KB12").Range("A1") = "" Then bolCheck = True
wbk.Close False
End Sub


MfG Peter
Anzeige
AW: Syntax WorksheetFunction "IF"
14.02.2006 13:51:42
WernerB.
Hallo Peter,
vielen Dank für Deinen Vorschlag.
Über Deinen und meinen VBA-Level möchte ich nicht diskutieren.
Es kommt mir auch nicht darauf an, das Problem mit "WorksheetFunction.If()" zu lösen - egal, ob es diese Funktion nun so gibt oder auch nicht.
Mit Deinem Vorschlag wird die geschlossene Datei leider geöffnet - und eben das will ich vermeiden.
Ich suche nur nach einer Möglichkeit, per VBA zu prüfen, ob eine bestimmte Zelle in einer geschlossenen Datei einen Inhalt hat oder nicht, wobei eben auch erkannt werden soll, ob in der Zelle z.B. eine Null (oder ein anderer Wert) steht oder ob die Zelle tatsächlich leer ist.
In einem Tabellenblatt könnte man das problemlos per Wenn-Funktion lösen:
=WENN('C:\Daten\[Mappe2.xls]Tabelle1'!A1="";WAHR;FALSCH)
Nur möchte ich das eben nach Möglichkeit per VBA erledigen, ohne dabei die geschlossene Datei zu öffnen und ohne etwas in eine Zelle zu schreiben.
Mit anderen Worten: Die Information (TRUE bzw. FALSE) möchte ich nach entsprechender VBA-Abfrage (und genau die kriege ich gerade nicht auf die Reihe) in einer Variablen haben.
Siehst Du (oder auch ein anderer Forums-Helfer) da noch eine andere Möglichkeit?
Gruß
WernerB.
Anzeige
AW: Syntax WorksheetFunction "IF"
14.02.2006 14:34:25
Urs
Geht mit Excel4-Makro
AW: Syntax WorksheetFunction "IF"
14.02.2006 15:13:42
WernerB.
Hallo Urs,
vielen Dank für Deinen Hinweis.
Die Vorgehensweise der Datenübertragung aus einer geschlossen Datei per Excel4-Makro ist mir bekannt, löst aber nicht mein Problem.
Bei der Datenübertragung per Excel4-Makro wird nämlich eine Null zurückgegeben, wenn in der Quellzelle eine Null steht (ist ja so auch richtig) aber es es wird auch eine Null zurückgegeben, wenn die Quellzelle vollkommen leer ist bzw. keinen Inhalt hat (und genau das möchte ich abfangen).
Der Unterschied zwischen Nichts und Null kann manchmal erheblich sein!
Gruß
WernerB.
Anzeige
AW: Syntax WorksheetFunction "IF"
14.02.2006 14:36:39
Peter
Servus,
wollte auch nicht damit sagen das dein Level nicht passt, ist mir ehrlich gesagt wurscht.
Wollte nur ausdrücken, das mit meinen bescheidenen Mitteln nicht mehr drin ist.
Hab jetzt aber doch mal gegoogelt und folgendes gefunden, musst dir halt anpassen, funzen tuts in jedem Fall.


Sub test()
Dim strPath As String, strDat As String, strTab As String
strPath = "'" & ThisWorkbook.Path & "\"
strDat = "[Kasse2006.xls]"
strTab = "KB12'!"
MsgBox ExecuteExcel4Macro _
    (strPath & strDat & strTab & Range("A1").Address(ReferenceStyle:=xlR1C1))
End Sub
MfG Peter
Anzeige
AW: Syntax WorksheetFunction "IF"
14.02.2006 15:24:30
WernerB.
Hallo Peter,
vielen Dank für Deine Bemühungen.
Wie gesagt: Über Deinen und meinen VBA-Level möchte ich nicht diskutieren - egal, wie Deine Berkung gemeint war (ich hatte sie auch nicht negativ aufgefasst).
Die Vorgehensweise der Datenübertragung aus einer geschlossen Datei per Excel4-Makro ist mir bekannt, löst aber nicht mein Problem.
Bei der Datenübertragung per Excel4-Makro wird nämlich eine Null zurückgegeben, wenn in der Quellzelle eine Null steht (ist ja so auch richtig) aber es es wird auch eine Null zurückgegeben, wenn die Quellzelle vollkommen leer ist bzw. überhaupt keinen Inhalt hat (und genau das möchte ich abfangen).
Der Unterschied zwischen Nichts und Null kann manchmal erheblich sein!
Deine Bemerkung "funzen tuts in jedem Fall" stimmt also so nicht ganz.
Oder bin ich in diesem Punkt gar zu anspruchsvoll?
Gruß
WernerB.
Anzeige
AW: Syntax WorksheetFunction "IF"
14.02.2006 16:43:38
Urs
Mit Zelle.Zuordnen(41) kannst du das überprüfen.
mfg Urs
AW: Syntax WorksheetFunction "IF"
14.02.2006 16:52:45
Urs
Kannst du mit Zelle.Zuordnen(41) prüfen.
mfg Urs
AW: Syntax WorksheetFunction "IF"
15.02.2006 08:27:38
WernerB.
Hallo Urs,
unter Deinem Hinweis "Zelle.Zuordnen(41)" verstehe ich leider nur "Bahnhof".
Ich nehme an, dass es sich dabei um eine Tabellenblattfunktion handelt, die ich (bisher?) nicht kenne. Dein Vorschlag sieht auch nicht nach einer VBA-Lösung aus, die ich eigentlich suche.
Kannst Du bitte mal ein kleines Beispiel geben (Syntax, Vorgehensweise, ...)?
Zur Verdeutlichung noch einmal mein Problem:
Ich suche nach einer VBA-Lösung (Abfrage, Funktion, o.ä.) zu prüfen, ob eine bestimmte Zelle in einer geschlossenen Datei einen Inhalt hat oder nicht.
Dabei soll erkannt werden, ob in der Zelle ein Wert (z.B. eine Null oder ein anderer beliebiger Wert) steht oder ob die Zelle tatsächlich vollkommen leer ist.
- In der Zieldatei soll dazu keine Zelle beschrieben/benutzt werden.
- Die geschlossene (Quell-)Datei soll dazu nicht geöffnet werden.
- Ein Excel4-Makro zum Auslesen eines Zellwertes aus einer geschlossenen Datei scheint dafür ungeeignet, da es immer den Wert Null liefert, wenn die Quellzelle
a) leer ist (also keinen Wert enthält) oder
b) den Wert Null
enthält; die Feststellung, ob die Quellzelle leer oder nicht leer ist, lässt sich so also nicht treffen.
- Mit der nachstehenden Tabellenblatt-Funktion wäre das Problem gelöst, wenn man sie irgenwie in eine VBA-Abfrage oder -Funktion gießen könnte:
=WENN('C:\Daten\[Mappe2.xls]Tabelle1'!A1="";WAHR;FALSCH)
(und genau hier stehe ich auf dem Schlauch)!
- Die Information "ZELLE LEER" oder "ZELLE NICHT LEER" (TRUE bzw. FALSE) möchte ich in einer Variablen haben.
Gibt es dazu aus dem Forum einen passenden Vorschlag?
Gruß
WernerB.
Anzeige
AW: Syntax WorksheetFunction "IF"
15.02.2006 14:42:03
Urs
Hi,
hab dich wahrscheinlich aufgrund deines angegebenen Levels zu hoch eingeschätzt.
In der Recherche findest du dazu bereits Lösungen.
mfg Urs
AW: Syntax WorksheetFunction "IF"
15.02.2006 15:24:07
WernerB.
Hallo Urs,
herzlichen Dank für den tollen Hinweis auf die Recherche.
Wenn Du mir jetzt noch sagst, unter welchem Suchbegriff ich die von Dir angesprochenen Lösungen finden kann, bin ich Dir ewig dankbar!
Gruß
WernerB.
Anzeige
AW: Syntax WorksheetFunction "IF"
15.02.2006 15:27:23
Urs
Hi,
keine Ursache, immer wieder gern.
Excel4 Makro
mfg Urs
AW: Syntax WorksheetFunction "IF"
15.02.2006 15:59:26
WernerB.
Hallo Urs,
ich fürchte, wir drehen uns im Kreis.
Darauf, dass ein Excel4-Makro dazu nicht geeignet ist, hatte ich in meinen Antworten bereits hingewiesen, da es sowohl bei einer leeren Zelle als auch bei einer Zelle mit einem eingetragenen Wert "0" (Null) jeweils den Wert "0" zurückgibt.
So kann ich leider nicht zweifelsfrei feststellen, ob die Zelle nun einen Inhalt hat oder nicht.
Gruß
WernerB.
Anzeige
;
Anzeige

Infobox / Tutorial

VBA Lösung für die Syntax der WorksheetFunction "IF"


Schritt-für-Schritt-Anleitung

Um mit VBA zu prüfen, ob eine bestimmte Zelle in einer geschlossenen Excel-Datei einen Inhalt hat, kannst Du die Application.WorksheetFunction.IF nicht direkt verwenden, da diese Funktion nur in geöffneten Arbeitsmappen funktioniert. Stattdessen kannst Du die Excel4-Makro-Funktion ExecuteExcel4Macro verwenden. Hier ist ein Beispiel, wie Du das umsetzen kannst:

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).
  3. Kopiere und füge den folgenden Code ein:
Sub CheckClosedCell()
    Dim cellContent As Variant
    Dim filePath As String
    Dim cellAddress As String

    filePath = "'C:\Daten\[Mappe2.xls]Tabelle1'!"
    cellAddress = "A1"

    cellContent = ExecuteExcel4Macro(filePath & cellAddress)

    If IsEmpty(cellContent) Then
        MsgBox "Die Zelle ist leer."
    Else
        MsgBox "Die Zelle hat den Inhalt: " & cellContent
    End If
End Sub
  1. Ersetze den filePath und cellAddress nach Bedarf.
  2. Führe das Makro aus, um den Inhalt der Zelle zu überprüfen.

Häufige Fehler und Lösungen

  • Fehler: "Das angegebene Arbeitsblatt konnte nicht gefunden werden."
    Lösung: Überprüfe den Pfad zur Datei und den Namen des Arbeitsblatts. Stelle sicher, dass die Datei existiert und richtig benannt ist.

  • Fehler: "Falscher Zellbezug."
    Lösung: Achte darauf, dass der Zellbezug korrekt formatiert ist. Für den ExecuteExcel4Macro-Befehl muss der Bezug in der Form 'Pfad\[Dateiname]Blattname'!Zelle angegeben werden.


Alternative Methoden

Wenn Du die Zelle nicht über VBA prüfen möchtest, kannst Du auch direkt eine Excel-Formel verwenden, um den Inhalt einer Zelle in einer geschlossenen Arbeitsmappe zu überprüfen. Hier ist ein Beispiel:

=WENN('C:\Daten\[Mappe2.xls]Tabelle1'!A1="";WAHR;FALSCH)

Diese Formel gibt WAHR zurück, wenn die Zelle leer ist, und FALSCH, wenn sie einen Inhalt hat.


Praktische Beispiele

Ein praktisches Beispiel zur Verwendung von ExecuteExcel4Macro:

Sub TestClosedCell()
    Dim result As Variant
    Dim filePath As String
    Dim cellRef As String

    filePath = "'C:\Daten\[Mappe2.xls]Tabelle1'!"
    cellRef = "A1"

    result = ExecuteExcel4Macro(filePath & cellRef)

    If result = 0 Then
        MsgBox "Die Zelle ist leer oder enthält die Null."
    Else
        MsgBox "Die Zelle enthält: " & result
    End If
End Sub

In diesem Beispiel wird überprüft, ob die Zelle leer ist oder den Wert Null enthält.


Tipps für Profis

  • Verwendung von IsEmpty: Diese Funktion hilft Dir, zu überprüfen, ob eine Variable leer ist, was besonders nützlich ist, wenn Du mit Zellinhalten arbeitest.

  • Debugging: Verwende Debug.Print um Variablenwerte während der Ausführung zu überprüfen. Dies kann Dir helfen, Fehler zu identifizieren.

  • Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um Fehler während der Makroausführung zu handhaben.


FAQ: Häufige Fragen

1. Kann ich die WorksheetFunction.IF im VBA verwenden?
Die WorksheetFunction.IF kann nicht auf geschlossene Arbeitsmappen angewendet werden. Verwende stattdessen ExecuteExcel4Macro.

2. Wie kann ich feststellen, ob eine Zelle leer ist oder den Wert 0 hat?
Die Excel4-Makro-Funktion gibt 0 zurück, wenn die Zelle leer ist oder den Wert 0 hat. Eine Unterscheidung kannst Du nur treffen, wenn Du die Zelle öffnest oder eine andere Methode zur Erkennung verwendest.

3. Gibt es eine Möglichkeit, die Excel-Datei direkt zu bearbeiten, ohne sie zu öffnen?
Leider gibt es keine native VBA-Funktion, die dies ermöglicht. Die einfachste Methode ist, die Datei zu öffnen, den Inhalt zu überprüfen und sie dann wieder zu schließen.

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