Rod*_*Rod 5 excel vba excel-vba access-vba
我试图从Excel调用Access函数并出现以下错误:
编译错误:只能将公共对象模块中定义的用户定义类型强制到变量或从变量强制,或传递给后期绑定函数。
我试图采用我发现的解决方案,但是没有运气。这是我的代码:
在Excel模块ExternalStatistics中
Option Explicit
Public Type MyExternalStatistics
esMyInvites As Single
esMyInvitePerTalk As Single
End Type
Public MyExtRecStats As MyExternalStatistics
Run Code Online (Sandbox Code Playgroud)
在Sheet1(A紧缩数字)对象中:
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
Run Code Online (Sandbox Code Playgroud)
在访问模块中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
Run Code Online (Sandbox Code Playgroud)
它不喜欢这种MyExtRecStats = .Run("ExternalRecruitingStats", RecruitWindow)说法。我想最终在Access函数中分配几个集合,并用一个对象将它们全部带回来。然后,我可以将这些值放在电子表格中应放置的位置。
VBA 中的类型定义非常本地化,当您尝试将它们与可能无法访问类型的确切定义的对象一起使用时(这里可能就是这种情况),它们不能很好地工作。
有时,使用 aClass可能会起作用。您需要将类公开并实例化它,然后再传递它,但我怀疑它是否真的有效(出于同样的原因,类定义从一个应用程序到另一个应用程序不可见)。
另一个简单的解决方案是使用一个简单的Collection对象,将值作为项目添加到集合中。当然,添加/检索项目的确切顺序很重要。
对于User Defined Type (UDT) As Parameter In Public Sub In Class Module中的类似问题,有一些有趣的答案。它是关于 VB6 的,但它也应该在很大程度上适用于 VBA。
说了这么多,您也许可以通过将 Access 代码导入 Excel 来解决所有问题。
您可以在 Excel 中使用 DAO 或 ADO 并操作 Access 数据库,就像在 Excel 中一样,例如:
| 归档时间: |
|
| 查看次数: |
9486 次 |
| 最近记录: |