Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1832to1836
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Funktion auf eine Datei eingrenzen

Funktion auf eine Datei eingrenzen
07.06.2021 18:46:15
Peter
Guten Tag
Mit dieser Funktion stelle ich sicher, dass ich in meiner Tabelle nicht in einer Zeile viermal ein NULL-Wert habe (diesfalls wird die Zeile manuell ausgeblendet, da irrelevant).
Mein Code braucht eine Ergänzung, damit klar ist, dass sich die Funktion immer auf Bereiche in der aktuellen Datei bezieht. Wenn ich also eine zweite Datei geöffnet habe, in der die gleiche Funktion verwendet wird, darf diese zweite Datei keine Auswirkung auf erstere Datei haben.
Wer kann mir helfen?
Gruss, Peter

Function NULL4(rngA As Range, rngB As Range, rngC As Range, rngD As Range, dummy As Date) As String
Dim zz As Long, rngT As Range, lngT As Long, lngB As Long, lngC As Long, lngD As Long
If rngA.Columns.Count * rngB.Columns.Count * rngC.Columns.Count * rngD.Columns.Count  1 Then
NULL4 = "Jeder Bereich muss einspaltig sein."
ElseIf rngA.Areas.Count  rngB.Areas.Count Or _
rngB.Areas.Count  rngC.Areas.Count Or _
rngC.Areas.Count  rngD.Areas.Count Then
NULL4 = "Die Bereiche müssen gleich viele Teilbereiche haben."
ElseIf rngA.Row  rngB.Row Or rngB.Row  rngC.Row Or rngA.Row  rngD.Row Then
NULL4 = "Die Bereiche müssen in der selben Zeile beginnen."
ElseIf rngA.Count = rngB.Count And rngA.Count = rngC.Count And rngA.Count = rngD.Count Then
lngB = rngB.Column
lngC = rngC.Column
lngD = rngD.Column
For Each rngT In rngA.Areas
For zz = 1 To rngT.Count
lngT = rngT.Rows(zz).Row
If rngT(zz).EntireRow.Hidden Then
ElseIf IsEmpty(rngT(zz)) Or _
IsEmpty(Cells(lngT, lngB)) Or IsEmpty(Cells(lngT, lngC)) Or IsEmpty(Cells(lngT, lngD)) Then
ElseIf rngT(zz) = 0 And _
Cells(lngT, lngB) = 0 And Cells(lngT, lngC) = 0 And Cells(lngT, lngD) = 0 Then
If Len(NULL4) > 0 Then NULL4 = NULL4 & ";"
NULL4 = NULL4 & CStr(zz + rngT.Row - 1)
End If
Next zz
Next rngT
If NULL4 = "" Then NULL4 = "OK"
Else
NULL4 = "Alle Bereiche müssen gleiche Zeilenzahl haben."
End If
End Function

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

Betreff
Datum
Anwender
Anzeige
AW: Funktion auf eine Datei eingrenzen
07.06.2021 19:08:18
Nepumuk
Hallo Peter,
teste mal:
Code:

[Cc][+][-]

Public Function NULL4(rngA As Range, rngB As Range, rngC As Range, rngD As Range, dummy As Date) As String Dim zz As Long, rngT As Range, lngT As Long, lngB As Long, lngC As Long, lngD As Long If ActiveWorkbook Is ThisWorkbook Then If rngA.Columns.Count * rngB.Columns.Count * rngC.Columns.Count * rngD.Columns.Count <> 1 Then NULL4 = "Jeder Bereich muss einspaltig sein." ElseIf rngA.Areas.Count <> rngB.Areas.Count Or _ rngB.Areas.Count <> rngC.Areas.Count Or _ rngC.Areas.Count <> rngD.Areas.Count Then NULL4 = "Die Bereiche müssen gleich viele Teilbereiche haben." ElseIf rngA.Row <> rngB.Row Or rngB.Row <> rngC.Row Or rngA.Row <> rngD.Row Then NULL4 = "Die Bereiche müssen in der selben Zeile beginnen." ElseIf rngA.Count = rngB.Count And rngA.Count = rngC.Count And rngA.Count = rngD.Count Then lngB = rngB.Column lngC = rngC.Column lngD = rngD.Column For Each rngT In rngA.Areas For zz = 1 To rngT.Count lngT = rngT.Rows(zz).Row If rngT(zz).EntireRow.Hidden Then ElseIf IsEmpty(rngT(zz)) Or _ IsEmpty(Cells(lngT, lngB)) Or IsEmpty(Cells(lngT, lngC)) Or IsEmpty(Cells(lngT, lngD) _ ) Then ElseIf rngT(zz) = 0 And _ Cells(lngT, lngB) = 0 And Cells(lngT, lngC) = 0 And Cells(lngT, lngD) = 0 Then If Len(NULL4) > 0 Then NULL4 = NULL4 & ";" NULL4 = NULL4 & CStr(zz + rngT.Row - 1) End If Next zz Next rngT If NULL4 = "" Then NULL4 = "OK" Else NULL4 = "Alle Bereiche müssen gleiche Zeilenzahl haben." End If End If End Function

Gruß
Nepumuk
Anzeige
AW: Funktion auf eine Datei eingrenzen
07.06.2021 20:16:36
Peter
Hallo Nepumuk
Vielen Dank. So wird erreicht, dass die Funktion einen leeren Wert zurück gibt, den ich dann wieder abfangen kann.
Ich habe mich noch gefragt, weshalb diese Funktion nicht richtig rechnet, wenn ich in einer anderen Datei aktiv bin (und damit das letztmals ermittelte Ergebnis belässt). Wahrscheinlich wohl wegen der nachfolgenden zwei Codezeilen, in welcher mehrere Male "Cells" steht, was dann die aktive Tabelle referenziert.
IsEmpty(Cells(lngT, lngB)) Or IsEmpty(Cells(lngT, lngC)) Or IsEmpty(Cells(lngT, lngD)) Then
Cells(lngT, lngB) = 0 And Cells(lngT, lngC) = 0 And Cells(lngT, lngD) = 0 Then
Deshalb versuchte diesen Variablen noch Datei und Tabellenname in Variablen mitzugeben. Diese habe ich wie folgt abgefragt:
Set wbo = ThisWorkbook
Set wsa = Application.Caller.Worksheet
Ich habe dann anstelle Cells
wbo.wsa.cells geschrieben.
Doch das war leider nicht zielführend. Was ist hier mein Überlegungsfehler?
Gruss, Peter
Anzeige
AW: Funktion auf eine Datei eingrenzen
07.06.2021 21:47:55
Yal
Hallo Peter,
wbo.wsa
kann nur ermittelt werden, wenn wsa eine Worksheet von wso ist.
Die Zuweisungen

Set wbo = ThisWorkbook
Set wsa = Application.Caller.Worksheet
führt nicht zwingend zu diesem Ergebnis.

Set wbo = ThisWorkbook
Set wsa = Application.Caller.Worksheet
If wbo.Name = wsa.Parent.Name Then 'der parent eines Worksheet ist immer ein Workbook
wbo.wsa.Cells ...
würde passen, da zwei verschiedenen, geöffneten Mappen nicht dieselben Namen haben dürfen.
VG
Yal
AW: Funktion auf eine Datei eingrenzen
07.06.2021 22:37:19
Peter
Hallo Yal
Danke.
Muss mir das alles nochmals durch den Kopf gehen lassen.
Freundlicher Gruss, Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige