Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1664to1668
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

Array

Array
03.01.2019 13:07:58
Peter
Hallo,
ich bräuchte mal einen kleinen Schubs in die richtige Richtung.
Ich muss das Maximum einer Zeile aus verschiedenen Bereichen ermitteln. Leider können sich die benötigten Spalten an unterschiedlichen Stellen der Tabelle befinden. Aus diesem Grund habe ich einer Funktion erstellt, die die richtie Spaltennummer ermittelt.
Klappt alles hervorragend.
Nun benötige ich das ganze Konstrukt aber an unterschiedlichen Stellen im Code. Problemstellung ist hier, dasss je nach Situation unterschiedliche Spalten zur Ermittlung des Maximums benötigt werden.
Meine Idee war nun, die benötigten Spaltenüberschriften in ein Array zu packen mit dem ich dann meine Funktion füttere. Das Ergebnis der Funktion (eine Zahl zwischen 1 und maximal 50) packe ich dann widerum in ein anderes Array. Die Werte dieses Arrays übernehme ich dann zur Ermittlung meines Maximums.
Hier ein Auszug aus dem Code
Dim RowT As Long
Dim arrColNames As Variant
Dim arrCol As Variant
Dim lngZ As Long
...
arrColNames = Array("Screening", "Initial Dose", "Titration 1", "Titration 2", "Titration 3", "Titration 4")
For lngZ = LBound(arrColNames) To UBound(arrColNames)
arrCol(lngZ) = fctVisTypeDetail((arrColNames(lngZ)), "Column")
Next
Set rngTitMax = Union(.Cells(RowT, arrCol(0)), .Cells(RowT, arrCol(1)), .Cells(RowT, arrCol(2)), .Cells(RowT, arrCol(3)), .Cells(RowT, arrCol(4)), .Cells(RowT, arrCol(5)))
...
Das Problem:
In der fett markierten Zeile bricht das Programm mit der Meldung Typen unverträglich ab.
Die lngZ ist 0 und das Ergebnis der Funktion ist 4. Also sollte doch im Array arrCol an Position 0 der Wert 4 hinterlegt werden, oder?
Ich bin verwirrt.
Gruß
Peter

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array
03.01.2019 13:13:53
onur
Wo ist denn der Code von fctVisTypeDetail?
AW: Array
03.01.2019 13:19:31
Peter
Hallo Onur,
den braucht es hier nicht. Die Funktion wird richtig abgearbeitet und liefert das richtige Ergebnis.
Aber wegen der Vollständikeit
Function fctVisTypeDetail(VisitType As String, strDetail As String)
'Ermittelt in der Tabelle VisitType anhand von VisitType und dem angegebene Detail (strDetail)
'den zugehörigen Wert
Dim wsVisType As Worksheet
Dim lngLRowVisType As Long, lngLColVisType As Long
Dim rngVisType As Range, rngHeader As Range, rngSearch As Range
Dim lngVisDetailRow As Long, lngVisDetailCol As Long, lngCol As Long
Set wsVisType = ThisWorkbook.Sheets("VisitType")
With wsVisType
lngLRowVisType = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngLColVisType = .UsedRange.SpecialCells(xlCellTypeLastCell).Column
Set rngVisType = .Range(.Cells(1, 1), .Cells(lngLRowVisType, 1))
Set rngHeader = .Range(.Cells(1, 1), .Cells(1, lngLColVisType))
lngVisDetailCol = Application.Match(strDetail, rngHeader, 0)
lngVisDetailRow = Application.Match(VisitType, rngVisType, 0)
fctVisTypeDetail = .Cells(lngVisDetailRow, lngVisDetailCol)
End With
End Function

Anzeige
AW: Array
03.01.2019 13:31:58
onur
Poste mal die Datei, damit ich Debuggen kann.
AW: Array
03.01.2019 13:43:51
Peter
Tut mir Leid, aber das kann ich nicht machen. Zu viele Daten drin, die sensibel sind.
Nein, denn 'arrCol' ist lt diesem PgmAuszug ...
03.01.2019 13:42:41
Luc:-?
…ein Einzelwert und weder ein skalarer noch vektorieller Tensor, Peter,
dazu müsste er erst entsprd ReDimmt wdn. Der Fehler entsteht also wohl durch arrCol(lngZ) allein.
Übrigens, die zusätzlichen Klammern um das 1.Argument der Fkt sind überflüssig.
Gruß, Luc :-?
AW: Nein, denn 'arrCol' ist lt diesem PgmAuszug ...
03.01.2019 13:50:23
Planlos
die Klammer müssen sein, weil in Schnittstelle der Funktion die Strings byref übernehmen will.
AW: Nein, denn 'arrCol' ist lt diesem PgmAuszug ...
03.01.2019 13:53:47
Peter
Luc:-?
Recht hast du,
ReDim arrCol(UBound(arrColNames))
hat das Problem gelöst.
Planlos:
GENAU! :-)
Danke
Peter
Anzeige
Ist das nicht ohnehin 'ByRef', ...
03.01.2019 13:57:53
Luc:-?
…Folks,
oder habe ich da evtl eine Wissenslücke…?
Luc :-?
AW: Ist das nicht ohnehin 'ByRef', ...
03.01.2019 14:04:42
onur
Hast Recht, Default ist ByRef.
AW: Ist das nicht ohnehin 'ByRef', ...
03.01.2019 14:05:04
Planlos
Wenn an der Schnittstelle nix wie byval/byref steht; ja dann isses byref. Problem hier ist aber das der Übergabeparameter aus dem Array ein Variant ist.
AW: Ist das nicht ohnehin 'ByRef', ...
03.01.2019 14:14:17
Daniel
Bei der Übergabe mit ByRef müssen die Variablentypen exakt übereinstimmen!
es ist dann bspw nicht mehr möglich, eine Integer-Variable zu übergeben, wenn in der Funktion der Übergabeparameter als Long deklarkiert ist.
nur bei der Übergabe mit ByVal findet im Bedarfsfall eine Typumwandlung statt.
wenn jetzt in der Funktion die Übergabe mit ByRef (bzw ohne Angabe) definiert ist, kann man durch das setzten der Klammern auch noch beim Aufruf der Funktion die Übergabe mit byVal durchführen lassen und kann somit auch unterschiedliche Variablentypen übergeben ohne dass ein Fehler auftritt.
Gruß Daniel
Anzeige
AW: Ist das nicht ohnehin 'ByRef', ...
03.01.2019 14:19:13
Peter
Sehr schön erklärt Daniel.
So etwas kommt bei mir nie vor, ...
03.01.2019 17:26:03
Luc:-?
…Peter,
weil ich HptArgumente von Fktt ohnehin meist As Variant deklariere und diese meist auch für ZellFml-Einsatz schreibe, wobei ByRef ohnehin nur für Objekte gilt und ggf ohne die sonst üblichen Folgen bleibt.
Außerdem hätte das Array ja auch As String deklariert wdn können. Erzeugt man das mit der vbFkt Split, kann man die EinzelElemente auch auf einmal anlegen - auch in einem Variant.
Luc :-?
AW: Array
03.01.2019 13:43:29
Planlos
Vermutung, eilweil Sourcecode hier nur häppchenweise kommt, das arrcol nicht entsprechend dimensioniert ist.
AW: Array
03.01.2019 13:51:57
Peter
Vermutung war richtig.
ReDim arrCol(UBound(arrColNames))
hat das Problem gelöst.
Danke
Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige