プロが教える店舗&オフィスのセキュリティ対策術

excel2000でVBEにてユーザフォームを作りました。そのフォームの中にスピンボタンがあります。スピンボタンのプロパティsmallchangeにて増減値を変えることができるのは知っているのですが、整数しか選択できないようです。作成した当初はデフォルトの1ずつの増減で問題なかったのですが、0.1ずつ増減させる必要が出てきました。どのようにすればよいのでしょうか。excel97なら以下のサイトに方法がかかれていますが、当方excel2000な上に、記述された内容が理解できません。
http://support.microsoft.com/kb/151498/ja

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

A 回答 (7件)

スピンボタンのChangeイベントに、


値を表示したいコントロール.value=スピンボタン.value / 10
を記述すればよいのではないでしょうか。
提示のURLは0.1刻みではなく0.25刻みとするときのやり方が書いてありますが、コントロールへのマクロの登録の仕方が異なります(覚えなくて良いと思います)。
    • good
    • 0
この回答へのお礼

Raistlin様、回答ありがとうございます。
お礼と質問の補足です。
あるVBAマクロの入門書に日付をスピンボタンでテキストボックスに入力する方法が書かれています。以下、その抜粋です。Txt月はテキストボックスのオブジェクト名、Spn月はスピンボタンのオブジェクト名です。MyDate、MyMonthは変数です。

Private Sub Spn月_Change()
Txt月 = Spn月
End Sub
Private Sub Txt月_Change()
Spn月 = Txt月
End Sub
Private Sub UserForm_Initialize()
MyDate = Date
MyMonth = Month(MyDate)
Txt月.Text = MyMonth
End Sub

これを参考にこれまでは1ずつの増減で問題なく使っていました。
Raistlin様のアドバイス通り、試しにスピンボタンのChangeイベントTxt月 = Spn月の部分をTxt月.Value = Spn月.Value / 10としたところ、以下のエラーが発生し、デバッグにてテキストボックスのChangeイベントSpn月 = Txt月が黄色でクローズアップされました。
「実行時エラー'380':
Valueプロパティを設定できません。プロパティの値が不正です。」
各式の値を確認したところ、
スピンボタンのChangeイベントにて
Txt月.Value = "0.1"
Spn月.Value = 1
Txt月.Value = Spn月.Value / 10なので問題ないと思われます。
テキストボックスのChangeイベントにて
Spn月 = 1
Txt月 = "0.1"
Spn月 = Txt月となっていません。なぜ、Txt月の値がSpn月に代入されないのでしょうか。
入門書以上の内容に対してはお手上げです。皆様の助けが必要です。
どのようにこの問題を解決すればよろしいのでしょうか。どうかよろしくお願いいたします。

お礼日時:2007/03/26 10:13

TextBox1.Value = SpinButton1.Value / 10


では如何ですか?
    • good
    • 0
この回答へのお礼

Kasouken様、回答ありがとうございます。
ANo.1 Raistlin様の回答と同じ内容と理解しています。ですので、ANo.1 Raistlin様へのお礼にかかせていただいた質問の補足を参照していただいて、何かアドバイスいただけたら幸いです。
よろしくお願いいたします。

お礼日時:2007/03/26 10:18

TextBoxの値をSpinButtonに入れる必要があるのですか?

この回答への補足

Kasouken様、ありがとうございます。
上記の質問は、
Private Sub Txt月_Change()
Spn月 = Txt月
End Sub
が必要ないのではと言うことでよろしいでしょうか。試しに上記コードを削除してみましたが、上記コードがないと、スピンボタンのMin値からいつもスタートすることになるようです。これではちょっと困るのです。

実は、VBAの勉強のために今まで手入力していた日々の体重測定値を、ユーザフォームを使ってやろうとしているのです。それくらいのことにVBA(ユーザフォーム)がいるのかという意見が当然出てくると思いますが、あくまでもVBAの勉強のためです。それで出来上がったものがスマートなものならば、それで手入力の手間が少しでも省けるだろうと考えています。
それで、普通の人なら日々の体重に大きな変化がないと思いますし、変化量も0.1kg単位だと思います。さらに、私の体重だけではなくて家族の分も対応できるようにしたいと思っています。ここで上記コードがないと、スピンボタンのMin値からいつもスタートすることになるので、私の体重だけならMin値の設定を調節すればMin値から0.1kgずつ増やしていく手間はそんなに感じないかもしれませんが、私と20kg以上離れた家族の分をカバーするとなると、手入力の方が早いという結論になりますし、体重の変化に合わせてMin値を設定し直すというのも汎用性に欠けるので、各人の前日の体重をtextboxの値に設定したいと思っています。とりあえずは一人分の入力環境を整えたいと考えています。

皆様に何とか知恵をお借りしたいと思っています。
よろしくお願いいたします。

補足日時:2007/03/26 14:21
    • good
    • 0

値を表示したいコントロール.value=スピンボタン.value / 10


というコードを書くよう提案したのは、スピンボタンのValueは整数値に限られているからです。
ここでやっていることは、スピンボタンの値が585のとき、値を表示したいコントロールの値は58.5ということにしましょうということです。

したがって、値を表示したいコントロールのChangeイベントでは、
スピンボタン.value = 値を表示したいコントロール.value * 10
としないと、スピンボタンの値が、決めたルールに従ったように変わりません。
    • good
    • 1
この回答へのお礼

Raistlin様、大変ありがとうございます。
私が期待していた動作が実現できました。
私がやりたかったことは基本が分かっていれば簡単なことだったんですね。私が持っている入門書の説明は分かり難いです。Raistlin様の説明でばっちり理解できました。

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

お礼日時:2007/03/26 20:01

よく検証していませんが


下記ではどうでしょう
まだエラー処理が抜けてるかもです。
Option Explicit
Dim myT As Double
'------------------------------------------
Private Sub SpinButton1_Change()
Dim myAns As Double
If Me.TextBox1.Value = "" Then Exit Sub
If IsNumeric(TextBox1.Value) = False Then
   myT = 0
   Me.SpinButton1.Value = 0
Exit Sub
End If
myAns = Me.SpinButton1.Value / 10
Me.TextBox1.Value = myT + myAns
End Sub
'------------------------------------------
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Me.TextBox1.Value = "" Then Exit Sub
If IsNumeric(TextBox1.Value) = False Then
   myT = 0
   Me.SpinButton1.Value = 0
   Exit Sub
End If
myT = CDbl(Me.TextBox1.Value)
End Sub
'------------------------------------------
Private Sub UserForm_Initialize()
With Me.SpinButton1
   .Max = 200
   .Min = -200
End With
End Sub
    • good
    • 0
この回答へのお礼

Kasouken様、ありがとうございます。
今回の私がやりたかったことは、Raistlin様の回答で解決いたしました。
このコードを理解するには大変時間がかかりそうです。
今後の勉強に使わせてもらいます。

また、分からないことがあった時はよろしくお願いいたします。

お礼日時:2007/03/26 20:05

こんばんは。



単に、TextBox がきちんと数値が入れられるようにしてあれば、後は、以下のようにすればよいのではありませんか?

Private Sub SpinButton1_SpinDown()
TextBox1.Text = CStr(Val(TextBox1.Text) - 0.1)
End Sub

Private Sub SpinButton1_SpinUp()
TextBox1.Text = CStr(Val(TextBox1.Text) + 0.1)
End Sub

値を確保するのは、TextBoxですから、単に、SpinButton の上下のイベントだけがあれば、それでよいのだと思うのですが……。
    • good
    • 1
この回答へのお礼

Wendy02様、ありがとうございます。
なるほど、このような方法もあるのですね。非常に参考になります。
私の持っている入門書以上のことは考えもつかないので、Changeイベントでしかできないものと考えていました。SpinUp/Downイベントの使い方が理解できました。

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

お礼日時:2007/03/26 20:16

#2です。


ごめんなさい。
#6さんの回答が正解ですね。

何かめんどくさい事考えていました。
    • good
    • 0

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