2009-03-27 6 views
1

アクセスフォームが開いていることを確認する最も良い方法は、Excel VBAを使用してテキストボックスの値を取得することです。Excel VBAからMS Accessフォームの値を取得

私は、MS Accessアプリケーションが実行されているかどうかを確認する方法があります。そして、特定のフォームが開いていることを確認したら、このフォームのテキストボックスフィールドから値を取得します。ここで

If MSAccess.([Application name]).Forms("FormName").isOpen then 
    MyVar = MSAccess.([Application name]).Forms("FormName")![PO Number] 
    end if 
+0

より良い答えを得るために、例を追加したいかもしれません。 –

+0

私はこれを答えに入れません。なぜなら、質問には本当に答えないからですが、これは作ってみるととても悪い考えです。私のアドバイスは、あなたがしようとしていることに接近するためのより良い方法を見つけることです。あなたが詳細を述べるなら、私はより良いアプローチについてアドバイスをしようとします。 – JohnFx

答えて

1

よう

何かがいくつかのサンプルコードです。

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ 
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
Public Declare Function ShowWindow Lib "user32" _ 
    (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long 

Public Const SW_SHOW = 5 
Public Const GW_HWNDNEXT = 2 

Sub FindAccess() 
Dim WinHandle As Long 
Dim objAc As Object 

'Form title' 
FindWindow vbNullString, "Images" 

'use it' 
ShowWindow WinHandle, SW_SHOW 

'to get the application' 
Set objAc = GetObject(, "Access.Application") 

'and print a control's value' 
Debug.Print objAc.Forms("frmImages").Controls("Description") 

Set objAc = Nothing 
End Sub 
+0

ありがとうございました。 – THEn

1

@ RemouのDebug.Printは、フォームが開いていないとエラーになります。

Most Access開発者がデータベースにIsLoaded()関数をインポートして使用します。

Function IsLoaded(ByVal strFormName As String) As Boolean 
    ' Returns True if the specified form is open in Form view or Datasheet view. 
    Const conObjStateClosed = 0 
    Const conDesignView = 0 

    If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then 
     If Forms(strFormName).CurrentView <> conDesignView Then 
      IsLoaded = True 
     End If 
    End If 
    End Function 

エクセルから、あなたはこのようにそれを書き換えることができることを使用するには:(5月または元のMS版から編集することはないかもしれませんが)これはそれの私のバージョンのコード

Function IsLoaded(ByVal strFormName As String, objAccess As Object) As Boolean 
    ' Returns True if the specified form is open in Form view or Datasheet view. 
    Const conObjStateClosed = 0 
    Const conDesignView = 0 
    Const acSysCmdGetObjectState = 10 
    Const acForm = 2 

    If objAccess.SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> conObjStateClosed Then 
     If objAccess.Forms(strFormName).CurrentView <> conDesignView Then 
      IsLoaded = True 
     End If 
    End If 
    End Function 

(私はExcelからそれをテストしませんでしたが、あなたは考えを得る)

関連する問題