質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

3993閲覧

AccessVBAで類似フォームのコントロール一括変更

MP430

総合スコア40

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2017/04/21 01:13

編集2017/04/21 04:22

###前提・実現したいこと
Accessで社内で使っているフォームの変更依頼がありました。前任者がAccessのデザイナでシステムを構築していた為、類似フォームが数十個あり、手動で変更するのは面倒です。そこで質問です。例えば標準モジュールからフォームのコントロールを呼び出し変更、追加できないでしょうか?
フォーム名を指定して個別に変更、追加したいです。

###発生している問題・エラーメッセージ

型が一致しない
フォームが見つからない
###該当のソースコード
Public Function MemoAdd()

Dim ctr As Control Set ctr = CreateControl([Form_ALL注文在庫 F], acLabel,acDetail, , , 20, 0, 10, 1.5) DoCmd.OpenForm [Form_ALL注文在庫 F], acDesign

End Function
###試したこと
Form名をインテリセンスセンスで表示されたフォーム名を選択しましたが、上記エラーとなります。フォーム名をForm_を削除するとフォームが見つかりませんと出ます。
どのように解決すればいいかアドバイスをお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
windows10
Access2016
VBA
###追記
Public Function MemoAdd()
Dim frm As [Form_ALL注文在庫 F]
Set frm = [Form_ALL注文在庫 F]
Dim ctl As Control
DoCmd.OpenForm frm.Name, acDesign

Set ctl = CreateControl(frm.Name, acLabel)

End Function
上記コードに変更したところ
CreateControlのfrm.nameが
プロシージャの呼び出しまたは、引数が不正ですのエラーに変わりました。
set ctlの前まではコードに問題なさそうです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「型が一致しない」というエラーが起こる状態でそのエラーの解決に向けて試行錯誤が必要かと思います。
エラーの意味は予想がついていますか?これは、想定されている変数の型とは異なる型がどこかに指定されているために正常に処理ができず、「型が一致しない(ので、型を想定されている通りに指定して下さい)」ということです。

どこでエラーが発生しているのかわかりませんが、恐らく以下の箇所ではないでしょうか。

VB

1Set ctr = CreateControl([Form_ALL注文在庫 F], acLabel,acDetail, , , 20, 0, 10, 1.5)

MSDNによると、CreateControlの戻り値はApplication オブジェクトのようですので、

VB

1Dim ctr As Control

VB

1Dim ctr As Application

に変更してみてはどうでしょう?あとはacLabelを100に、acDetailを0に。小数点を削除して整数に。引数の数が合っているか。試すとしたらそのあたりかと思います。

投稿2017/04/21 03:16

akabee

総合スコア1947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MP430

2017/04/21 04:25

回答ありがとうございます。 Applicationに変更したら、 指定のコントロールを追加、名前を変更、または削除することができません。 に変わりました。 コードを追記の部分に変更しています。
akabee

2017/04/21 04:38

それっぽい情報がありました。http://www.accessclub.jp/bbs3/0015/superbeg6367.html まず、フォームにはAllowDesignChangesという属性があるようです。これがtrueになっているかどうかが第一チェックポイントですね。なっていなければfrm.AllowDesignChangesで変更できると思います。 次に、フォームのコードから自身のフォームに対し追加することはできないようです。その場合ダミーフォームを作るなど工夫が必要となるようですね。参考にしてみてはいかがでしょう。
MP430

2017/04/21 04:57

情報ありがとうございます。 URL私も確認していました。 解決しましたのでソースを載せておきます。 Public Function MemoAdd() Dim fName As String fName = "ALL注文在庫 F" Dim ctl As Control DoCmd.OpenForm fName, acDesign Set ctl = CreateControl(fName, acLabel) End Function
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問