ついに夏本番!さぁ、家族でキャンプに行くぞ! >>

いつもお世話になっております。
ありがとうございます。

マルチページ内のエラー時に、テキストにフォーカスしたいのですが、
該当のエラーテキストではないページ(タブ)にカーソルがあった場合、
エラーとなってしまいます。

色々調べて、やってみたのですが、うまくいきません。
ご教授いただけると幸いです。

マルチページ内には、いくつかのテキストとチェックボックスがあります。
マルチページのページ数はmei_su = 5 です。

For i = 1 To mei_su
Set mychk = Me.Controls("chkMei5_" & i)
If mychk.Value = True Then
MsgBox "チェックされていますが、入力されていません。"
Set mytxt = Me.Controls("txtMei2_" & i)
mytxt.SetFocus
Exit Sub
End If
Next

MultiPage1.value = 0 とか、
Me.Controls("Page" & i).enable = true とかも
入れてみたのですが、ダメでした。

よろしくお願い致します。

A 回答 (1件)

>マルチページ内には、いくつかのテキストとチェックボックスがあります。


>マルチページのページ数はmei_su = 5 です。

ご説明とマクロが矛盾しているように思われます。

とりあえず変更前:
mytxt.SetFocus

変更後:
Me.MultiPage1.Value = mytxt.Parent.Index
mytxt.SetFocus


それとも,マルチページの「1枚のページの中には」1個のチェックボックスと1個のテキストボックスの1セットしか無くて(幾つかあるワケじゃなくて),マルチページの頁数とチェック-テキストの組数は同じですというイミなら,今のマクロのままでOKですが,それならもっと簡単に
変更後:
me.multipage1.value = i - 1
mytxt.setfocus
で十分です。

この回答への補足

keithin様、本当にありがとうございました。

For i = 1 To 5
Set mychk = Me.Controls("chkMei5_" & i)
If mychk.Value = True Then
Me.MultiPage1.Value = i - 1
Set mytxt = Me.Controls("txtMei2_" & i)
mytxt.SetFocus
MsgBox "エラーです。"
Exit Sub
End If
Next

ご指摘のようにi-1で十分でした。
本当にありがとうございました。

補足日時:2011/04/18 18:42
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

説明が悪くすみません。

マルチページの中には、5ページあります。
その1ページ1ページには、テキスト・チェックボックス等が9つあります。

txtMei1-1 ~ txtMei4-5
(txtMeiの後の数字がページ内の番号、次の数字がページ数としています)
chkMei5-1 等

Me.MultiPage1.Value = mytxt.Parent.Index
mytxt.SetFocus

を入れてみたのですが、
「エラー 438 
 オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
となってしまいました。

私の入力が悪いのかもしれません。
すみません。
また、ご回答いただけると幸いです。

お礼日時:2011/04/18 16:57

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

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

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

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

QExcel VBAでのMultipageの選択

フォーム上に配置したマルチページ(ページタブは3つ有ります)のうち、任意のページをアクティブもしくは選択する方法が分かりません。
例えば、1つ目のページをアクティブにするには、どの様なコードを書けば良いのでしょうか?いろいろ本などで調べましたが、見つかりませんでした。
エクセルのバージョンは97です。よろしくお願いします。

Aベストアンサー

どもども田吾作7です。

MultiPage1.Value=ページのインデックス値

これでページは切り替わります。

でわでわ

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ユーザーフォームを表示中にシートの操作をさせるには

ユーザーフォームを表示中にシートの操作をさせる事はできるのでしょうか。
セルへの入力、画面のスクロールなどは、ユーザーフォームからマクロを実行させたり、.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)
で切り上げです。

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

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

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

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

Aベストアンサー

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

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

Qエクセルで、任意のテキストボックス等にフォーカスを移したい

すいません、またまた質問です。

エクセルXPで、ユーザーフォーム上に
複数のテキストボックスやリストボックスを
置いて入力した値が任意のシートのセルに
入力されるというものを作っています。
(しかしながらVBAがほとんど見様見真似レベル
なのでかなり悪戦苦闘(~_~*))

そこで、ユーザーフォームにて例えばTEXTBOX1に
入力後、Enterで次のテキストボックス(又は
リストボックス)にフォーカスを移したいのですが、
その時に任意のテキストボックス等にフォーカスを
移すことは可能でしょうか。

番号順(なのかな?)に自動でフォーカスを
移動させることはできたのですが、任意の対象へ
移動させるやり方とかってあるのでしょうか。

例えばTEXTBOX1からRISTBOX5へ移すとか。

入力する順番に移動できたらユーザーフォーム上での
入力作業が非常に楽になると思って(^o^;)

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

Aベストアンサー

#2 tommy-pie83 さんのご回答で良いとおもいますが、
その作業は面倒なので、

VBE でフォームオブジェクトを表示した状態で、
[表示]-[タブオーダー]

で調整です。ちなみに、フォーカスを取得させない
コントロールなら、「TabStop」プロパティーを
False にします。

QVBA ユーザーフォームのChangeイベントを停止したい

ユーザーフォームのChangeイベントは
Application.EnableEvents = Falseで停止できないのですか?
シート上のChangeイベントの停止はできましたが、ユーザーフォーム上のテキストボックス等のChangeイベントは停止できませんでした。
ユーザーフォームのChangeイベントを停止する方法があれば教えてください。

Aベストアンサー

こんにちは。

> Application.EnableEvents = Falseで停止できないのですか?

できません。あくまで、Application(Excel)のイベントに対するモノであり、
OLE オブジェクトであるフォームのイベントまでは制御できません。

> ユーザーフォームのChangeイベントを停止する方法があれば教えてください。

イベントの実行可否フラグを用意する方法があります。イベントの発生
自体は抑止できませんが、フラグが立っていなければイベント内の処理を
キャンセルすることで事実上、イベントを抑止したことになります。

新規 Userform に CheckBox1 と TextBox1 を配置して、下記ソースを
貼り付け、動作確認してみて下さい。

Private fEnableEvents As Boolean

Private Sub UserForm_Initialize()
  With Me.CheckBox1
    .Value = True
    .Caption = "Enable Events"
  End With
End Sub

Private Sub CheckBox1_Change()
  fEnableEvents = CBool(Me.CheckBox1.Value)
End Sub

Private Sub TextBox1_Change()
  If fEnableEvents Then
    MsgBox "Raise Change Event."
  End If
End Sub

こんにちは。

> Application.EnableEvents = Falseで停止できないのですか?

できません。あくまで、Application(Excel)のイベントに対するモノであり、
OLE オブジェクトであるフォームのイベントまでは制御できません。

> ユーザーフォームのChangeイベントを停止する方法があれば教えてください。

イベントの実行可否フラグを用意する方法があります。イベントの発生
自体は抑止できませんが、フラグが立っていなければイベント内の処理を
キャンセルすることで事実上、イベントを抑止したこ...続きを読む

QUserForm.showでマルチページ1を見出し

UserForm.showでフォームがでたときマルチページ1~4のうちページ1を見出しに表示したいのですが
どなたか解る方よろしくお願いします。

Aベストアンサー

デザイン画面で表示しているページが実行時に表示されるので
ページ1を選択しておきましょう。


私もこの作業を結構忘れる事があるので下記のコードを必ず入れています。

UserFormの初期化イベント

Private Sub UserForm_Initialize()
  Me.MultiPage1.Value = 0
End Sub

page1は0、page2なら1といった具合です。

それでは。


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

人気Q&Aランキング