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.