マンガでよめる痔のこと・薬のこと

Visual Basic 6 に関する質問です。

コマンドボタンをクリックする度に、
画面に配置したフレームの表示/非表示を
切り替える方法を教えていただけないでしょうか?

初歩的な質問で申し訳ございませんが、
よろしくお願いいたします。

A 回答 (1件)

今では開発部門(過去の受託先を抱える会社)以外はVB6は使える環境が無いのでは。


其れで回答が出てないのかな。
私は取り合えず、エクセルVBA(そもそもVB6ベースです)でフォームにFrame1を貼り付けてやってみた。
フレームはコントロールですか。どんな名称のものですか。これを質問に書いておく必要があるだろう。
あとフォームに載せるのだろうが。
ーー
トグル的仕組みの質問かと(推測して)思って、参考までに書いてみる。
見当違いなら、この回答全体は無視してください。
下記はエクセルVBAなので、詳細ではこのままは動かないだろう。
Visibleの切り替えが参考になれば。Static st の部分(終了まで、ここのルーチンを抜けても状態を保持する)を参考に。
Private Sub CommandButton1_Click()
Static st
If st = False Then
st = True
Else
st = False
End If
Frame1.Visible = st
End Sub
    • good
    • 0

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

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

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

Qエクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?

エクセルのVBAでユーザーフォームの中に
テキストボックスとラベルがあります。

ラベルの縦幅とテキストボックスの縦幅は
同じです。(文字1行分くらい)

そのテキストボックスの左隣にラベルを置いて、
項目名的なものを表示させたいと思うのですが
ラベルの値が上に寄っているので、垂直方向に
中央揃えさせたいのですが、設定の仕方が
分からず困っています。

ちなみにエクセルはXPで、VBAは詳しくありません。
詳しくないけど調べながらちょっとずついろいろ
作業しています。

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

Aベストアンサー

文字の上下中央設定は、確かにできませんね。
代案ですが、次のような操作はいかがでしょうか。

1.双方を選択した状態でプロパティを表示し、AutuSize の値を True にする。
2.前回のようにコントロールの位置を上下中央で揃える。
3.各コントロールの長さ(幅)や文字サイズを調整する。

QForm間の値の渡し方

1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。
実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。
因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。

Aベストアンサー

すでに何件か回答があがっていますので、少し変わった方法をご参考までに。

あまり使われませんが、Formにはtagというプロパティがあります。
これは「文字列形式であれば何でも格納できる」という、上手く使えば便利なプロパティです。

FormAからFormBを呼び出し、FormBで変更した値をFormA.tagにセットします。
ここでFormBをUnloadしてもFormA.tagの値は影響を受けないので自由に使えます。

複数の値を呼び出し元に戻してやる場合に、区切り文字(カンマなど)で連結した文字列をtagに格納し、呼び出し元で区切り文字でsplitして、複数の値を受け渡すという手法をよく使っています。

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
'-------------------------------------
 
 

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

Qフォームのテキストボックスなどの変数名を標準モジュールから参照は可能か?

フォームのテキストボックスなどの変数を標準モジュールの関数から参照する方法を教えてください。
お願いします。

Aベストアンサー

>test(form1.Text1.Text)
>
>Public Function test(コントロール変数パラメータ)
>
>コントロール変数パラメータ=値を代入
>
>End Fuction
可能ですよ。サンプルです。試してみてください。

まず、フォームと標準モジュールを準備してください。
フォーム:
Form[Form1]にTextbox[Text1]とCommandButton[Command1]を配置してください。
([]内は、オブジェクト名です。)
Private Sub Command1_Click()
  Call test(Text1)
End Sub

標準モジュール:
Public Function test(txt As TextBox)
  txt.Text = "aaa"
End Function

CommandButtonを押すと、Textboxに”aaa”と表示されます。

※Public Function test(txt As ****)の****は、
「Textbox」又は「Object」又は「Control」 いずれでもOKです。
例:
Public Function test(txt As Textbox)
Public Function test(txt As Object)
Public Function test(txt As Control)
この辺りは、人それぞれになると思いますが・・・。

>test(form1.Text1.Text)
>
>Public Function test(コントロール変数パラメータ)
>
>コントロール変数パラメータ=値を代入
>
>End Fuction
可能ですよ。サンプルです。試してみてください。

まず、フォームと標準モジュールを準備してください。
フォーム:
Form[Form1]にTextbox[Text1]とCommandButton[Command1]を配置してください。
([]内は、オブジェクト名です。)
Private Sub Command1_Click()
  Call test(Text1)
End Sub

標準モジュール:
Public Function test(txt As TextB...続きを読む

Qラベルを表示したり非表示にしたりしたい

内容

1メニューから「ラベル1を非表示にする」をクリック
2ラベル1を非表示
3ラベル1を非表示にするを表示するに変更(メニュー名変更)
4(クリックしたら表示)
5表示するを非表示にするに変更(メニュー名変更)

me.caption ではうまく出来ないようです・・・。

Aベストアンサー

メニューの名前は[mnuTest]という名前にしています。

Private Sub mnuTest_Click()
  Label1.Visible = Not Label1.Visible
  If Label1.Visible Then
    mnuTest.Caption = "非表示にする"
  Else
    mnuTest.Caption = "表示する"
  End If
End Sub

QVBAでシートからコンボボックスにデータを設定する方法

VBAにてフォーム起動時にシート内に設定した
値をコンボボックスに取り込みたいのですが・・。
たとえばA列に連続で入力されているデータを
取り込むなど・・。
設定データ数は動的に変化します。

Aベストアンサー

もうほとんど同じですが…

Private Sub UserForm_Initialize()
Dim i As Integer

 ComboBox1.Clear
 For i = 1 To Worksheets("sheet1").Cells(Rows.Count, 1).End(xlUp).Row
  ComboBox1.AddItem Worksheets("sheet1").Cells(i, 1).Value
 Next
End Sub

QエクセルVBAでオプションボタンを無効にする方法

フォームで作成したオプションボタンを一定の条件下で無効にするにはどのような記述をすればよいのでしょうか?
たとえばsheets("Sheet1").Range("A1")がFalseのときにShapes("Option Button 1")を無効にするという記述です。

Aベストアンサー

こんなのでは?

ActiveSheet.Shapes("Option Button 1").Select
Selection.Enabled = False

ボタン1と2が同グループの場合、ボタン1をTrue状態のまま操作できなくしても、
ボタン2が選択されるとボタン1はFalseになりますが。

QExcelVBAでセルをクリックしてユーザーフォームを表示するには

OfficeExcel2003を使用しています。
ユーザーフォームのテキストボックスやコンボボックスに文字や数値を入力し、OKボタンを押せばエクセルのセルに記入できるようにしようと思ってます。
フォームはなんとか(形だけですが..)作成できたのですが、そのフォームを呼び出す方法として、入力したい行のA列のセルをクリックすればユーザーフォームが表示されるようにしたいのです。
ネット上でいろいろ検索してみましたがなかなか見つけることができませんでした。
初歩的な質問かもわかりませんが、教えて頂けないでしょうか。
宜しくお願い致します。

Aベストアンサー

シートモジュールに下記を入れる。
A列をダブルクリックするとユーザーフォームが起動
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 1 Then Exit Sub
UserForm1.Show
End Sub


人気Q&Aランキング