Beim Versuch, eine externe VBA-Funktion aufzurufen, kann nur ein benutzerdefinierter Typ erzwungen werden, der in öffentlichen Objektmodulen definiert ist

Ich versuche, eine Access-Funktion aus Excel aufzurufen und erhalte den folgenden Fehler:

Kompilierungsfehler: Nur benutzerdefinierte Typen, die in öffentlichen Objektmodulen definiert sind, können zu oder von einer Variante gezwungen oder an spät gebundene Funktionen übergeben werden.

Ich habe versucht, dies zu übernehmenLösung Ich fand, aber ohne Glück. Hier ist mein Code:

Im Excel-Modul ExternalStatistics

Option Explicit

    Public Type MyExternalStatistics
        esMyInvites As Single
        esMyInvitePerTalk As Single
    End Type

Public MyExtRecStats As MyExternalStatistics

Im Sheet1-Objekt (A-Crunched Numbers):

Option Explicit

Public appRecruitingAccess As Access.Application

Public Sub Worksheet_Activate()
    Dim MyExtRecStats As MyExternalStatistics
    Dim RecruitWindow As Integer
    Dim test As String 

    Set appRecruitingAccess = New Access.Application
    With appRecruitingAccess
        .Visible = False
        .OpenCurrentDatabase "C:\Dropbox\RECRUITING\Remote0\Recruiting 0.accdb"
        RecruitWindow = DateDiff("d", Format(Date, Worksheets("ActivityAndIncentive").Range("IncentiveStart").Value), Format(Date, Worksheets("ActivityAndIncentive").Range("IncentiveEnd").Value))
        RecruitWindow = DateDiff("d", Format(Date, Worksheets("ActivityAndIncentive").Range("IncentiveStart").Value), Format(Date, Worksheets("ActivityAndIncentive").Range("IncentiveEnd").Value))
        MyExtRecStats = .Run("ExternalRecruitingStats", RecruitWindow) '*** ERROR HERE ***
        .CloseCurrentDatabase
        .Quit
    End With
    Set appRecruitingAccess = Nothing
End Sub

Im Zugriffsmodul ExternalStatistics

Option Compare Database
Option Explicit

Public Type MyExternalStatistics
    esMyInvites As Single
    esMyInvitePerTalk As Single
end Type

Public Function ExternalRecruitingStats(StatWindow As Integer) As MyExternalStatistics 
    Dim MyRecStats As MyExternalStatistics
    Dim Invites As Integer, Talks As Integer

    Invites = 1
Talks = 2

    With MyRecStats
        .esMyInvites = CSng(Invites)
        .esMyInvitesPerTalk = CSng(Invites/Talks)
    End With
    ExternalRecruitingStats = MyRecStats 'return a single structure
End Function

Das mag es nichtMyExtRecStats = .Run("ExternalRecruitingStats", RecruitWindow) Aussage. Ich möchte eventuell in der Access-Funktion mehrere Sets zuweisen und alle mit einem Objekt zurückbringen. Dann kann ich diese Werte dort platzieren, wo sie in der Tabelle sein sollten.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage