エクセルVBAでボタンを作成し、そのボタンを押すと、アクセスのフォームが開き、そこでデータを入力したいのですが、どのようにすればよいのでしょうか?

知っている方がいましたらご教授ください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

これも丸投げの質問。

他人を当てにして難しい問題をやろうとしていると思う。コードを貼り付けて動きましたのことではないはず。
なぜエクセルから、ACCESSに入るのをVBAでやるのか。初心者は別ソフトの連携など、相当勉強してからするものだと思うが。
WEBを照会すると、下記ぐらいはコード例が出ている。そういうのを調べたのかな。この先こそ質問になる事項ではないかと思う。疑問続出すると思う。
ーー
エクセルのシートにコマンドボタンを1つ貼り付け。
編集モードでダブルクリックして、クリックイベントで
Private Sub CommandButton1_Click()

End Sub
ガ出る。
ーーー
そこでコードだが
私の場合ACCESSに、社員2.MDBがある。
そこにはフォームで「フォーム1」と言うフォームを作っていて
そこにはテキストボックス2つとコマンドボタンを1つ設けている。
テキスト0
テキスト2
コマンド5
の名前になっている。
コマンド5のクリックイベントは下記のようになっている。
ーーー
Private Sub CommandButton1_Click()
Dim appAC As Object
'Accessのインスタンスをファイルから作成
Set appAC = CreateObject("Access.Application") 'GetObject("E:/Gabu/M1.mdb")

'見えるように
appAC.Visible = True
appAC.OpenCurrentDatabase CurDir & "\" & "社員2.MDB"
'フォームをモーダル表示
appAC.DoCmd.OpenForm "フォーム1", acNormal, , , acFormEdit, acDialog
'終了処理
'appAC.Quit
'Set appAC = Nothing
End Sub
ーーー
Private Sub コマンド5_Click()
Me.テキスト0.SetFocus
MsgBox Me.テキスト0.Text
Me.テキスト2.SetFocus
MsgBox Me.テキスト2.Text
End Sub
エクセルシートのボタンをクリックすると
フォーム1が現れ
テキスト0 に東京都
テキスト2 に中野区
と入れて、コマンド5をクリックすると
東京都、中野区が表示される。
ここらぐらいは出来たから、コントロール名を質問者の場合に変えて
やってみて。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございました。

只今、会社でアクセスを習得を任されたのですが、未だどのような事ができるのか、手探りでやっております。これを調べるのにも相当悩んでいました。
また、上記のコードを調べて理解できました。
どうもありがとうございました。

お礼日時:2009/05/18 17:29

ほとんど前の方と一緒です。


以下を実行する仕組みは作ってください。

Private Sub test1()
  Dim acApp As Object

  Set acApp = CreateObject("Access.Application")
  acApp.OpenCurrentDatabase "E:\Access\tmp\HogeHoge.mdb"
  acApp.Visible = True
  acApp.UserControl = True

  acApp.DoCmd.OpenForm "フォーム名"

  Set acApp = Nothing
End Sub

mdb オープンで起動されるフォームが設定されていれば、そのフォームは開かれるようなので、
acApp.DoCmd.Close 2, "フォーム名", 2
で閉じてください。

数字の意味合いは、Accessでいう
DoCmd.Close acForm, "フォーム名", acSaveNo
    • good
    • 0
この回答へのお礼

ご返答ありがとうございました。

只今、会社でアクセスを習得を任されたのですが、未だどのような事ができるのか、手探りでやっております。これを調べるのにも相当悩んでいました。
また、上記のコードを調べて理解できました。
どうもありがとうございました。

お礼日時:2009/05/18 17:30

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel VBAからAccessマクロを実行したい

Excel VBAからAccessマクロを実行する方法を知っている人がいましたら
教えてください。
よろしくおねがいしまっす!

Aベストアンサー

こんにちは

私もExcelVBAからACCESSのマクロを実行したことはないのですが以下の方法で
一応マクロは実行されました。

----------------------------------------------------------------

DB2.MDBには"メッセージ"というマクロが存在します。
"メッセージ"というマクロはメッセージボックスを表示しています

Dim objAccess As Object

''ACCESSオープン
Set objAccess = CreateObject("Access.Application")
Call objAccess.OpenCurrentDatabase("C:\db2.mdb")

'マクロの実行
objAccess.DoCmd.RunMacro "メッセージ"

''ACCESSクローズ
objAccess.CloseCurrentDatabase
Set objAccess = Nothing

----------------------------------------------------------------------

もっと良い方法があるのかもしれません

参考にしてみてください。

こんにちは

私もExcelVBAからACCESSのマクロを実行したことはないのですが以下の方法で
一応マクロは実行されました。

----------------------------------------------------------------

DB2.MDBには"メッセージ"というマクロが存在します。
"メッセージ"というマクロはメッセージボックスを表示しています

Dim objAccess As Object

''ACCESSオープン
Set objAccess = CreateObject("Access.Application")
Call objAccess.OpenCurrentDatabase("C:\db2.mdb")

'...続きを読む

QエクセルVBAでアクセスファイルを開く方法

いろいろ検索してコピペ等でやってみてもだめでした。

エクセルVBAで、エクセルファイルやEXEファイルを開く方法は簡単なのに、
アクセスファイルの開き方がわかりません。

ただ開くだけなのですが、簡単な記述の仕方はありませんか?

Aベストアンサー

Dim acApp As Object

Private Sub CommandButton1_Click()
On Error GoTo Err_CommandButton1_Click
  
  Set acApp = CreateObject("Access.Application")
  acApp.OpenCurrentDatabase "C:\Temp\Db2.mdb"
  acApp.Visible = True
Exit_CommandButton1_Click:
  Exit Sub
Err_CommandButton1_Click:
  MsgBox Err.Description
  Resume Exit_CommandButton1_Click
End Sub

Private Sub CommandButton2_Click()
On Error GoTo Err_CommandButton1_Click
  acApp.CloseCurrentDatabase
  acApp.Quit
Exit_CommandButton2_Click:
  Exit Sub
Err_CommandButton2_Click:
  MsgBox Err.Description
  Resume Exit_CommandButton2_Click
End Sub

エクセルのバージョンが問題かと思いますが・・・。
昨今は、Access から Excel をこのようにして開いています。
その逆バージョンです。

Dim acApp As Object

Private Sub CommandButton1_Click()
On Error GoTo Err_CommandButton1_Click
  
  Set acApp = CreateObject("Access.Application")
  acApp.OpenCurrentDatabase "C:\Temp\Db2.mdb"
  acApp.Visible = True
Exit_CommandButton1_Click:
  Exit Sub
Err_CommandButton1_Click:
  MsgBox Err.Description
  Resume Exit_CommandButton1_Click
End Sub

Private Sub CommandButton2_Click()
On Error GoTo Err_CommandButton1_Click
  acApp.CloseCurrentD...続きを読む

QEXCEL VBA から ACCESS を操作したい

EXCEL VBA から ACCESS(mdb)を操作したいのですが、
参考になるサイトがあれば教えて頂けないでしょうか?

一定時間毎にセルA1の値をInsertして蓄えていきたいのです。

あと、DAO と ADO どちらが良いかも教えて頂けないでしょうか?
よろしくお願い致します。

Aベストアンサー

こんにちは。
>参考になるサイト
といえば↓こちら辺りでしょうか。
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130.html
http://homepage2.nifty.com/inform/vbdb/
http://www.ylw.mmtr.or.jp/~itcarrot/vbscriptsql/index.html#EXADOMDB
http://support.microsoft.com/kb/257819/ja
>DAO と ADO どちらが良いか
も含め、上記サイトを参考にしてみてください。

QAccessのマクロでモジュールを実行させたい。

Access2002を勉強中の初心者です。

AccessでDB1という名前のデータベースを作成し、その中で、モジュール1というモジュールを作成しました。これを実行するマクロを作成したく、次のようにマクロを作成しました。
マクロのデザイン画面でアクションに「プロージャの実行」を選択、プロージャ名入力覧の右側の...のボタンを押して式ビルダ画面を表示、ここの「関数」フォルダを開いてDB1を選択、表示されたモジュール1を貼り付けてOK。
しかし、このマクロを実行すると、次のエラーとなります。「DB1 指定されたDB1が見つけることができない関数名が含まれています」

根本的に方法が間違っているのでしょうか?
アドバイスをよろしくお願いします。

Aベストアンサー

#1です。

ちょっと時間ができたので、Accessのヘルプで、
 "RunCode/プロシージャの実行" アクション
についてのトピックを見てみました。

結論から言うと、基本的な考え方が間違っているみたいです^^;。

「プロシージャの実行」アクションでは、「Function」プロシージャを指定するようです。
Subプロシージャではエラーになります。


つまりご質問の件では、
「Subプロシージャを呼び出すFnctionプロシージャ」をまず書かなけれえばならない。
そして、マクロのアクションでは、あらためてこのFunctionプロシージャを指定しなければいけません。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QExcelのマクロでAccessのmdbを起動したい

タイトルどおりです。
Excelマクロで試してみたところ、「ExcelからはAccessを起動できません」という旨のメッセージが出てしまいました。

Aベストアンサー

ツールで、参照設定して、Microsoft Access xx.0 Object Library

Sub AccessOpen()
Dim appAcc As Access.Application
Dim myPath As String
Set appAcc = New Access.Application
myPath = "C:\"  '要設定
With appAcc
 .OpenCurrentDatabase myPath & "test1.mdb", False
 '処理
 .Quit
End With
Set appAcc = Nothing
End Sub

ただ、単独で、mdbファイルを開けるのでしたら、Excelから、MsQuery でも開けられるはずです。また、通常は、ADOで、mdb ファイルを開けますね。

Q【Excel VBA】マクロでExcel自体を終了させたい

環境:WindowsXP、Excel2003

マクロでエクセルを終了(ブックを閉じて、アプリケーション自体も終了)させたいのですが、以下のコードではアプリケーションが閉じてくれません。

ThisWorkbook.Close
ExcObj.Quit
Application.Quit

どこか悪いところはありますでしょうか?

よろしくお願いします。

Aベストアンサー

普通に考えれば質問者のコードで上手くいきそうですが
hana-hana3さんの回答にもあるようにThisWorkBook.Closeでコード終了となりますので
Application.QuitをThisWorkBook.Closeの前にもってこないといけません。
Application.Quitはそれがあるプロシージャのコードが全て終わるまで
その実行を保留するちょと特別動作をします。

'-------------------------------------
 Application.Quit
 ThisWorkbook.Close
'-------------------------------------
 
 

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QACCESSでフォームを使って、テーブルを参照、データ入力、データ更新をしたいのです

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入力画面
       ↓
レコード番号を入れると、そのレコードのデーターが画面に表示され、
その画面で修正可能
       ↓
 保存 ボタンで保存

という流れです。

レコードナンバーはIDを使おうと思っています。

データの量が莫大な為、コンポボックスなどは使えません。

できるだけ、VBAなどは使わずに作りたいです。

よろしくお願い致します。

フォームを使って、テーブルを参照、データ入力、データ更新をしたいのです。

売上テーブル

 ID   商品コード  日付    金額 
 1    G1     20080101  532153
 2    G1     20080101  564281
 3    G1     20080301  538123
 4    J4     20080301  124531
 5    J4     20080302  125483

ID:オートナンバー 商品コード:数値型 日付:数値型 金額:数値型

これを使い、
フォームではまず

レコードナンバーを入...続きを読む

Aベストアンサー

まずそのテーブルを基にしてフォームを作成します。
そのフォームのヘッダー部分にテキストボックスを配置後、一旦
上書き保存。
フォームのレコードソースを
SELECT *
FROM テーブル名 WHERE ID=[Forms]![フォーム名]![テキストボックス名]
とします。
次にテキストボックスの更新後処理に
Me.Requery
とすれば完成です。
フォームを開いてテキストボックスにID入力後エンターしてください。

保存に関しては、コマンドボタン作成後クリック時イベントに
DoCmd.RunCommand acCmdSaveRecord
とすれば良いでしょう。

この手のモノは検索すれば相当数ヒットするので、そちらを参考にされるのもよろしいかと。

Qエクセルからアクセスのプロシージャーを実行させるには?

エクセルの標準モジュールには→エクセル側のプロシージャー
アクセスの標準モジュールには→アクセス側のプロシージャー
と言う名前のプロシージャーが作成されています。
これをどちらもエクセル側で実行させることは出来ないでしょうか?

「アクセス側のプロシージャー」ではアクセス側の処理が実行されます。
でもできればエクセル側のコマンドボタンを一回押すだけで
エクセルとアクセスの両方の処理を実行させたいです。

エクセルの標準モジュールには
Sub エクセル側のプロシージャー()
Call アクセス側のプロシージャー
End Sub
これを実行すると
コンパイルエラーになります。

どうすれば一度で二つのアプリケーションのプロシージャーを実行させることが可能でしょうか?
よろしくお願い致します。

Aベストアンサー

> Application.Run で実行してみましたがエラーになってしまいました。。。

それは、Excel 側の話ですか? Access 側?

Excel の標準モジュールで単に Application と書いたら、それは Excel.Appliaction
のことです。
Excel 側から Access のプロシージャを実行するには、事前に Access Application
を取得し、Access.Application の Run を実行します。

' ■ Excel VBA ■

' // 標準モジュール
Sub Accessのプロシージャを呼び出す()

  Dim accApp As Object ' // Access.Application
  
  ' // Access.Application を取得する
  Set accApp = GetObject("C:\test.mdb")
  If Not accApp Is Nothing Then
    accApp.Visible = True
    accApp.Run "TestProcedure"
  End If
  
  Set accApp = Nothing
  
End Sub


' ■ Access VBA -- C:\test.mdb を作成 ■

' // 標準モジュール
Sub TestProcedure()
  MsgBox "Call されました"
End Sub

> Application.Run で実行してみましたがエラーになってしまいました。。。

それは、Excel 側の話ですか? Access 側?

Excel の標準モジュールで単に Application と書いたら、それは Excel.Appliaction
のことです。
Excel 側から Access のプロシージャを実行するには、事前に Access Application
を取得し、Access.Application の Run を実行します。

' ■ Excel VBA ■

' // 標準モジュール
Sub Accessのプロシージャを呼び出す()

  Dim accApp As Object ' // Access.Application
  
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報