Hallo,
vor einigen Tagen hatte ich das Problem, Property mit einem Array zu belegen ( [Excel] Array als Property definieren? ). Das wurde soweit auch ganz gut gelöst, bisher hat alles wunderbar funktioniert.
Nur kriege seit kurzem (und ich hab nichts an der clsMWert verändert) die Fehlermeldung: Fehler beim Kompilieren: Argumenttyp ByRef unverträglich
Ich habe unten einmal die clsMWert und die relevanten Subs der UF aufgeführt.
In die clsMWert habe ich exemplarisch eine unkritische Property und die vier fehlerhaften eingebracht. Im UF-Code sind die Fehlerstellen hervorgehoben.
Vielleicht aber einmal zur Aufgabenstellung (die an sich recht simpel ist):
Ich lese Werte in einer definierten Form aus einer Excel-Tabelle heraus. Das hat so auch ganz gut geplappt (selbst mit den arrays). Wer weiß, warum er jetzt auf einmal Zicken macht... Ich habe auch noch eine funktionierende Version, zu der ich allerdings keine Unterschiede erkennen kann (bei Wunsch poste ich das, sonst wirds hier einfach zu viel)
clsMWert
UF
Übrigens wird jeweils das i in den Klammern von VStrom etc. grau hinterlegt.
Vielleicht könnt ihr mir helfen, bisher war ich sehr glücklich über eure Hilfe.
PS: Ich bin das Wochenende über nicht da, kann also auch nicht antworten
vor einigen Tagen hatte ich das Problem, Property mit einem Array zu belegen ( [Excel] Array als Property definieren? ). Das wurde soweit auch ganz gut gelöst, bisher hat alles wunderbar funktioniert.
Nur kriege seit kurzem (und ich hab nichts an der clsMWert verändert) die Fehlermeldung: Fehler beim Kompilieren: Argumenttyp ByRef unverträglich
Ich habe unten einmal die clsMWert und die relevanten Subs der UF aufgeführt.
In die clsMWert habe ich exemplarisch eine unkritische Property und die vier fehlerhaften eingebracht. Im UF-Code sind die Fehlerstellen hervorgehoben.
Vielleicht aber einmal zur Aufgabenstellung (die an sich recht simpel ist):
Ich lese Werte in einer definierten Form aus einer Excel-Tabelle heraus. Das hat so auch ganz gut geplappt (selbst mit den arrays). Wer weiß, warum er jetzt auf einmal Zicken macht... Ich habe auch noch eine funktionierende Version, zu der ich allerdings keine Unterschiede erkennen kann (bei Wunsch poste ich das, sonst wirds hier einfach zu viel)
clsMWert
Visual Basic-Quellcode
- Option Explicit
- Dim mWNr, mORadBearb As String
- Dim mKFaktor, mVStrom(4), mORadL, mORadR, mKonf, i, mVNr As Integer
- Dim mDatum As Date
- Dim mMWert As Single
- Dim mVAbl(4), mVWahr(4), mFehler(4) As Single
- '********************************
- '***** Standardwerte setzen *****
- Private Sub Class_Initialize()
- mWNr = "xxxx"
- mKFaktor = 1
- mORadL = -1
- mORadR = -1
- mKonf = -1
- mORadBearb = -1
- mVStrom(1) = 10
- mVStrom(2) = 5
- mVStrom(3) = 2
- mVStrom(4) = 1
- mDatum = 0
- mMWert = 9.999
- For i = 1 To 4
- mVAbl(i) = -1
- mVWahr(i) = -1
- mFehler(i) = -1
- Next i
- End Sub
- '***************************
- '***** Let-Get für WNr *****
- Public Property Let WNr(ByVal DieWNr As String)
- mWNr = DieWNr
- End Property
- Public Property Get WNr() As String
- WNr = mWNr
- End Property
- '******************************
- '***** Let-Get für Fehler *****
- Public Property Let Fehler(index As Integer, derFehler As Single)
- If index > 0 And index <= 4 Then
- mFehler(index) = derFehler
- End If
- End Property
- Public Property Get Fehler(index As Integer) As Single
- If index > 0 And index <= 4 Then
- Fehler = mFehler(index)
- Else
- Fehler = -1
- End If
- End Property
- '*******************************
- '***** Let-Get für VAbl *****
- Public Property Let VAbl(index As Integer, DasVAbl As Single)
- If index > 0 And index <= 4 Then
- mVAbl(index) = DasVAbl
- End If
- End Property
- Public Property Get VAbl(index As Integer) As Single
- If index > 0 And index <= 4 Then
- VAbl = mVAbl(index)
- Else
- VAbl = -1
- End If
- End Property
- '*******************************
- '***** Let-Get für VWahr *****
- Public Property Let VWahr(index As Integer, DasVWahr As Single)
- If index > 0 And index <= 4 Then
- mVWahr(index) = DasVWahr
- End If
- End Property
- Public Property Get VWahr(index As Integer) As Single
- If index > 0 And index <= 4 Then
- VWahr = mVWahr(index)
- Else
- VWahr = -1
- End If
- End Property
- '*******************************
- '***** Let-Get für MVStrom *****
- Public Property Let VStrom(index As Integer, derVStrom As Integer)
- If index > 0 And index <= 4 Then
- mVStrom(index) = derVStrom
- End If
- End Property
- Public Property Get VStrom(index As Integer) As Integer
- If index > 0 And index <= 4 Then
- VStrom = mVStrom(index)
- Else
- VStrom = -1
- End If
- End Property
UF
Visual Basic-Quellcode
- Option Explicit
- ' cMReihen gibt die Größe des Feldes an
- Const cMReihen As Integer = 100
- Dim MWerte(cMReihen) As clsMWert
- Private Sub UserForm_Initialize()
- Dim iIndex As Integer
- Dim sVers, sVersA() As String
- iIndex = 1
- For i = 1 To cMReihen
- Set MWerte(i) = New clsMWert
- Next i
- '*******************************
- '***** Einlesen des Arrays *****
- While Cells(iIndex, 1).Value <> "" And Cells(iIndex + 1, 1).Value <> ""
- sVers = Cells(iIndex, 1).Value
- sVersA() = Split(sVers, "-")
- With MWerte((iIndex - 1) / 7 + 1)
- .Konf = CInt(sVersA(0))
- .WNr = sVersA(1)
- .VNr = CInt(Cells(iIndex + 1, 1).Value)
- .ORadL = CInt(sVersA(2))
- .ORadR = CInt(sVersA(3))
- .ORadBearb = sVersA(4)
- .Datum = Cells(iIndex, 2).Value ' + Format(Cells(iIndex, 3), "hh:mm:ss")
- .KFaktor = Cells(iIndex + 1, 2).Value
- .MWert = Cells(iIndex + 1, 4).Value
- For i = 1 To 4
- .VStrom(i) = Cells(iIndex + i + 1, 1).Value ' Hier
- .VWahr(i) = Cells(iIndex + i + 1, 2).Value ' treten
- .VAbl(i) = Cells(iIndex + i + 1, 3).Value ' Fehler
- .Fehler(i) = Cells(iIndex + i + 1, 4).Value ' auf
- Next i
- End With
- iIndex = iIndex + 7
- Wend
- End Sub
Übrigens wird jeweils das i in den Klammern von VStrom etc. grau hinterlegt.
Vielleicht könnt ihr mir helfen, bisher war ich sehr glücklich über eure Hilfe.
PS: Ich bin das Wochenende über nicht da, kann also auch nicht antworten