• ベストアンサー

単純な質問で恐縮です。

単純な質問で恐縮です。 コマンドボタン1を押したら、ラベル1が消えて、ラベル2が表示させるようにしたいのですが動きません。 Private Sub CommandButton1_Click() Label1.Visible = False Label2.Visible = True end sub どうしてでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.5

パッと見、おかしいところはありません。 できれば元ソースを(なるべく改変せずに)貼りつけて欲しいところですが。 時折、投稿記入時にスペルミスなどを無意識に直してしまって、質問文で書いたものは正常に動く、という質問もあり得ますから。 ※そのまま貼りつけてないって判断根拠は、End Subと先頭が大文字になってないって事で、すくなくともそこは質問を書いた際に手打ちしているなって事ですが。(VBエディタは勝手に先頭大文字に修正するため) ともかく、ソースがおかしくないってことは貴殿がどのようなミスをしているか、という事だけなのですが。 CommandButton1、Label1、Label2の名前をそれぞれ変更変更していないか?と言うところや、あるいは、デザイン画面でボタンをクリックして『動かない!!』と騒いでいるのではないか?というレベルまであり得ます。 まずはデザイン画面で対象のボタンをダブルクリックしてください。 Clickイベントの入力画面に切り替わると思います。 もし空白であれば、質問文のコードは別のところに書いたのか、コマンドボタンの名前を変えたのか。 ちゃんとコードが書かれているなら、以下のように、イベント実行の確認用にMsgBoxを入れてみましょう。 Private Sub CommandButton1_Click() MsgBox "CommandButton1_Click" Label1.Visible = False Label2.Visible = True end sub 次に、実行確認時にはメニューから[実行]-[完全コンパイル後に開始]を選んで実行しましょう。 ツールバー上の実行(右向き三角ボタン)は、[実行]-[開始]の事になります。 これは構文エラーのある行に来て初めて、『構文エラーがあります』とVBから通知されます。 [完全コンパイル後に開始]だと、一度全文をVBが確認して、おかしな記述がみつかった場合に事前にVBが教えてくれます。 たとえば、Label1の名前をプロパティで変更してlblCaptionと変更しても、ソースコード上でLabel1と書いたものは自動的に名前が変化したりはしません。 完全コンパイル後に開始、であれば『Label1ってオブジェクトが使われてるけど、何これ?知らないよ』と教えてくれます。 ついでに、メニューの[ツール]-[オプション]から、『変数の宣言を強制する』にチェックを入れましょう。 変数を使う前に Dim i As Integer i=0 のように、Dim~と書かなくてはいけなくなりますが、スペルミスをしていた場合などに、『何この変数?知らないよ』と教えてくれます。 最後に ここまでやってもダメな場合、ちょっと遊びの要素も入れて、確認の為に以下のように変更して見てください。 クリックするたびに、表示/非表示が切り替わるように書き変えてみました。 Label1とLabel2を、勘違いしているのではないかな、という事に対しての確認です。 Private Sub Command1_Click() MsgBox "CommandButton1_Click" Label1.Visible = Not Label1.Visible Label2.Visible = Not Label1.Visible end sub

acchandesu
質問者

お礼

Private Sub Command1_Click() Label1.Visible = False Label2.Visible = true の後に、For文を長々と入れていたのですが、そっちを先に計算していたようです。 そういうものでしょうか?よくわかりませんが... そのfor文の後にVisibleの構文を入れると動作しました。 ???? ご足労頂きありがとうございました。

その他の回答 (4)

回答No.4

>VB6です。 VBAでもなく、VB6ですね? オブジェクト名は「CommandButton1」であっていますか? 「Command1」ではないですか? (Captionではなく、オブジェクト名) それと再度同じ質問をします。 -------------------------------------------------------------- デバッグでは、その「CommandButton1_Click」が実行されてますか? --------------------------------------------------------------

回答No.3

回答先間違えた者ですw 質問です。 VB6ですよね? VB.NETではないですよね? デバッグでは、その「CommandButton1_Click」が実行されてますか?

acchandesu
質問者

補足

VB6です。 ユザーフォーム上にコマンドボックスを配置して、クリックするようにしています。

回答No.2

#1です。 すいません。 回答先を間違えましたw #1を無視してください。 m(_ _)m

回答No.1

言われているのは、質問というより、アプリケーション開発依頼です。 とても回答欄の2000文字で収まるような内容ではありません。 もっと的を絞って、本当にわからない部分だけの質問にしないと、解決に至らないと思いますよ。 まずは機能分割が必要です。 ・監視機能 ・メール取得機能 ・DB登録機能 と大きく分かれます。 //////////// 監視機能 //////////// 五分間隔の監視というのは、「誰が監視するか」ということです。 ・アプリケーションが絶えず走っている という状況にするより、 ・OS機能のタスクによる実行 あるいは ・JP1などのツールによるタスク管理 とするだけで、開発ステップは大きく削減できます。 //////////// メール取得機能 //////////// 言わずと知れた「DOBON.NET」 http://dobon.net/ そこから →.NET Tips →→インターネット →→→POP3メールサーバーからメールを受信する 最新なのかどうかは、別途チェックロジックを追加する必要あり //////////// DB登録機能 //////////// DBをバイナリで登録するのかな? それともファイルパスを書くだけかな? 仕様が不明です。 バイナリで書くとしたら、まとまったDBができはしますが、バックアップに時間がかかります。 ファイルパスで書くとしたら、ファイルが削除されてしまってもパスが残っているので、同期が取れなくなる恐れもあります。 これらを考慮して、どのような方向で進めるかを決める必要があります。 //////////// 全体構想() //////////// これらの機能を ・1つのアプリ(EXE)で行うか ・複数アプリ(EXE)で行うか によって、連携を考慮する必要が出てくるかも知れません ・1つのアプリの場合は連携を考慮しなくてもいいけど、修正が入った場合の全体への影響度を深く考える必要あり ・複数アプリの場合は、修正が入った場合の全体への影響度は低いと思われるが、連携についてを考慮する必要あり 一長一短です。 作成の前に、もうちょっと詳細を詰めて、1機能を作成してみましょう。 作成中にわからなくなった部分について、提供できる情報を公開しましょう。 公開してある情報が多いほど、的確なアドバイスを得られます。 またそれらに関係する参考となるURLの情報を得られるかも知れません。

関連するQ&A

  • ユーザーフォームの描画が遅れるのは?

    ExcelのVBAで簡単な処理をしているのですが、困っています。 ユーザーフォームにラベル1つとコマンドボタンを2つ用意しました。 ラベルには「・・・よろしいですか?」と質問形式の文章を 表示し、コマンドボタンにはそれぞれ「OK」と「キャンセル」を 表示してあります。 「OK」のコマンドボタンをクリックされたら、2つのコマンドボタン のvisibleプロパティをfalseにして隠し、ラベルには 「しばらくお待ちください。」と表示してセルの計算をさせます。 私の考えでは、コマンドボタンが消えラベルに「しばらく・・」が 表示されてから計算が行われセル上に計算結果が 表示されるはずなのですが、何故か計算結果が全て表示されてから コマンドボタンが消え、ラベルに「しばらく・・」と表示され 次の命令を実行してしまいます。 何がいけないのかが分かりません。 宜しくお願いいたします。 Private Sub CommandButton1_Click()  UserForm1.CommandButton1.Visible=False  UserForm1.CommandButton2.Visible=False  UserForm1.Label1.Caption="しばらくお待ちください。" '計算のsubへ飛ぶ  Call Keisan  UserForm1.Label1.Caption="終了しました。" End Sub

  • 複数のコマンドボタン(VBAで)を一つにまとめたい。

    複数のコマンドボタン(VBAで)を一つにまとめたい。 Private Sub CommandButton1_Click() Application.Goto Reference:=Range("A7"), Scroll:=True End Sub Private Sub CommandButton2_Click() Application.Goto Reference:=Range("A29"), Scroll:=True End Sub Private Sub CommandButton3_Click() Application.Goto Reference:=Range("A51"), Scroll:=True End Sub Private Sub CommandButton4_Click() Application.Goto Reference:=Range("A73"), Scroll:=True End Sub Private Sub CommandButton5_Click() Application.Goto Reference:=Range("A95"), Scroll:=True End Sub Private Sub CommandButton6_Click() Application.Goto Reference:=Range("A117"), Scroll:=True End Sub Private Sub CommandButton7_Click() Application.Goto Reference:=Range("A139"), Scroll:=True End Sub Private Sub CommandButton8_Click() Application.Goto Reference:=Range("A161"), Scroll:=True End Sub Private Sub CommandButton9_Click() Application.Goto Reference:=Range("A183"), Scroll:=True End Sub Private Sub CommandButton10_Click() Application.Goto Reference:=Range("A205"), Scroll:=True End Sub Private Sub CommandButton11_Click() Application.Goto Reference:=Range("A227"), Scroll:=True End Sub 上記のように複数のコマンドボタンを関数化して一つにすることは出来るでしょうか?

  • エクセル・マクロでIf Thenの使い方

    このような質問は、ルール(エチケット、マナー)違反になるでしょうか? もしそうならお許し下さい。 名前ボックスに表示される名前を、マクロで非表示にし、元に戻す、という操作を次の二つのボタンで実行するように作りました。エクセル2003です。 Private Sub CommandButton1_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = False Next End Sub Private Sub CommandButton2_Click() Dim tname As Name For Each tname In ThisWorkbook.Names tname.Visible = True Next End Sub これを一つのボタンで、If Then Elseを使い実行できるようにしたいのですが If ・・・ Then の間の書き方が分からずうまくいきません。   If Names.Visible = False Then   If ThisWorkbook.Names.Visible = False Then If ThisWorkbook.tname.Visible = False Then Private Sub CommandButton3_Click() Dim tname As Name If Names.Visible = False Then 'これでは駄目 For Each tname In ThisWorkbook.Names tname.Visible = False Next Else For Each tname In ThisWorkbook.Names tname.Visible = True Next End If End Sub 苦し紛れにこんなことをやってごまかそうとしているのですがこれって邪道ですしかっこうわるいですよね。 Private Sub CommandButton3_Click() Dim tname As Name If Range("g1").Value = " " Then   For Each tname In ThisWorkbook.Names   tname.Visible = False   Next Range("g1").Value = "1" Else   For Each tname In ThisWorkbook.Names   tname.Visible = True   Next Range("g1").Value = " " End If End Sub ど素人ですがよろしくご教導ください。

  • Visual Basic 6.0でのLabelについて質問です。

    Visual Basic 6.0でのLabelについて質問です。 今、Labelが100個あるとして、 どのラベルが押されても同じ処理をさせたい場合、どのようにプログラムを組めばよいかわかりません・・・ そこで、 Private Sub Label2_Click() Label1.Caption = "停止" End Sub Private Sub Label3_Click() Label1.Caption = "停止" End Sub Private Sub Label4_Click() Label1.Caption = "停止" End Sub    ・    ・    ・ Private Sub Label101_Click() Label1.Caption = "停止" End Sub のように100個繰り返しても良いのですが、だらだら長くなってしまうので、スマートに 処理できる方法を探しています。 もしご存知の方がいらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。

  • VB初心者です

    計算結果が"7"の時に限り、「当たり!」と表示される、ちょっと意味不明な計算機を作っています。 現在、下記のように書いてますが、何故かうまくいきません。(当たりが表示されない 何故でしょうか?お助けください。。m(_ _)m Private Sub Command1_Click() Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text)) Label3.Caption = "+" Label4.Visible = False '画像を隠す。 'いずれかの数字が「7」のとき、メッセージを表示する。 If Label1.Caption = "7" Then Label4.Visible = True End If End Sub Private Sub Command2_Click() End End Sub Private Sub Command3_Click() Label1.Caption = Str(Val(Text1.Text) * Val(Text2.Text)) Label3.Caption = "*" End Sub Private Sub Command4_Click() Label1.Caption = Str(Val(Text1.Text) - Val(Text2.Text)) Label3.Caption = "-" End Sub Private Sub Command5_Click() Label1.Caption = Str(Val(Text1.Text) / Val(Text2.Text)) Label3.Caption = "/" End Sub

  • EXCELでの変数によるMacro自動実行について

    すいませんが教えてください・・・・・・ EXCELシートにツールボックスより、コマンドボタンを2つ配置しました。 (AUTOMATICはPublic変数で標準モジュールで定義しています Dim AUTOMATIC As Boolean ) ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() AUTOMATIC = True End Sub CommandButton_2 : Private Sub CommandButton2_Click() AUTOMATIC = False End Sub ------------------------------------------------------------------ あとはEXCELを起動中に、AUTOMATICが Trueでセル(例えばA2のセル)の 値が100のときには Macroを起動したいのですが、どこにどう記述したら いいか教えて欲しいのです。 ------------------------------------------------------------------ CommandButton_1 : Private Sub CommandButton1_Click() if Cells(2,1) = 100 then 'A2はCells(2,1) Macro実行 end if End Sub とAUTOMATICを使用せずに記述しても、毎回CommandButton_1をクリックしな ければMacroが起動することができないので煮詰まってしまいました。 (一度CommandButton_1をクリックしておくとあとはA2セルを監視するだけ でMacroを起動させたい) すいませんがわかる方、教えていただけないでしょうか よろしくお願いします。

  • VB6でスロットを作成したい

    VB6歴2ヶ月の初心者です。 フォーム上に ラベルコントロールが三つ コマンドボタンが二つ タイマーコントロールが一つ あります。 タイマーのプロパティは Enabled False Interval 10 です。 スロットを作成したいのですが、 ボタン1を一回押すごとに左からスロットが回り、 最後にボタン2で動きを止めたいのです。 一応自分でも書いてみたのですが、ここで行き詰まりました。 ウワァァァァァァヽ(`Д´)ノァァァァァァン! Private Sub Command1_Click() Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False End Sub Private Sub Timer1_Timer() Dim slot As Integer slot = Int(Rnd(1) * 9 + 1) Label1.Caption = slot End Sub 思い通りに動かすにはどんなコードにしたらいいですか?

  • 複数のユーザーフォームをコマンドボタンにて表示・非表示させるには

    VBA勉強中のものです。 複数のユーザーフォームをコマンドボタンを使用して画面への表示切替を考えております。 例)ユーザーフォーム1,ユーザーフォーム2,ユーザーフォーム3のそれぞれにコマンドボタン1,コマンドボタン2,コマンドボタン3を作成し、   コマンドボタン1→ユーザーフォーム1を表示   コマンドボタン2→ユーザーフォーム2を表示   コマンドボタン3→ユーザーフォーム3を表示 とするようなことを考えおります。  そこで、下記のようにコードを作成したのでですが,一度表示させたユーザーフォームを再度表示させようとコマンドボタンをクリックしたら、「フォームはすでに表示させているのでモーダル表示はできません」とエラーがでてしまいます。   どなたか、どのようにしたらいいかご教授ねがいます。 サンプルコード) --------------------------------------------------- 'UserForm1のコード Private Sub CommandButton2_Click() Call UserForm2_show UserForm1.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm1.Hide End Sub ---------------------------------------------------- 'UserForm2のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm2.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm2.Hide End Sub ------------------------------------------------------- 'UserForm3のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm3.Hide End Sub Private Sub CommandButton2_Click() Call UserForm2_show UserForm3.Hide End Sub ------------------------------------------------------------ '標準モジュール コード Sub UserForm1_show() UserForm1.Show End Sub Sub UserForm2_show() UserForm2.Show End Sub Sub UserForm3_show() UserForm3.Show End Sub

  • ループの後にTrueになる不思議

    下記のコードを実行してみます。 Private Sub Command1_Click() ProgressBar1.Visible = True Label1.Visible = True ProgressBar1.Max = Val(Text1.Text) For i = 1 To Val(Text1.Text) Text1.Text = i ProgressBar1.Value = i Next i MsgBox "終了しました。" ProgressBar1.Visible = False Label1.Visible = False End Sub 「ProgressBar1」はループに入る前に「Visible = True」になります。 「Label1」はループ終了後に「Visible = True」になります。 「Text1.Text = i」はループ終了後に表示されます。 本来は、「Label1」はループに入る前に「Visible = True」にして、「Text1.Text = i」をループ中に表示させたいのですが、できません。 どこかコードが間違っているのでしょうか。

  • [Excel VBA]コマンドボタンの入力待ち方法

    コマンドボタンの入力を待つ方法についてご教示願います、 以下に詳しい状況と、具体的な質問を記載します。 【構成】 ・ユーザーフォーム上に5つのコマンドボタン(CommandButton1~CommandButton5) 【やりたいこと】 ・CommandButton1を押したらスタート ・1ラウンドにつき1回、CommandButton2~CommandButton5のいずれかのボタンが押せる。  そして、押されたボタンが何かを毎ラウンド判定する。  これを10ラウンドまで繰り返す。 (つまり、どのボタンが押されたかを10回判定する) なお、「ボタンが押されるまでは勝手にループしないこと」。 【コード】(UserFrom1に記載。質問用として、変数名は仮に日本語にしてあります) Public 押された As Long Dim 現在のラウンド As Long Dim 最終ラウンド As Long Private Sub ラウンド処理() 最終ラウンド = 10 For 現在のラウンド = 1 To 最終ラウンド ボタン判定 Next 現在のラウンド End Sub Private Sub ボタン判定() MsgBox 現在のラウンド & ":" & 押された End Sub Private Sub CommandButton1_Click() ラウンド処理 End Sub Private Sub CommandButton2_Click() 押された = 2 End Sub Private Sub CommandButton3_Click() 押された = 3 End Sub Private Sub CommandButton4_Click() 押された = 4 End Sub Private Sub CommandButton5_Click() 押された = 5 End Sub 【詰まっている点】 ボタンの入力待ちになるような文が入っていないため、 「1:0」「2:0」「3:0」…「10:0」とmsgboxが出るだけの状態です。 (当然ですが…) VBAの 【質問】 毎ラウンドごとにボタンの入力待ちのような状態を 「できるだけこの形を崩さずに」組み込むためには、どのような処理を加えればいいでしょうか。

専門家に質問してみよう