[[20120222112852]] 『電卓』(でんちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

 『電卓』(でんちゃん)

 皆さんのお力をお貸しください。

 Sub Sample()
  Dim ReturnValue

  ReturnValue = Shell("CALC.EXE", 1)
  AppActivate ReturnValue
 End Sub

 上記のコードで電卓を起動させる事はネットで発見致しました。
 電卓の答えを「UserForm1.TextBox4」に入れたいのですが、どのようにすればよいのでしょうか?
 そもそもそんな事は可能なのでしょうか?
 宜しくお願い致します。

 WindowsXP Excel2007

 過去ログは探してみましたか?
 「電卓」で検索した中に↓のような過去ログがありましたが。

[[20060409151555]] 『電卓の計算結果』(banzai)

 WindowsXP,Excel2002ではうまくいきました。
 (カリーニン)

 私なら、テキストボックス内で計算してしまうかな。
 
 Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     On Error Resume Next
     Me.TextBox4.Value = Evaluate(Me.TextBox4.Value)
     If Err.Number <> 0 Then
         MsgBox "式が不完全です"
     End If
     On Error GoTo 0
 End Sub
 
計算式をテキストボックスに入力して他のコントロールにフォーカスが移ると
計算します。ワークシート関数もある程度は使えます。
 
(みやほりん)(-_∂)b


 返事が遅くなりましてすいませんでした。

 >カリーニンさん
 ありがとうございます。

 >みやほりんさん
 テキストボックス内で計算が出来るとは知りませんでした。
 勉強になります。
 うまくいきました。ありがとうございました。

 また、何かありましたら是非お願い致します。

 (でんちゃん)

 この質問の

  Sub Sample()
  Dim ReturnValue

  ReturnValue = Shell("CALC.EXE", 1)
  AppActivate ReturnValue
 End Sub

 を参考にして、シート上に電卓が表示するように出来ましたが
 計算結果を入力しようとセルを選択すると電卓が 画面上から消えて
 しまいます。
 シートのどのセルを選択しても、電卓が表示されているようには
 どうのようにすれば宜しいでしょうか。
 教示をお願いします。
                                    (光)


 >シートのどのセルを選択しても、電卓が表示されているようには
 >どうのようにすれば宜しいでしょうか。

 文字通り受け取れば、↓のようなことになりますが、もちろん違いますよね?

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  AppActivate "電卓"
 End Sub

 これはシートから電卓にフォーカスが移ってしまうし。
 APIを駆使すれば電卓にフォーカスを移さずに電卓表示しながらシート編集
 も出来る、ということも可能なのかもしれませんがわかりません。

 (カリーニン)

 >シートのどのセルを選択しても、電卓が表示されているようには
 >どうのようにすれば宜しいでしょうか

 直接の回答ではありませんがEXCELで電卓(CALC.EXE)を使うツールを利用されたらどうでしょう。
 簡単です。 
http://www.vector.co.jp/soft/win95/business/se411231.html
 (yama)

 電卓が常に手前に表示なら、

 Option Explicit
 Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
 lpClassName As String, ByVal lpWindowName As String) As Long
 Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
        ByVal X As Long, ByVal Y As Long, _
         ByVal cx As Long, ByVal cy As Long, _
        ByVal wFlags As Long) As Long
 Public Const walways = -1 '常に手前にセット
 Public Const wreset = -2  '解除
 Public Const wdisp = &H40 '表示する
 Public Const w_SIZE = &H1 'サイズを設定しない
 Public Const w_MOVE = &H2 '位置を設定しない
 Sub Sample()
   Shell "CALC.EXE", 1
   Call SetWindowPos(FindWindow(vbNullString, "電卓"), _
          walways, 0, 0, 0, 0, wdisp Or w_SIZE Or w_MOVE)
 End Sub

 ichinose

 教示下さった皆さん有難うございます。

 ichinoseさんへお伺いします。

 Option Explicit
 Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
 lpClassName As String, ByVal lpWindowName As String) As Long
 Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
        ByVal X As Long, ByVal Y As Long, _
         ByVal cx As Long, ByVal cy As Long, _
        ByVal wFlags As Long) As Long
 Public Const walways = -1 '常に手前にセット
 Public Const wreset = -2  '解除
 Public Const wdisp = &H40 '表示する
 Public Const w_SIZE = &H1 'サイズを設定しない
 Public Const w_MOVE = &H2 '位置を設定しない

              の部分も標準モジュールへ作成すれば宜しいでしょうか。   (光)

    


 >の部分も標準モジュールへ作成すれば宜しいでしょうか。
 そうですよ!! 何か問題が発生しましたか?

 私の環境では、正常に作動しています(Win2000、Excel2002)

 ichinose@window7だと何かあったかなあ・・・。

 ichinoseさんへ

    解決しました。有難うございました。   (光)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.