从MS Access记录传递值后,在excel中运行子过程

从MS Access记录传递值后,在excel中运行子过程,excel,ms-access,vba,Excel,Ms Access,Vba,我有一个Access数据库,它成功地将我当前记录中的值传递到Excel工作表。为了计算我的Excel表格,我需要调用一个子例程 我想我的问题是事情发生的顺序 我尝试使用以下代码从MyWorkbook调用例程(在Excel中) Private Sub Workbook_Activate() On Error Resume Next With Application .DisplayFullScreen = True .CommandBars("Worksheet Menu Bar

我有一个Access数据库,它成功地将我当前记录中的值传递到Excel工作表。为了计算我的Excel表格,我需要调用一个子例程

我想我的问题是事情发生的顺序

我尝试使用以下代码从
MyWorkbook
调用例程(在Excel中)

Private Sub Workbook_Activate()
On Error Resume Next

With Application
    .DisplayFullScreen = True
    .CommandBars("Worksheet Menu Bar").Enabled = True
    .ScreenUpdating = False
End With
Call Rategenerator    
Sheets("home").Select
End Sub
我认为,在访问记录中的值填充我的工作表“home”中的指定单元格之前,调用例程
Rategenerator

是否有办法强制子程序
Rategenerator
在表中填充值后执行

当前Access记录中用于填充Excel工作表的代码如下所示:

Dim objXLApp  As Object
Dim objXLBook  As Object
Dim r As Object


'check whether Excel is open before opening another copy.
Set objXLApp = CreateObject("Excel.Application")
Set objXLBook = objXLApp.Workbooks.Open("e:\!!!Access SHare Folder\Ogden v7.1.1.5        final.xls")
objXLApp.Application.Visible = True

'Specify Sheet
With objXLBook.Sheets("home")
.unProtect Password:="xxxxxxxx"

.Cells(15, 6).Value = Me.DateofAcc
.Cells(16, 6).Value = Me.DOB
.Cells(17, 6).Value = Me.todaysDate
.Cells(18, 6).Value = Me.Gender
.Cells(19, 6).Value = Me.RetireAge
.Cells(22, 6).Value = Me.DeferredAge
.Cells(28, 6).Value = Me.ContEmpPre
.Cells(29, 6).Value = Me.ContDisPre
.Cells(30, 6).Value = Me.txtContOveridePre  'taken from the txtbox not the checkbox
.Cells(31, 6).Value = Me.ContOverideValPre
.Cells(28, 7).Value = Me.ContEmpPost
.Cells(29, 7).Value = Me.ContDisPost
.Cells(30, 7).Value = Me.txtContOveridePost 'taken from the txtbox not the checkbox
.Cells(31, 7).Value = Me.ContOverideValPost
End With

With objXLBook.Sheets("LOETblCalx")

.Cells(19, 17).Value = Me.SalaryNet1
.Cells(20, 17).Value = Me.Residual1
End With

''Tidy up
Set objXLBook = Nothing
Set objXLApp = Nothing

End Sub
正如我所说的,访问记录中的所有字段值都不会出现问题。Excel工作簿中不依赖子程序“自动计算”的部分在工作簿中打开“自动计算”时按预期自动计算

这只是在填充单元格后触发子程序,这给我带来了一些困难

最终,我想尝试将计算结果返回到Access记录中的一些附加字段中,但之前我从未尝试过类似的操作,我很小心,不会超过自己


感谢您查看

而不是使用工作簿_Activate(),请尝试在Excel宏完成填充后直接从Access代码运行它。这可以通过将类似的代码放在Access宏的末尾(在整理部分之前):
objXLBook.Run“Rategenerator”


我不确定这段代码是否适用于您,但请参阅以了解有关如何执行的更多详细信息

如何从Access填充值?由于生成速率是最后一个要执行的任务,我认为工作簿关闭是适当的事件。抱歉,我不理解您的评论;也许你不明白我的意思。我的意思是:尝试在关闭(取消为布尔值)之前将
私有子工作簿\u Activate()
替换为
私有子工作簿\u Activate()
,这样例程将在末尾而不是开头调用。您好,不确定这对我是否有效,因为一旦存储的Access字段值在Excel中填充,我将尝试向用户提供最终计算的单元格值,而不是工作簿上次保存状态中的值。Access是否正在关闭工作簿?我没有通过Access对此进行过测试,但是如果Excel宏使用工作簿\u BeforeClose例程打开和关闭工作簿,则会调用该例程。这听起来就像是我所要做的,但我尝试了一次错误438对象不支持此方法属性?我已经阅读了这篇链接文章,它对我来说很有意义,所以我很困惑为什么它会给我的项目带来不稳定。我认为.Run属性属于应用程序而不是工作簿,您是否可以尝试objXLApp.Run“Rategenerator”?肯定发生了一些事情,但Excel工作表只是锁定,完全没有响应。难道连重画都没有吗?从Excel中的带VBA窗口运行相同的宏,一切正常。非常odd@user1726291在2003年的“常规选项”选项卡下有一个名为“忽略其他应用程序”的选项,但在不同的版本中可能会有所不同,请尝试取消选中该选项以查看它是否会有所不同。