Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1936to1940
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

Excel ignoriert Variablendeklaration

Excel ignoriert Variablendeklaration
11.07.2023 17:31:05
Micha
Hallo Zusammen,

ich schreibe gerade eine Funktion, bei der ich einen Doppelklick auswerte und dann 3 Werte an eine aufzurufende Sub Procedure übergeben möchte.
Ich erhalte die Fehlermeldung "Fehler beim kompilieren: Argumenttyp ByRef unverträglich"

Übergeben werden sollten target, sowie 2 als Integer deklarierte Variablen.
Wenn ich die Prozedur allerdings bis zu dem Punkt an dem aufgerufen wird durchgehe und die zu übergebenden Variablen überwache, zeigt Excel an, dass der Typ "variant/empty" ist, obwohl meines Erachtens sauber deklariert.
Die aufzurufende Procedure befindet sich in einem eigenen Modul.
Nachstehend der Code.

Vielen Dank vorab für eure Hilfe und Tipps, wo ich einen Denkfehler habe.

Viele Grüße,
Micha



Dim zeilekontakte, spaltekontakte As Integer
Dim rngzelle As Range

For Each rngzelle In tb02_Kunde.UsedRange
    If tb02_Kunde.Cells(rngzelle.Row, rngzelle.Column).Value = "Kontakte" And tb02_Kunde.Cells(rngzelle.Row + 2, rngzelle.Column).Value = "Datum" Then
        zeilekontakte = rngzelle.Row + 3 '+3 da Ergebnisse erst 3 Zeilen später anfangen
        spaltekontakte = rngzelle.Column
        If target.Row > zeilekontakte And target.Column >= spaltekontakte And Not IsEmpty(target.Value) Then
            Call kontakt_big(target)
            GoTo ausgang
        End If
        
    End If
Next

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel ignoriert Variablendeklaration
11.07.2023 17:37:03
Micha
Ergänzung: Die Variablen sollen gemeinsam mit "target" bei "Call kontakt_big" erfolgen, der Code zeigt nun nur target in der Klammer, da die Übergabe von "zeilekontakte" und "spaltekontakte" zur angeführten Fehlermeldung führte.
viele Grüße
Micha

AW: Excel ignoriert Variablendeklaration
11.07.2023 17:45:05
Daniel
Hi

VBA kennt keine Gruppendeklaration für mehrere Variablen gleichzeitig
jeder Variable muss der Typ einzeln zugewiesen werden:
Dim zeilekontakte, spaltekontakte As Integer
hier wird nur spaltenkontakte als Integer deklariert, zeilenkontakte hat keinen Variablentyp und wird daher Variant.
man kann schon mehrere Variablen in einer Zeile deklarieren, aber du musst jeder den Typ zuweisen, falls sie nicht variant sein soll:
Dim zeilekontakte as Integer, spaltekontakte As Integer
btw, ich würde dir empfehlen, immer LONG statt INTEGER zu verwenden.
Auf modernen Rechnern hat INTEGER keine Vorteile (ist also nicht schneller), aber trotzdem den kleineren Wertebereich, der bei Zeilen schnell überschritten werden kann.

wenn das ein BeforeDoubleClick-Eventmakro ist, dann ist der Typ von target RANGE

wenn du Variablen mit byRef bzw nicht mit byVal übergibst, müssen die Typen für die Übergabe exakt gleich sein.
mit byVal hingegen ist eine Konvertierung möglich (dh Wenn die Funktion Long hat, kann sie eine Integervariable aufnehmen und umgekehrt auch, sofern der Zahlenraum eingehalten wird.)

Gruß Daniel

Anzeige
AW: Excel ignoriert Variablendeklaration
11.07.2023 19:05:46
Micha
Hallo Daniel,
vielen Dank, ich hatte es falsch im Kopf, dass es auch bei Excel funktioniert.
Nun funktioniert die Übergabe fehlerlos.
schönen Abend,
viele Grüße
Micha

AW: Excel ignoriert Variablendeklaration
11.07.2023 18:56:59
Rudi Maintaire
Hallo,
vermutlich sollte das eher so aussehen:
  Dim ZeileKontakte As Long, SpalteKontakte As Long
  Dim rngZelle As Range
  
  For Each rngZelle In tb02_Kunde.UsedRange
      If rngZelle = "Kontakte" And rngZelle.Offset(2).Value = "Datum" Then
          ZeileKontakte = rngZelle.Row + 3 '+3 da Ergebnisse erst 3 Zeilen später anfangen
          SpalteKontakte = rngZelle.Column
          If Target.Row > ZeileKontakte And Target.Column >= SpalteKontakte And Not IsEmpty(Target.Value) Then
              Call kontakt_big(Target)
              GoTo ausgang
          End If
      End If
  Next
Aber was ist mit ZeileKontakte und SpalteKontakte? Werden die nicht an kontakt_big übergeben?
z.B.
Sub kontakt_big(Target As Range, ZeileKontakte As Long, SpalteKontakte As Long)
  'Code
End Sub
Zeig doch mal das ganze Konstrukt.

Gruß
Rudi

Anzeige
AW: Excel ignoriert Variablendeklaration
11.07.2023 19:07:07
Micha
Hallo Rudi,
ich hatte zu Testzwecken die Übergabe an kontakt_big wieder gelöscht. Dank eurer Hilfe funktioniert nun die Übergabe wunderbar.
vielen Dank und einen schönen Abend,
Micha

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige