アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセス2007です。

フォームにタブコントロール(タブ0)を置きました。

テキストボックス(テキスト_ページ番号)とコマンドボタン(コマンド_移動)も置いたのですが、
コマンドボタンをクリックしたら、
テキストボックスに入ってる値のページ番号に移動するプログラムを組みたいのですが
コードが分かりません。

例えば、テキストボックスに「2」と入力して、コマンドボタンを押したら、
ページ2が選択され前面に表示されるようにしたいです。

Private Sub コマンド_移動_Click()
Me!タブ0.Pages(Me.テキスト_ページ番号.Value).SetFocus
End Sub

としてみたのですが、エラーになってしまいます。
ご回答よろしくお願いします。

「任意のタブのページをアクティブにするには」の質問画像

A 回答 (6件)

> エラーになってしまいます。



タブ コントロールのPagesプロパティの引数には、
 ・各ページのNameプロパティ(文字列型)
 ・各ページのPageIndexプロパティ(数値型)
のどちらも指定可能な仕様になっていますが、どうやらコントロールの値を
参照させる形にした場合は、そこに入っているのが数値であっても文字列
扱いされ、ご質問のようなエラーとなってしまっているようです。

ですので、数値(PageIndex)で指定を行うのであれば、それが数値である
ことを明示した形で渡してやる(例えば数値型を指定した変数に格納する、
など)必要があります。

また、別の注意点として、PageIndexは「最小値=0/最大値=ページ数-1」
となるため、3ページ目を選択したい場合は「3-1=2」を指定する必要が
あります。

以上を踏まえて、ご質問の式を改修すると、以下のようになります:

 Me!タブ0.Pages(Me!テキスト_ページ番号.Value - 1).SetFocus

上記の式では、テキストボックスのValueプロパティに対して、「-1」の減算を
することで、Accessに数値であることを暗黙的に認識させています。
(文字列に対しては、「-」を使用しての減算操作はできないので)

なお、ページの選択は、SetFocusメソッドを使用する他に、タブコントロール
のValueプロパティを指定しても行えます:

 Me!タブ0.Value = Me!テキスト_ページ番号.Value - 1

なお、こちらの場合は、テキストボックスに「0~ページ数-1」の範囲の整数を
指定していれば、特に数値であることを明示しなくても、エラーにはなりません。
(タブコントロールのValueプロパティは、数値のみを受け付ける仕様のため)


・・・すみません、回答を作成しているうちに、nicotinismさんの回答と前半が
かぶりました(汗)
後半の「タブのValueプロパティの情報提供」ということで、ご容赦のほど(汗)
    • good
    • 0
この回答へのお礼

4さんもおっしゃる通り、
・各ページのNameプロパティ(文字列型)
・各ページのPageIndexプロパティ(数値型)
のふたつがあるようですね。

SetFocusメソッドを使わなくてもアクティブにできるなんて知りませんでした。ありがとうございました。

お礼日時:2012/12/10 22:30

>Me!タブ0.Pages(Me!テキスト_ページ番号.Value - 1).SetFocus


>上記の式では、テキストボックスのValueプロパティに対して、「-1」の減算を
>することで、Accessに数値であることを暗黙的に認識させています。

これは『テキスト_ページ番号』がテキスト型のままで行うってことですよね?
暗黙の型変換チックなのは個人的には気持ち悪いです。
イミディエイトウィンドウでも確認できますが
a="2"
としといて
?a+2

4
また、
?a-"1e-2"

1.99
とか、a=2 でも同様ですけど、確かに出来ますが
思わぬ時に足元をすくわれそうで怖いです。(^^ゞ
    • good
    • 0
この回答へのお礼

数値型か文字列型かで値が変わってきてしまうのですか。再度ありがとうございました。

お礼日時:2012/12/10 22:31

ページ番号の中の値が数値では無くてテキスト型の扱いなので


エラーになるのかなと。
『テキスト_ページ番号』の書式に、# (半角)を入力すれば
質問の、Me!タブ0.Pages(Me.テキスト_ページ番号.Value).SetFocus のままで
エラーにはならないかと。
但し、
インデックス番号はゼロから始まりますので、
1 を入力すれば ページ2が選択されてしまいますから
Me!タブ0.Pages(Me.テキスト_ページ番号.Value - 1).SetFocus
でしょうね。

あるいは 『テキスト_ページ番号』の書式は空欄のままで
Me!タブ0.Pages(val(Me.テキスト_ページ番号.Value) - 1).SetFocus
とかでも。

あとは存在しない番号の誤入力チェックを追加すればいいのでは?

インデックス番号では無くて、名前での処理は最初の回答者さんの通りです。
    • good
    • 0
この回答へのお礼

「インデックス番号」と「ページ名」を混同してました。ありがとうございました。

お礼日時:2012/12/10 22:30

なんどもすみません。


テキストボックス名が、

テキスト_ページ番号

みたいなので、回答中のtx1を

テキスト_ページ番号

におきかえてください。
    • good
    • 0
この回答へのお礼

わざわざありがとうございます。

お礼日時:2012/12/10 22:30

NO1です。


CStrは必要ないみたいなので、

Me!タブ0.Pages("ページ" & Me!tx1.Value).SetFocus

でも。
    • good
    • 0
この回答へのお礼

文字列型にしなくてもいけるのですね。

お礼日時:2012/12/10 22:29

いろいろありますが、


タブコントロールの各ページの名前が、

ページ1、ページ2のようになっているならば、

Me!タブ0.Pages("ページ" & CStr(Me!tx1.Value)).SetFocus

のようにしてみてください。
    • good
    • 0
この回答へのお礼

ページがなかったからエラーになっていたようですね。

お礼日時:2012/12/10 22:27

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

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


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