【先着1,000名様!】1,000円分をプレゼント!

フレーム内に、テキストボックスを配置し、
そのテキストボックスをExitした場合にFormatを変更したいのですが、
フレーム内にテキストボックスがあるためかイベントが発生しません。

  1) Frame1 の中に Textbox1 を配置
  2) Textbox1には数値を入力
  3) 入力後、次のコントロールに移動した場合、
   Textbox1.textをformat(Textbox1.text,"#,##0")にする

  Private Sub Textbox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    msgbox "Exit"
  End Sub
  としましたが、ユーザフォームを終了した時に、msgが出力されます。

フレーム内のイベントはどのようにすればよいか、教えていただきたいです。
よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

AfterUpdateイベントではだめでしょうか?



Private Sub TextBox1_AfterUpdate()
  msgbox "Exit"
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
うまくいきました。
テキストボックス内の編集時、
Exitで行っていたのですがAfteUpdateの方がよいのですね。

ありがとうございます。
他のロジックも見直してみます。

お礼日時:2009/01/22 14:59

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

Qフレーム内のオプションボタン状態取得方法について

excel2010

フレーム内のオプションボタン状態の取得方法について教えてください。

従来、オプションボタンの状態はLinkedCellにセルアドレスを設定(H2と設定)すれば、
下記の様に設定すれば、チェックが入っているかどうかを確認できました。

If Range("H2") = True Then …(1)

今回、オプションボタンを大きく設定したかったので、
excel2010の
開発→挿入→コントロールの選択で
Microsoft Forms 2.0 Frame を選択し、フレームを作成。
フレームオブジェクト→編集でZOOMを200に設定。
ツールボックスからオプションボタンを選択し配置。
これで通常の2倍の大きさのオプションボタンを配置できました(OpitonButton1)。

このオプションボタンのプロパティを見ると、LinkedCellという項目がありません。

このフレーム内に設定したオプションボタン(OptionButton1)が選択されているかどうかを
確認する方法を知りたいのです。

ホームページで調べたのですが、(1)の部分がどういう書式に代わるかを教えていただきたく。
尚、オプションボタンはフレーム内に2ケ(OptionButton1,OptionButton2)配置しています。

excel2010

フレーム内のオプションボタン状態の取得方法について教えてください。

従来、オプションボタンの状態はLinkedCellにセルアドレスを設定(H2と設定)すれば、
下記の様に設定すれば、チェックが入っているかどうかを確認できました。

If Range("H2") = True Then …(1)

今回、オプションボタンを大きく設定したかったので、
excel2010の
開発→挿入→コントロールの選択で
Microsoft Forms 2.0 Frame を選択し、フレームを作成。
フレームオブジェクト→編集でZOOMを200に設定。
ツールボッ...続きを読む

Aベストアンサー

こんにちは。お邪魔します。

> フレーム内のオプションボタン状態の取得方法について教えてください。

> このフレーム内に設定したオプションボタン(OptionButton1)が選択されているかどうかを
> 確認する方法を知りたいのです。

直接的な回答として。

Microsoft Forms 2.0 Frame のオブジェクト名がFrame1だとして、
(各名前は運用に合わせて修正してください)
Frameオブジェクトを配置しているシートのシートモジュールに記述する場合は
  If Frame1.Controls("OptionButton1").Value = True Then
とか
  If Frame1.Controls("OptionButton2").Value = True Then
とか。
他のモジュールから参照する場合は、
  If Sheets("シート名").Frame1.Controls("OptionButton1").Value = True Then
とか
  If Sheets("シート名").Frame1.Controls("OptionButton2").Value = True Then
とか。

そもそも、オプションボタンの状態は、LinkedCellを介さずとも
If OptionButton1.Value = True Then
とか
If OptionButton2.Value = True Then
のように取得するのが標準です。

オプションボタンの状態を間接的に取得する目的だけで
LinkedCellプロパティを設定していたのであれば、それは不要です。
他の目的でLinkedCellプロパティを用いたい、というようなお話ではないようですから、
オプションボタンの.Valueプロパティを直接に取得するようにすれば解決するのではないでしょうか。

こんにちは。お邪魔します。

> フレーム内のオプションボタン状態の取得方法について教えてください。

> このフレーム内に設定したオプションボタン(OptionButton1)が選択されているかどうかを
> 確認する方法を知りたいのです。

直接的な回答として。

Microsoft Forms 2.0 Frame のオブジェクト名がFrame1だとして、
(各名前は運用に合わせて修正してください)
Frameオブジェクトを配置しているシートのシートモジュールに記述する場合は
  If Frame1.Controls("OptionButton1").Value = True Then
とか
...続きを読む

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

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

Aベストアンサー

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

Qユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.hideでユーザーフォームを一時的に隠すなどすればいいのでしょうが、そういう手段をとらないでユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。

Aベストアンサー

ユーザフォームの
ShowModalプロパティを
falseにすればよいかと。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QエクセルVBA ユーザーフォームのTextBoxを日付にしたい

いつもいつも 皆様からのお返事を心待ちにしておりますNannyです。

VBAのユーザーフォームでTextBoxを日付専用入力にしたいのです。

で、入力方法が 20050219 というような形で入力して、2005/02/19という形か、平成17年2月19日というような形に持って行って、セルに貼り付けしたいのです。

出来なさそうな予感満載なのですが、皆様お返事の程宜しくお願い致します。
(出来ないのであればあきらめられるので、出来るかどうかのお返事も期待しております。

宜しくお願い致します。

Aベストアンサー

下記はTextBox1に20050219としCommandButton1をクリックするとシート1のA1に2005/2/19と出力します。
Private Sub CommandButton1_Click()
Worksheets(1).Range("A1").Value = Format(TextBox1.Text, "0000""/""00""/""00")

End Sub

QエクセルVBA テキストボックスへのセットフォーカスについて

エクセルVBAでユーザーフォーム内に配置されたテキストボックス
への数値の入力時に、指定範囲内になければメッセージボックスで
規格外であることを警告し、その規格外が入力されたテキストボックス
を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが
どうすればよいのでしょうか?
自分で考えた構文です。
Private Sub TextBox1_AfterUpdate()
Dim A As Single

A = TextBox1.Text
If A < 1.99 Or A > 3.00 Then
MsgBox "規格外!!"
    TextBox1.Text = ""
TextBox1.SetFoucus
End If
Exit Sub

End Sub

これですと、次のテキストボックスにフォーカスが移動してしまいます。
次のテキストボックスにフォーカスを移動させずに、規格内の値が
入力されるまでフォーカスを移動させない方法を教えて下さい。
お願い致します。

エクセルVBAでユーザーフォーム内に配置されたテキストボックス
への数値の入力時に、指定範囲内になければメッセージボックスで
規格外であることを警告し、その規格外が入力されたテキストボックス
を強制的に空欄にし、次のテキストボックスにフォーカスを移動させずに、入力間違いのテキストボックスにフォーカスを戻したいのですが
どうすればよいのでしょうか?
自分で考えた構文です。
Private Sub TextBox1_AfterUpdate()
Dim A As Single

A = TextBox1.Text
If A < 1.99 Or A...続きを読む

Aベストアンサー

こんにちは。Wendy02です。

>イベントをAfterUpdateにしましたが、Wendy02さんはExitを使っていますが、AfterUpdateではなぜ正しく動作しないのでしょうか?

イベント自体の問題よりも、イベントの機能を良くみたほうがよいですね。
_Exit(ByVal Cancel As MSForms.ReturnBoolean)

ここで、Return(戻り値)のブーリアン値があるようなので、それを利用しただけです。

>Cancel = True
が、フォーカスの移動をキャンセルしています。

別に、Exit でなくても良いのです。例えば、

_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
のKeyCode に入った 「13(Enter)」のコードを 0 で打ち消す方法でも、可能です。

If が True の時に、
 MsgBox "規格外!!",16
 TextBox1.Text = ""
 KeyCode = 0

でも可能です。

「なぜ?」というよりも、そういうパターンがあるということです。たぶん、AfterUpDateでも、方法によってはできるとは思いますが、かなり難しくなるのではないかなって思うだけです。

こんにちは。Wendy02です。

>イベントをAfterUpdateにしましたが、Wendy02さんはExitを使っていますが、AfterUpdateではなぜ正しく動作しないのでしょうか?

イベント自体の問題よりも、イベントの機能を良くみたほうがよいですね。
_Exit(ByVal Cancel As MSForms.ReturnBoolean)

ここで、Return(戻り値)のブーリアン値があるようなので、それを利用しただけです。

>Cancel = True
が、フォーカスの移動をキャンセルしています。

別に、Exit でなくても良いのです。例えば、

_KeyDown(By...続きを読む

QエクセルVBAでOptionButtonのオンオフ取得

ワークシート上に貼り付けてあるオプションボタンの状態の取得ですが、フォームのオプションボタンなら
例えば、
MsgBox ActiveSheet.OptionButtons("Option Button 44").Value で、オンなら1、オフなら-4146が返ります。
またActiveSheet.OptionButtons("Option Button 44").Value=xlOnで オンに出来ます。

ところがフォームじゃないコントロールツールボックスのオプションボタンは
MsgBox ActiveSheet.Shapes("OptionButton30").Valueでも
MsgBox ActiveSheet.Controls("OptionButton30").Valueでもエラーになります。
どうやって取得すればいいのでしょうか?
どうやてOn Off を指示すればいいのでしょうか?

Aベストアンサー

同一ワークシート内にオプションボタン1つ、コマンドボタン一つを配置して、コマンドボタンに、現在のオプションボタンの値をMSGBOXで表示させ、その後OFF(False)にするようなサンプルを作って、Excel2000で試してみました。

Private Sub CommandButton1_Click()
MsgBox OptionButton1.Value
OptionButton1.Value= False
End Sub

というコードです。
とりわけ問題なく動作しました。
LinkCellを指定するかどうか、複数配置かどうかで微妙に動作が異なるようです。

参考までに。

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

QExcelVBAのコントロールの種類の取得方法

ExcelVBAのフォームについての質問です。
コントロールの種類(TextBox,ComboBox等)を取得するプログラムがあれば教えて下さい。
何をしたいかと言うと、Enabledを切り替えるサブルーチンを作りたいのですが、
TextBox等のwindow型のコントロールの場合は、BackColorも変えたいので、条件分岐させたいのです。
ちなみに今は、コントロール名にtxtやcmb等をつけて判断させています。
何か良い方法があれば教えて下さい。

Aベストアンサー

TypeName関数を使ってみてください。

'-------------------------------------- 
Private Sub CommandButton1_Click()
  Dim myCtrl As Control
  For Each myCtrl In Me.Controls
    Select Case TypeName(myCtrl)
     Case "TextBox"
       myCtrl.BackColor = RGB(255, 0, 0)
     Case "Label"

     Case "ListBox"
       myCtrl.BackColor = RGB(0, 255, 0)
     Case "CheckBox"

     Case "ComboBox"

     Case "CommandButton"

    End Select
  Next myCtrl
End Sub
'------------------------------------------
 
勘違いでしたらご容赦願います。
以上ここまで。
 

TypeName関数を使ってみてください。

'-------------------------------------- 
Private Sub CommandButton1_Click()
  Dim myCtrl As Control
  For Each myCtrl In Me.Controls
    Select Case TypeName(myCtrl)
     Case "TextBox"
       myCtrl.BackColor = RGB(255, 0, 0)
     Case "Label"

     Case "ListBox"
       myCtrl.BackColor = RGB(0, 255, 0)
     Case "CheckBox"

     Case "ComboBox"

     Case "CommandBu...続きを読む

QEXCELのActivXコントロールについて

自分なり解決法をさがしたのですが
どうしても分からないので質問しました。
宜しくお願いします。

OS:WindowsXP SP3
Office:Microsoft Office Excel 2007

1.Worksheet上にActivX Frameコントロール(Microsoft Forms 2.0 Frame)を挿入
2.項番1で挿入したFrame上にActivX OptionButtonコントロールを2つ挿入
(フレームオブジェクト(O)→編集(E)後のツールボックスで挿入)

OptionButtonをクリックしたらイベントで"~する"ということをしたいのですが
デザインモード状態でFrameコントロール内のOptionButtonをダブルクリックしても反応無し
右クリックの"コードの表示..."もグレー表示で選択できません。

仕方ないのでFrameのClickイベントやMouseMoveイベントで対処していますが
出来るならOptionButtonのイベントで処理したいと思い質問しました。

ActivXではなくフォームコントロールのFrameに変えたり
ユーザーフォームでやれば可能ですが・・・

対処法あれば
宜しくお願い致します。

自分なり解決法をさがしたのですが
どうしても分からないので質問しました。
宜しくお願いします。

OS:WindowsXP SP3
Office:Microsoft Office Excel 2007

1.Worksheet上にActivX Frameコントロール(Microsoft Forms 2.0 Frame)を挿入
2.項番1で挿入したFrame上にActivX OptionButtonコントロールを2つ挿入
(フレームオブジェクト(O)→編集(E)後のツールボックスで挿入)

OptionButtonをクリックしたらイベントで"~する"ということをしたいのですが
デザインモード状態でFrameコントロール内のOptionButt...続きを読む

Aベストアンサー

#1、2、cjです。

この課題は運用の仕方の方が難しく感じる人多いかな、と思い直したので、
サンプルを改めます。

ブックを開けば、Frame上に配置した OptionButtonのイベントが有効になるような
簡易版のサンプルです。

' ◆◆ や ' ◆ で示した行の
各オブジェクト名には注意して必要なら書き換えるようにしてください。

特に' ◆◆ の行、Sheet1 2カ所については、注意!
シート名ではなくて、
VBAプロジェクトでのオブジェクト名です。
VBE画面の左側にあるプロジェクトエクスプローラを見ると
 ■ Sheet1 (Sheet1)
 ■ Sheet2 (Sheet2)
 ■ Sheet3 (Sheet3)
 □ ThisWorkbook
のような感じで表示されていると思いますが。
シートモジュールについては
 ■ オブジェクト名 (シート名)
のような表示になっています。
オブジェクト名、シート名、ともに、それぞれ独立して、
ユーザーが名前を付けられるようになっていますし、
シートの削除などあると命名規則にずれが生じて
 ■ Sheet1 (Sheet3)
 ■ Sheet2 (Sheet1)
 ■ Sheet3 (Sheet2)
こんな↑ことになる可能性もあります。
なので、オブジェクト名を知るには、
()の中のシート名を探して、
マッチしたら、()の外、左側にあるオブジェクト名を採るようにします。

以下はより実用に近いテスト用簡易サンプルです。
本格派志向なら、新規にクラスモジュールを挿入して書いてみたいですね。
こういう場合、特にコントロールの数が多い場合なんかは、
別にクラスモジュール用意した方が却って扱い易いかも知れません。

試す時は、新規のブックで、必要最小限のことだけして
動作を確認した方が紛れがなくなります。
準備出来たら、保存しておいて、再度開いた時から、機能するようになります。


' ' =====ThisWorkbook モジュール=====

Private Sub Workbook_Open()
  Call Sheet1.SetEvOPB  ' ◆◆ Sheet1 ?
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Call Sheet1.SetEvOPB(True)  ' ◆◆ Sheet1 ?
End Sub


' ' =====Sheet1 モジュール=====

Private WithEvents myOptionButton1 As MSForms.OptionButton
Private WithEvents myOptionButton2 As MSForms.OptionButton

Private Sub myOptionButton1_Click()
  MsgBox "Frame上に配置した OptionButton1 がクリックされました。"
End Sub

Private Sub myOptionButton2_Click()
  MsgBox "Frame上に配置した OptionButton2 がクリックされました。"
End Sub

Sub SetEvOPB(Optional ByVal Clear As Boolean)
  If Clear Then
    Set myOptionButton1 = Nothing
    Set myOptionButton2 = Nothing
  Else
    Set myOptionButton1 = Frame1.Object("OptionButton1")  ' ◆ Frame1 ? OptionButton1 ?
    Set myOptionButton2 = Frame1.Object("OptionButton2")  ' ◆ Frame2 ? OptionButton2 ?
  End If
End Sub

#1、2、cjです。

この課題は運用の仕方の方が難しく感じる人多いかな、と思い直したので、
サンプルを改めます。

ブックを開けば、Frame上に配置した OptionButtonのイベントが有効になるような
簡易版のサンプルです。

' ◆◆ や ' ◆ で示した行の
各オブジェクト名には注意して必要なら書き換えるようにしてください。

特に' ◆◆ の行、Sheet1 2カ所については、注意!
シート名ではなくて、
VBAプロジェクトでのオブジェクト名です。
VBE画面の左側にあるプロジェクトエクスプローラを見ると
 ■...続きを読む


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

人気Q&Aランキング