0

現在のレコードの値を Excel シートに正常に渡す Access データベースがあります。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 レコードの値がシート「ホーム」の指定されたセルに入力される前に呼び出されていると思います。

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

私が言うように、アクセス レコードのすべてのフィールド値は問題なく入力されます。サブルーチン自動計算に依存しない Excel ワークブックの部分は、ワークブックの自動計算がオンになっていると期待どおりに計算されます。

セルにデータが入力されたにサブルーチンがトリガーされるだけで、問題が発生します。

最終的には、計算結果を Access レコードのいくつかの追加フィールドに戻してみたいと思いますが、先を越さないように注意する前に、そのようなことを試みたことはありませんでした。

ご覧いただきありがとうございます

4

1 に答える 1

1

Workbook_Activate() を使用する代わりに、データの入力が完了した後で Access コードから直接 Excel マクロを実行してみてください。これは、次のようなコードを Access マクロの末尾 (片付け部分の前) に配置することで実行できます。objXLBook.Run "Rategenerator"

その正確なコードが機能するかどうかはわかりませんが、その方法の詳細については、こちらを参照してください。

于 2012-10-07T13:58:34.583 に答える