テキストボックスに、たとえば ”2+3”を書き込んで、”5”という
計算結果を出したいと考えています。
Val関数を使うと変換が 2 で止まってしまいます。
入力ができれば、テキストボックスにはこだわりません。
VB6での話ですよね?!
http://kone.vis.ne.jp/program/#sample33
これはよくできていると思いますが・・・
以上。
オショウさん、ありがとうございます。
すごいですね!
ソースコードを読み取ろうとしましたが、理解できないところだらけです。
たとえば、
Dim st$
Dim i#, v#, l&, j&, k&
Dim STime&
Dim PCol&
このような書き方は初めて見ました。
VB入門書では 「Dim *** As ***」となっています。
また、「If Col > 6 Then Col = 1」 のあとに 「End If」 がありません。
「End If」を書き忘れると、実行時にエラーとなるはずなのに・・・。
下記の部分を調べて試してみます。
Dim c As New Calc
st = Text1.Text
v = c.MCalculation(st)
> テキストボックスに、たとえば ”2+3”を書き込んで、”5”という
> 計算結果を出したいと考えています。
Option Explicit
Private Sub Form_Load()
Text1.Text = "2+3"
End Sub
Private Sub Command1_Click()
Dim v As Variant
With CreateObject("ScriptControl")
.Language = "VBScript"
v = .EVal(Text1.Text)
End With
MsgBox CStr(v)
End Sub
魔界の仮面弁士さん、ありがとうございます。
With CreateObject("ScriptControl")
.Language = "VBScript"
v = .EVal(Text1.Text)
End With
このコードの意味を調べて試してみます。
オショウさん、下記のコードで試したら、
Dim v As Variant
Dim c As Variant
Dim st As String
st = Text1.Text
v = c.MCalculation(st)
Text2.Text = Str(v)
v = c.MCalculation(st) のところで、「オブジェクトが必要です」というエラーメッセージが出てしまいます。 この場合の”オブジェクト”の意味がわかりません。 もう少し調べてみます。
魔界の仮面弁士さん、下記のコードで試したら、
Dim v As Variant
With CreateObject("ScriptControl")
.Language = "VBScript"
v = .EVal(Text1.Text)
End With
Text2.Text = Str(v)
With CreateObject("ScriptControl") のところで、「ActiveXコンポーネントはオブジェクトを作成できません」というエラーメッセージが出てしまいます。
計算式全体を処理できる、Val関数のようなものは用意されていないのでしょうか?
オショウさん、Calcファイルのコードを見ていませんでした。
「オブジェクトが必要です」というのはこのコードのことですね?
Form1のコードはCalcファイルのコードを呼び出しているのだとおもいます。
でも、大量の難しい内容です。
上記サイトのものです。
余り他人が見ることを考えてないので、汚いコードですいません。
手っ取り早く問題を解決するなら、魔界の仮面弁士さんの方法の方が
お手軽でよいと思います。
一応私のコードについて補足しておきます。
> Dim st$
> Dim i#, v#, l&, j&, k&
> Dim STime&
> Dim PCol&
>
> このような書き方は初めて見ました。
> VB入門書では 「Dim *** As ***」となっています。
余りきれいな書き方ではないのですが、as long→&、as double→#
as string→$のように変数定義部は書き換えることができます。
ヘルプのDim文のところやデータ型の部分に書いてあるかと思います。
> また、「If Col > 6 Then Col = 1」 のあとに 「End If」 がありません。
> 「End If」を書き忘れると、実行時にエラーとなるはずなのに・・・。
Thenの後に命令文を書いた場合、End Ifは必要ありません。
ただし、命令文は1行しかない場合に限ります。
> v = c.MCalculation(st) のところで、「オブジェクトが必要です」というエラーメッセージが出てしまいます。
元のサンプルでのcの変数定義は、Variantでなく以下のようになっています。
Dim c As New Calc
> でも、大量の難しい内容です。
計算式を自分で処理するのは、意外に難しい問題です。
コンパイラの作り方の本なんかを見ると書いてありますが、
プログラム経験がないと難しいかも知れません。
>With CreateObject("ScriptControl") のところで、「ActiveXコンポーネントはオブジェクトを作成できません」というエラーメッセージが出てしまいます。
これを解決するのが一番手っ取り早いと思いますよ。
もし、ScriptControl が未インストールの環境なのだとしたら、
http://www.microsoft.com/downloads/details.aspx?FamilyID=151ef63d-23e9-4367-bb25-37310c6222fe&displaylang=ja
から入手できます。
kone さん、ありがとうございます。
DimやIf-Thenの書き方について、初めて知りました。
でも、
> v = c.MCalculation(st) のところで、「オブジェクトが必要です」というエラーメッセージが出てしまいます。
元のサンプルでのcの変数定義は、Variantでなく以下のようになっています。
Dim c As New Calc
これの意味がわかりません。
もうみていない? さん、ありがとうございます。
>これを解決するのが一番手っ取り早いと思いますよ。
解決方法が・・・・?
ごめんなさい。
魔界の仮面弁士さん、ありがとうございます。
教えていただいたページを開きましたが、「ActiveX コントロールのインストール」というメニューが出てきません。
Meなのに、なぜメニューが出てこないのかよくわかりません。
ScriptControl のブラウザ画面に「確認」というボタンはありませんか?
海賊版Windowsを排除するため、正規なライセンスのWindowsかどうか試されます。
それでOKであればダウンロードできるはずですよ。
もし動かないなら、ブラウザのセキュリティ設定に問題があるのかもしれませんね。
ちょっと立ち寄りました さん、ありがとうごじます。
確認のための画面を開こうとしたら、アップデートが必要と出ました。
アップデートしようとしたら、外国語対応以外のアップデート項目はありません
と出ました。
富士通のFMV、Meです。
セキュリティは、スパイボットとサンダーバードを入れてあります。
皆様ありがとうございます。
Mid,Asc,Val,Strの関数を使って、「数字」「演算子」「数字」の計算式を
テキストボックスに入力し計算結果を出力することができました。
初歩的な方法であると思いますが、この考え方で続けていきたいと思います。
計算式に"( )"がある場合も含めて、考えてみます。
これからもまた、教えていただきたくお願いいたします。