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

时间:2012-10-07 07:53:31

标签: excel-vba access-vba vba excel

我有一个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

我认为,例程Rategenerator在来自Access记录的值填充我的工作表“home”中的指定单元格之前被调用。

在工作表上填充值后,有没有办法强制子例程Rategenerator执行?

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

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

正如我所说,Access记录中的所有字段值都没有问题。不依赖于子例程的Excel工作簿的部分自动计算,并且打开了工作簿中的自动计算。

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

最终我想尝试将计算结果反馈到Access记录中的一些其他字段中,但在我小心不要超越自己之前从未尝试过类似的事情。

感谢您寻找

1 个答案:

答案 0 :(得分:1)

在完成填充后,尝试直接从Access代码运行Excel宏,而不是使用Workbook_Activate()。这可以通过在Access宏的末尾(在整理部分之前)放置类似于此的代码来完成:objXLBook.Run "Rategenerator"

我不确定这段确切的代码是否适合您,但请参阅here了解有关如何操作的详细信息。