- ベストアンサー
VBAについての全般的な初心者の質問です
VBAについての疑問です、宜しくお願いします。 VBAのフォームをユーザフォームから作成しました。 ボタン、テキストボックス、コンボボックス等を貼り付けて、コードを見てみると、 ボタン、テキストボックス、コンボボックスのイベントが発生したときのみのコードしか見えません。 複数のフォーム(仮にA、B、Cとします)を作成すると各フォームの名前がオブジェクト名となって いました。 疑問点1:全体を合わせたものが、標準モジュールというものになるのでしょうか。 最初のオブジェクト作成時には、標準モジュールとユーザーモジュールのどちらを選択す るのでしょうか。また、両者は何がどう違って、どのように使い分けるのでしょうか。 また、オブジェクト、モジュール、プロシジャとの関係はどうなのでしょうか。 疑問点2:各オブジェクト間で共通で定義されるグローバル変数、配列みたいなものは、一体、どこ で宣言してやるのでしょうか。 単にボタンとかテキストボックスのイベント発生文前に書いてやるだけでよいのでしょう か。 各オブジェクト間で共通で呼び出したいサブルーチン、メソッドは何処に書いてやれば よいのでしょうか。(そのような呼び出し方が許されているという前提での質問です。) 疑問点3:フォーム自身を作成した(宣言した)文(コード)、フォームに貼り付けた、ボタン、テキスト ボックス、コンボボックスのAdd文(コード)、また、例えば、これらを着色した文(コード)等 を見ることは出来ないのでしょうか。 フォーム自身をInitializeする必要のある場合とは、どのような場合でしょうか。 この場合は、フォーム(オブジェクト)の名前に関係なく、「Private Sub UserForm_Initialize()」でなくてはならないのでしょうか。 フォーム自身のスクロールバー等の設定は一体何処に書いてやればいいのでしょうか。 プロパティからの設定しか許されてないのでしょうか。 疑問点4:Micro Script Editorにはそれが書かれているようですが、何故かHTMLで書かれていま す。 何故VBAで書かれていないのでしょうか。 コントロールは表示されますが、フォームを呼び出すツールとか、メニューが何処にも 見当たりません。 以上長文ですが、宜しくお願い致します。
- eiji_0035
- お礼率46% (166/354)
- オフィス系ソフト
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >VBAについての全般的な初心者の質問です もし、その質問が初心者の質問でしょうか、私にはそう思えません。自分がVBAを書いていて疑問になることをまとめたということでしょうけれども、1の内容など、経験者がプロレベルの人に聞くような内容で、簡単なものではありません。私が、そのようなことを、まともに教えられるような立場でもありません。 それと、本当に、今の自分が必要な質問に絞ってください。欲張っても、質問の内容が甘くなっているし、回答側も全部を答えようとすると、そのポイントが甘くなってしまうように思います。 >全体を合わせたものが、標準モジュールというものになるのでしょうか。 VBAプログラマで、UserForm上で、標準モジュールのサブルーチンやPublic ステートメントを使って、コードを書く人がどのぐらいいるのでしょうか。ユーザー定義関数は別です。UserForm のコードは、基本的に、UserForm モジュールに書きます。 あえて標準モジュールを使うなら、それは、UserForm が複数ある場合や複雑な処理を共有する場合です。UserForm 単体のサブルーチンなら、UserForm 上のモジュールに書くのが自然です。もし、全体的な統合的なコードを書くなら、Class に書くかもしれませんが、VBAの場合は、そういう趣向といったほうがよいかもしれません。 VBAというよりも、Excel VBAですが、ローカルモジュールとグローバルモジュールは、同じ種類のVB6 とは、違った使い方の印象が強いです。 3,4 の質問は実際的ではありませんから、割愛します。Initialize は、必要なら、テキストをごらんください。文字の種類によって色分けできるのは、現行のVBエディタではありません。Microsoft Script Editor は、実際、使いにくいと違いますか?VBScript は編集できるようですが、それすら、テキストエディタを使ってしまいます。
その他の回答 (1)
- hige_082
- ベストアンサー率50% (379/747)
>VBAについての全般的な初心者の質問です なるほど、初心者が疑問に思いそうな質問ですね しかし、質問疑問に答えるのは簡単ですが、質問者さんを納得させるだけの 説明をすると、スペースが足りません userformを使用する上で基本的なことばかりなので VBAのサイトや解説書で勉強することをお薦めします 簡単な回答 疑問点1:違います。全体を合わせたものはプロジェクトです 疑問点2:使用の用途により、記述場所が異なります 疑問点3:出来ませんが、プロパティで確認変更できます 疑問点4:OfficeのファイルをHTML形式で保存したものを編集することが、主な目的なのでHTML形式となっています
関連するQ&A
- VBAのコードを書くところ(初心者)
今仕事でExcelでVBAを使って物を作っているのですが、コードはどこに書くのが一番よいのでしょうか?。たとえば、本を見ると標準モジュールに書いていっているのですが、自分は今ユーザーフォームでコマンドボタンを作ったりコンボボックスを作って、そのボタンをクリックすると自然とPrivate sub オブジェクト名_Click()と出て、その中に書いているのですが、そうすると標準モジュールに書く必要がなくなってしまう気がするのですが・・・。なので一応標準モジュールに内容を移して、フォームのところで関数として呼び出すようにしたのですが、どのように書くのがよいのでしょう?長々すいませんわかりづらかったら後で補足します。 後、今までCを勉強していたのでオブジェクト?メソッド?プロパティ?の書き方が今ひとつ覚えづらいのは慣れでしょうか?
- ベストアンサー
- Visual Basic
- VBAの配列の質問です
こんにちは、VBAについての質問です。 配列について3点ほど質問致します。 ・ フォームに貼り付けた、ラベル、テキストボックス、コンボボックスの名前を配列にして、その数自体も変数にして (上記のコントロールの数は当然分かっているのですが敢えて変数名でとりたいのです)、配列のデーターとして入れて やることは可能なのでしょうか。 特に疑問なのは、テキストボックス、コンボボックスには「文字型」、「数字型」が有ります。その場合の配列の型 はどのように宣言してやる のでしょうか。 ・ 仮に上記が可能ならば、特に疑問なのは「数字型」は「数字型」として、セルには記入されるのでしょうか。 それとも、数字の場合には、セルへの入力時とか、セルからの出力時とかに、キャスト等で型変換等の処理が必要になる のでしょうか。 ・ またそれとは別の配列として、テキストボックス、コンボボックスのデーターだけを配列データーとして入れてやるのは 可能なのでしょうか。
- 締切済み
- Visual Basic
- VBAでユーザーフォームを再表示させたい。
ExcelのVBAでユーザーフォームを作成し、 Initializeイベントで初期化をし、コマンドボタンを クリックしたら処理を行うように作成しました。 ところがコマンドボタンによって処理を行った後、 再度Initializeイベントを呼びたいんです。。 (コンボボックスの表示を更新する処理を 含んでいるため) なんとかうまい方法はないでしょうか??
- ベストアンサー
- オフィス系ソフト
- VBA初心者です。
VBA初心者です。 ユーザーフォームにテキストボックスとコンボボックスを1つずつ作り、それらを Private Sub ComboBox1_Change() TextBox1.Value = ComboBox1.Value End Sub というふうに繋いでるとき、テキストボックスにフォーカスをあてさせないようするため、 Private Sub UserForm_Initialize() TextBox1.Enabled = False End Sub このようにしました。ここまでは問題ありません。質問したいことは、このときテキストボックスに表示させる文字が淡色になるのを防ぐ方法です。 TextBox1.Locked = True これを上に付け加えればうまくいきそうなのですが、うまくいきませんでした…。どなたか解決方法を教えて下さい。
- ベストアンサー
- Visual Basic
- VBA初心者です。
VBA初心者です。 ユーザーフォーム上にテキストボックスとコンボボックスを1つずつ作りました。その二つを以下のように関連させています。 Private Sub ComboBox2_Change() 'コンボボックスの値で100を割ったものを、小数第三位を四捨五入してテキストボックスに表示する TextBox1.Value = WorksheetFunction.Round(100 / ComboBox2.Value, 2) End Sub コンボボックスのリストから値を選択したり、直接値を入力するときちんとその通りになってくれるのですが、コンボボックスの値をBackSpaceで消すと、「実行時エラー'13':型が一致しません」と出ます。デバックで落ちるのはこの部分なので、このプログラムに問題があると思うのですが、どこがいけないのかが分かりません。問題点が分かる方、ぜひ教えて下さい。
- ベストアンサー
- Visual Basic
- VBとVBAのコードの違い プロシージャー呼び出し方法
何度かお世話になっておりおります 毎回アドバイスありがとうございます 早速なのですがまた躓いてしまいアドバイスお願いします。 ~質問内容~ 標準モジュールからフォームのプロシージャーを呼び出す エラー内容 オブジェクトが必要である オブジェクト修飾が必要など 出てきました オブジェクト修飾 というのが もう理解出来ず 本当にスタートの時点ではありますが アドバイスお願いします VBのコード 標準モジュール Sub Main() MainForm.Initialize End Sub フォームのコード Public Sub initialize() ”コード内容” End Sub ↑上記で記入しました フォームで宣言されているInitialize を呼び出したいのですが VBでは このままで出来るはずなのですが VBAでは オブジェクト修飾が必要です CALL をつけても エラーのままでした 少し質問がわかりにくくなってしまいましたが 標準モジュールから フォームのプロシージャーを呼び出すには なんと入れれば宜しいでしょうか? アドバイスお願いします
- 締切済み
- Visual Basic
- VBAのイベント処理について
VBAのイベント処理について お世話になってます。現在、VBAでアプリケーションを作成しています。 1つのフォームに4つのテキストボックスと1つのボタンが配置されており、それぞれイベントが設定されています。 その中のテキストボックスに関するイベントなのですが、1つのテキストボックスに対してKeyPress、KeyDown、MouseUp、AfterUpdate、以上4つのイベントを作成します。 フォームに配置されている4つのテキストボックスすべてに、上記で示したイベントを作成する必要がありますが、各イベントにおける処理の内容はオブジェクト名が違うだけで全く同じです。 ひとつひとつイベントを作成していけば、処理目的は満たせそうですが、ソースがかなり長くなってしまいます。ひとつのオブジェクトに対してこれらの処理をひとまとめにする様な記述方法はありませんでしょうか?考え方だけでも教えていただければ幸いです。 質問が長くなってしまい申し訳ありません。回答宜しくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- エクセルVBAのユーザーフォームのコンボボックス
エクセルVBAのユーザーフォームのコンボボックスの入力と ファイルの保存で質問です。 エクセルVBAで ユーザーフォームのコンボボックスを使用して 1月から12月までを選択してもらい、 選択した月を コマンドボタン押した際に、 セルにその値を入力するような マクロを作成しようとしています。 またコンボボックスは標準で6月が表示されるようにしたいと思います。 ユーザーフォームのコードの一部です。 Private Sub UserForm_Initialize() Dim m As Integer For m = 1 To 12 UserForm1.ComboBox1.AddItem m Next ComboBox1.ListIndex = 6 Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 mold '↑フォームを閉じた後に実行される標準モジュールのマクロ名です End Sub 標準モジュールのコード 名称 「mold」 Sub mold() ActiveWorkbook.SaveAs _ Filename:="C:\_" & UserForm1.ComboBox1.Text & "月", _ FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close ThisWorkbook.Activate ' End Sub の様に作成して実行してみたのですが、 コンボボックスで11月を選択しても 6月のままのファイルになってしまいます。 どのようにしたら、 コンボボックスで選択した値を ファイル名として保存できるでしょうか? 全部のコードを記載しますと 長くなってしまうと思い、 関連するコードを記載して質問しました。 分かりづらい所もあるかと思いますが よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- VBAを覚えたいのですがさっぱりわかりません、初心者です。
VBAを覚えたいのですがさっぱりわかりません、初心者です。 VBAを活用したいと思っておりますが、実際作るとなると、 何から覚えれば良いのか?何から作成していけば良いのか分かりません。 単純にエクセルから「Visual Basic Editor」を選択し、 ユーザーフォームの挿入からフォームやコマンドボックスを使用して動作画面を作成し、 コマンドボタンを押したら『if文』などを入力していけば良いと考えていたのですが、 特に”マクロ”についてさっぱり分かりません。 サイトで検索をして内容を読んでも本を読んでも、載っていることは出来ても、 自分がしたいことについては良く分からず、 『一番最初に何をすれば良いのか』すら分かりません。 文章の「起・承・転・結」ではありませんが、 どのように段階を経て作成していくのが一番分かり易いのでしょうか?
- 締切済み
- オフィス系ソフト
- エクセルVBAについて質問です。
エクセルVBAについて質問です。 シート1のユーザーフォームにコンボボックスとテキストボックスが各1つずつ、 シート2のA列には1行目から順に「あ」「い」「う」と文字が入っていて、B列には「1」「2」「3」と値が入っています。 コンボボックスのリストにはシート2のA列の文字が選択できる状態にあります。 この状態で、例えばコンボボックスで「い」を選んだら、テキストボックスに自動的に「2」と入る、というように、コンボボックスのリストの中から任意の文字を選択したときに、テキストボックスにB列の値が入るようにするにはどのようにすればいいのでしょうか?よろしくお願いします。
- ベストアンサー
- Visual Basic