エクセル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と関連する良く見られている質問

QAccess2007のフォームウイザードでデータシートを作りたいが方法が分からない

Access2003では、フォームウイザードでデータシートを作れたが。
Access2007では、フォームウイザードでは単票のフォームしか作れない様だ。

どうやって、作るのだろうか。操作が分からない。

Aベストアンサー

どういう帳票が欲しいかわかりませんが一応例として....
まずAccess上部にある作成をクリックします。
フォームウィザードをクリックして使用するテーブルとフィールドを選択します。
次に表形式を選択すれば帳票形式でフォームが作成されます。

もう1つはその他のフォームから複数のアイテムを選択すれば帳票形式でフォームが作成されます。

QAccess2000 単票フォーム上のボタンを押すと、同じIDを持つフォームが開くよういしたい

Accessの初心者です。
本当に超がつく初心者ですので、解説もしてくださるととても嬉しいです。
宜しくお願いします。



請求書番号連番を取得するフォーム(テーブルも)があります。
請求書番号は特殊な為、現時点ではじか打ちで作成しています。
それとは別に、顧客ごとに請求データを入力するフォーム(テーブルも)があります。
その二つは、請求書番号でひもづけています。



<請求書番号連番取得フォーム/帳票>
・請求書番号
・請求日
・顧客ID

<請求データの入力フォーム_A社/単票> ※これがB社、C社と複数存在します。
・顧客ID
・請求書番号
・商品CD


<請求書番号連番取得フォーム/帳票>上にボタンをつくり、そのボタンを押すと、
同じ顧客IDを持つ<請求データの入力フォーム/単票>が開けたらな・・・と思っているのですが、
わかりますでしょうか・・・・。

どうか、宜しくお願い致します。



<請求書番号連番取得フォーム/帳票>
_________________________________________________________________
請求書番号|請求日 |顧客ID| 
_________________________________________________________________
09BB87ZZ1|2009/04/01|0001 |■(ボタン)
--------------------------------------------
09BS87AA2|2009/04/10|0003 |■(ボタン)
--------------------------------------------

↑この1行目の■(ボタン)を押すと、顧客ID「0001」の請求書番号「09BB87ZZ1」の単票フォームが開き、
(請求書番号欄に「09BB87ZZ1」が入っている。)
2行目の■(ボタン)を押すと、顧客ID「0003」のフォームを開く・・・というような動きです。


説明が下手で申しわけありません。
お願いします。

Accessの初心者です。
本当に超がつく初心者ですので、解説もしてくださるととても嬉しいです。
宜しくお願いします。



請求書番号連番を取得するフォーム(テーブルも)があります。
請求書番号は特殊な為、現時点ではじか打ちで作成しています。
それとは別に、顧客ごとに請求データを入力するフォーム(テーブルも)があります。
その二つは、請求書番号でひもづけています。



<請求書番号連番取得フォーム/帳票>
・請求書番号
・請求日
・顧客ID

<請求データの入力フォーム_A社/単票>...続きを読む

Aベストアンサー

#2です。

意味合いが違ってましたね。

「顧客ID」に対応した「フォーム名」情報がテーブルで作られているとします。
もしくは、「顧客ID」と A社、B社、C社 などが紐付けされ、その社ごとに「フォーム名」情報が得られるとすると

ボタンがクリックされた時の処理例)

Private Sub ボタン_Click()
  Dim sForm As String
  Dim sWhere As String
  Dim sArg As String

  sWhere = "請求書番号='" & Me.請求書番号 & "'"
  sArg = "'" & Me.請求書番号 & "'"
  sForm = DLookup("フォーム名","テーブル名/クエリ名","顧客ID='" & Me.顧客ID & "'")
  DoCmd.OpenForm sForm, , , sWhere, , , sArg
End Sub


呼ばれた各「請求データの入力フォーム」での処理

Private Sub Form_Open(Cancel As Integer)
  If (Me.Recordset.RecordCount = 0) Then
    Me.請求書番号.DefaultValue = Me.OpenArgs
    DoCmd.GoToRecord , , acNewRec
'☆    Me.ラベル1.Caption = "新規"
'☆  Else
'☆    Me.ラベル1.Caption = "既存"
  End If
End Sub


※「顧客ID」に対応した「フォーム名」情報ではなく、「会社名」なり「会社ID」が得られるのであれば以下のような感じかと
(会社IDが得られるとした場合)

Private Sub ボタン_Click()
  Dim sForm As String
  Dim sWhere As String
  Dim sArg As String

  sWhere = "請求書番号='" & Me.請求書番号 & "'"
  sArg = "'" & Me.請求書番号 & "'"
  Select Case DLookup("会社ID","テーブル名","顧客ID='" & Me.顧客ID & "'")
    Case 1
        sForm = "請求データの入力フォームA"
    Case 2
        sForm = "請求データの入力フォームB"
    Case 3
        sForm = "請求データの入力フォームC"
    Case Else
        sForm = "請求データの入力フォームETC"
  End Select
  DoCmd.OpenForm sForm, , , sWhere, , , sArg
End Sub

#2です。

意味合いが違ってましたね。

「顧客ID」に対応した「フォーム名」情報がテーブルで作られているとします。
もしくは、「顧客ID」と A社、B社、C社 などが紐付けされ、その社ごとに「フォーム名」情報が得られるとすると

ボタンがクリックされた時の処理例)

Private Sub ボタン_Click()
  Dim sForm As String
  Dim sWhere As String
  Dim sArg As String

  sWhere = "請求書番号='" & Me.請求書番号 & "'"
  sArg = "'" & Me.請求書番号 & "'"
  sForm = DLookup(...続きを読む

Q【Access】複数フォームを閉じる時の、選択処理について

Access Ver. : 2003
Windows Ver.: XP

Accessフォームの「閉じる時」処理で、下記のような工夫をした
いと考えております。

・フォームがひとつしか開かれていないとき、Accessを終了する
・複数のフォームが開かれている時、そのフォームのみを閉じる

そんなVBAコードがありましたら、教えてください。
何か参考になるページでも、かまいません。
どうぞ、宜しくお願いいたします。

Aベストアンサー

forms.count で開いているフォーム数を得て分岐
Application.quit

Access VBE のヘルプで、CurrentProject オブジェクト を見てみたら?

Qアクセスで、テキストボックスに値を入れてコマンドボタンを押すと、リストが検索した値で絞られるようにし

アクセスで、テキストボックスに値を入れてコマンドボタンを押すと、リストが検索した値で絞られるようにしたいです。例えば、ボックスにAAといれたら、AAのみが表示されるようにしたいです。

以下添付資料の通り、VBAを作ったのですが、うまく回りませんでした。どこがおかしいかをご指摘いただけませんでしょうか。

Aベストアンサー

図から察するに
フィルターをかけるのは、ボタンのあるフォームではなく、
そのフォームにあるサブフォームでしょうか。

ということなら

With Me.サブフォームコントロール名.Form
  .Filter = " ・・・・
  .FilterOn = True
End With

QACCESSフォームのボタン表示

ACCESSフォームのボタン表示

ACCESS2000で作成したフォームのボタンはACCESS2007でも変わりません。
ACCESS2007で一から作成したMDBは、ボタンの表示スタイルが異なります。
※ボタンの角が丸く、マウスカーソルをボタンの上に当てるだけで色が変わる。
ACCESS2000で作成したMDBをACCESS2007で上記のように表示させる設定は
あるのでしょうか?
いろいろ見ても、見当たらないのです。
よろしくお願いします。

Aベストアンサー

[Office ボタン] - [Accessのオプション] - [カレントデータベース] で
「フォーム上のコントロールに Windows のテーマを使用する」にチェック。

Qアクセスのフォーム作成でVBAがメモリー不足で開けない

アクセスのフォーム作成でVBAがメモリー不足で開けない。
2000MEでモメリー増設もしたのですが
他のアプリケーションが動いているわけでも
ないのに
何かうまい方法はないですか

Aベストアンサー

アクセスは使っていないので良くわかりませんが、
ある特定のファイルが開けないようであれば
ファイルが壊れている可能性があります。
この場合はアクセスにファイル修復機能があれば
修復を試みます。
ファイル修復機能がない場合やファイルが修復できない場合は
最初から作り直すしかありません。

アクセスの全てのファイルが開けないようであれば
システムリソースに問題があるかもしれません。
この場合は常駐ソフトなどを外す、
デスクトップのショートカットを削除する
画面設定を変えるなどして再起動してみてください。

データベースソフトやワープロソフトは
システムリソースを多く使うため常駐ソフトなどの影響で
起動しないことが良くあります。

なお、WINDOWS MEでは
システムリソースに限界がありますので
メモリを多くしてもシステムリソースとは無関係で
メモリを使い切るところまでいきません。

QExcelで作成されたフォームをAccessにコンバージョンしたいので

Excelで作成されたフォームをAccessにコンバージョンしたいのですが、フォームのインポートはできないのでしょうか?
Accessのフォーム作成画面から、インポートを選択していって、Excelファイルを開くのですが、シートしか選択できません。
コントロールのコピペもできないみたいですが。。。
Excelで作成されたフォームはAccessにはインポートできないのですか?
コーディングをそっくり使用することはできなくても、せめてフォームのデザインはコピーしたいのですが。。。(> <)
よろしくお願いします。m(_ _)m

Aベストアンサー

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはどうでしょう。
http://www.accessclub.jp/bbs2/0080/beginter24987.html
同じ発想の人はいることはいるが。
ーー
VBAとVBのフォームはコードで扱う上で微妙に違うし、アクセスVBAとエクセルVBAでは違う点も多い。
またコントロールの生成もコードで行う方法は隠して、易しいD&Dやマウスによる移動、プロパティボックスでの入力にして易しくしています。
エクセルのUserForm1のフォームも本格的なものではないサービスのような気がする。エクセルで第3者を巻き込んだ業務の開発までは予定して無いように推測する(何でもエクセル的な過大期待が横行している)。
それにエクセルでのセルとの連携をつけた機能LinkedCell、FillいstRangweなどはエクセル特有で、RecordSourceのSQL指定やフォーム指定はアクセス特有と思います。
外観を決めるサイズや書式関係は(エクセルでフォームやコントロールの)プロパティーメモー(アクセスでのフォームやコントロールの)プロパティ設定でやや似せて移せるかもしれない。
エクセルバージョン内の相違、エクセル・アクセルで使えるコントロールの種類の相違などもあります。

質問者はプロかプロ経験者ですか。でないならこんな勉強は試みないほうが良いでしょう。
市販の書物や初心者向けの講習で説明される話題ではない。プロで会社にその辺の経験者がいたりすれば聞けるでしょうが。原理的には最熟練者の人は変換プログラムは組めるかもしれませんが、そのレベルの人は、この質問コーナーを読んでないでしょうし、無料で教えるスキルではないと思います。
WEBの記事も多分少ないでしょう。
Googleででも「エクセル フォーム アクセス 移行」で出てくる記事を参考にしてはど...続きを読む

Qフォームを開くコマンドボタンを作りたい

フォームを開くコマンドボタンを作りたいのですが
環境はWindowXPでACCESS2003を使っています

フォームをデザインで開いています
ここで、別のフォーム:NewFormを開きたいのですが
新しい、コマンドボタンを配置し
これの、プロパティでイベントタブで
クイック時、を選択し
 ここ、NewFormを開くロジックを入れたいのですが
プロラティ画面のクイック時、の行の右の方に(・・・)点々があり
ここをクイックすると
 ・式ビルだ
 ・マクロビルだ
 ・コードビルだ
の選択画面がでます
このコードビルだを選択すると
 いきなり、
Private Sub ・・・・click()

End Sub
と出てしまいます
そこで質問ですが
以前やったときは
いきなり関数がでるのでなく
何をしたいか、例えば、フォームの操作、データを入力する・・・
 と出て
フォームの操作を選択すると
 フォームを開く
 フォームを閉じる
 ・・
を選択して
 というような、構造になっていました
質問はここなんですが、
 コードビルダを選択したときに、いきなり関数でなく
質問形式のビルダを出すのは、そうしたらいいのでしょうか
よろしくおねがいします

フォームを開くコマンドボタンを作りたいのですが
環境はWindowXPでACCESS2003を使っています

フォームをデザインで開いています
ここで、別のフォーム:NewFormを開きたいのですが
新しい、コマンドボタンを配置し
これの、プロパティでイベントタブで
クイック時、を選択し
 ここ、NewFormを開くロジックを入れたいのですが
プロラティ画面のクイック時、の行の右の方に(・・・)点々があり
ここをクイックすると
 ・式ビルだ
 ・マクロビルだ
 ・コードビルだ
の選択画面がでます
このコー...続きを読む

Aベストアンサー

コマンドボタンウィザードを出したいのなら
フォームデザインビューのツールボックスで
コントロールウィザードボタン(杖の絵)をONにして
ボタンをフォーム上にドロップします

QVBからmdbファイル(Access2000)の特定のフォームを開きたい?

VisualBasicのフォームに配置したコマンドボタンをクリックすることで、特定のmdbファイルをAccess2000で開き、開くと同時に特定のフォームが表示されるようにしたいのですが、こんなことできますか?できるとすればどのようにすればよいのですか?

例えば、C:\商品管理\在庫一覧.mdbにフォーム商品があるとしたとき、
Form1のcommand1をクリックすると、C:\商品管理\在庫一覧.mdbがAccess2000で開き、フォーム商品が最初に表示されるようにしたいのですが・・・
ちなみに、Access2000の起動時の設定では他のフォームが最初に開くようになっています。
よろしくお願いします。

Aベストアンサー

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visible = True

'表示させたいフォームを開く
acs.OpenForm "フォーム名"


こんな感じで。

最後に、Accessを終わらせるときは

'オブジェクトの開放
Set acs = Nothing

で、オブジェクトを開放してください。

オートメーションを使ってAccessを制御しましょう。
で、他のフォームが最初に開くようになっていることなので、最初に開くフォームを閉じてからAccessを表示するようにすればいいと思います。

Dim acs as Object

'AccessのApplicationオブジェクトを取得する。
Set acs = CreateObject("Access.Application")

'c:\test.mdbを開くacs.OpenCurrentDatabase "c:\test.mdb"

'起動時に開かれたフォームを閉じる
'2はacForm定数のこと
acs.Close 2,"フォーム名"

'Accessを表示させる
acs.Visibl...続きを読む

Qアクセス2003のフォーム上のコマンドボタンについて。

アクセス2003のフォームで一覧を作っています。その中の1つをクリックすると詳細画面に移動させようとコマンドボタンをおいたのですが、下記のエラーが出ます。対処法を教えてください。
エラーの内容です↓
テーブル’業者登録’はほかのユーザーが排他的に開いているか、既にユーザーインターフェイスを介して開いているので、プログラムによって操作することはできません。
ACCESSのバージョンは2003です。
’メンテナンス進捗’というフォーム上に一覧があり、それぞれに詳細ボタンを置き、その詳細ボタンをクリックするとそのIDに見合ったメンテナンスの画面を開きたいです。
主テーブルは‘メンテナンス‘で副テーブルには’機器登録’と’業者登録’があります。‘メンテナンス‘と’機器登録’は機器管理IDで結ばれ、と’機器登録’と’業者登録’は業者IDで結ばれています。このリレーションの仕方が悪いのでしょうか?分かりづらくて申し訳ありません。

Aベストアンサー

少し話を整理しません

テーブルは
「メンテナンス」
「業者登録」
「機器登録」
の3つですね

一覧フォーム「メンテナンス進捗」のソースは?
「メンテナンスの画面」フォームのソースは?


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

人気Q&Aランキング