Только пользовательский тип, определенный в открытых объектных модулях, может быть вызван при попытке вызвать внешнюю функцию VBA.

Я пытаюсь вызвать функцию доступа из Excel и получить эту ошибку:

Ошибка компиляции: только определенные пользователем типы, определенные в открытых объектных модулях, могут быть принудительно преобразованы в вариант или из него или переданы функциям с поздней привязкой.

Я пытался принять эторешение Я нашел, но без удачи. Вот мой код:

В модуле Excel ExternalStatistics

Option Explicit

    Public Type MyExternalStatistics
        esMyInvites As Single
        esMyInvitePerTalk As Single
    End Type

Public MyExtRecStats As MyExternalStatistics

В объекте Sheet1 (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

В модуле доступа 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

Это не нравитсяMyExtRecStats = .Run("ExternalRecruitingStats", RecruitWindow) заявление. Я хотел бы в конечном итоге назначить несколько наборов в функции доступа и вернуть их все вместе с одним объектом. Затем я могу разместить эти значения там, где они должны быть в электронной таблице.

Ответы на вопрос(1)

Ваш ответ на вопрос