advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 85 for VBA 強制終了 (0.004 sec.)
vba (14723), 強制終了 (237)
[[20060409151555]]
#score: 16176
@digest: e47d84b9c7b47ed231cda124b01c409e
@id: 21403
@mdate: 2006-04-20T00:03:36Z
@size: 8533
@type: text/plain
#keywords: hwnd2 (43139), hwnd1 (37410), 電卓 (29431), sendmessage (28058), gettextlength (26533), banzai (20472), findwindowex (16170), returnvalue (15809), 卓の (15553), カギ (14272), gettext (14206), vbnullchar (11606), service (10446), findwindow (10023), 卓を (9951), ギ) (9524), アカ (8249), length (7960), declare (5789), alias (5691), user32 (4796), sendkeys (2702), ルサ (2505), byval (2366), トボ (2108), 起動 (2031), marbin (1821), ーフ (1722), テキ (1657), テッ (1608), キス (1532), function (1242)
『電卓の計算結果』(banzai)
いつも教えていただきありがとうございます。 早速ですが、ユーザーフォーム上のテキストボックスに ウインドウズの電卓で計算した結果を反映させるいい方法があれば ご教示願います。 今は、電卓の結果をCtrl+CでコピーしてCtrl+Vでテキストボックスに 貼り付けをしています。 この動作を何か簡単に出来る方法がないものかと思いまして・・ 反映させたい、テキストボックスを選択して、電卓で計算した結果を 何らかの方法で反映できたらいいなと思うのですが。 わがままを言えば、電卓の統計ボックスの値も反映できたらいいななんて 思ってます。 よろしくご教示願います。 WinXP エクセル2003 ---- 電卓の結果の単純なコピペの方法です。 電卓側では 「編集」→コピー ユーザーフォーム側では With Me.TextBox1 .Paste End With でいかがでしょう? (MARBIN) ---- エクセルで電卓を作っちゃう、という手もあります。 ほかにはSendKeysを使った方法もありそうですが、よく わかりません。 (MARBIN) ---- ありがとうございます SendKeysですね。 使ったことないので勉強していますが、 いまいち理解できないです・・ もう少し勉強してみます。 (banzai) ---- 説明不足でした。 SendKeysを使うには、予め電卓のウィンドウを アクティブにしておく必要があります。 しかも手作業ではなく、プログラムでアクティブ にしないといけないと思います。 そのプログラムでアクティブにする、という部分 がネックになると思います。 (MARBIN) ---- 電卓を起動するのは↓で出来そうです。 VBAヘルプの記述のほとんどコピペです。 Sub den() Dim ReturnValue As Variant ReturnValue = Shell("C:¥WINDOWS¥SYSTEM32¥CALC.EXE", vbNormalFocus) AppActivate ReturnValue End Sub ただ、計算結果の取得は他サイトの過去ログ みても出来ないようなことが書いてありまし た。 やはり手作業でコピペするかエクセルで電卓 を作るしかないようです。 (MARBIN) ---- >ウインドウズの電卓で計算した結果を反映させる SendMessage で WM_GETTEXT を送って取得出来ないでしょうか。 私がテストした感じではうまく取得できているように見えます。 テストしたコードは正しいものかどうか、 私には判断できないので書きませんが。 (アカギ) ---- MARBINさんアカギさんありがとうございます。 電卓の起動と終了はなんとかできました。 終了時に電卓を閉じてるとエラーが出ているのをどうしたものか 考えておりまして、肝心の内容の検討がまだ十分じゃないのです・・ 電卓の終了時にすでに電卓を閉じてる場合はエラーを飛ばすように したらできました。 アカギさん、もし何らかのエラーが出て構わないので もしよろしければテストのコード教えていただけないでしょうか。 (banzai) ---- 他サイトで見かけたコードを少し改造したものです。 電卓が起動しているかどうかチェックします。 Sub kidouchk() Dim Service As Object, PrcSet As Object, Prc As Object Dim MesStr As String Set Service = _ CreateObject("WbemScripting.SWbemLocator").ConnectServer Set PrcSet = Service.ExecQuery("Select * From Win32_Process") For Each Prc In PrcSet MesStr = UCase(Prc.Description) If MesStr = "CALC.EXE" Then MsgBox "電卓が起動中です", 64: Exit For End If Next Set PrcSet = Nothing: Set Service = Nothing End Sub (MARBIN) ---- Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _ (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Const WM_GETTEXT As Long = &HD Const WM_GETTEXTLENGTH As Long = &HE Private Sub CommandButton1_Click() Dim hWnd1 As Long, hWnd2 As Long Dim length As Long Dim s As String hWnd1 = FindWindow("SciCalc", "電卓") hWnd2 = FindWindowEx(hWnd1, 0, "Edit", vbNullString) length = SendMessage(hWnd2, WM_GETTEXTLENGTH, 0, 0) s = String(length + 1, vbNullChar) Call SendMessage(hWnd2, WM_GETTEXT, length + 1, ByVal s) TextBox1.Text = Left(s, InStr(s, vbNullChar) - 1) End Sub テストしたのはこんな感じです。電卓を起動して実行してください。 おかしなところがあれば、誰か突っ込んでくれるとうれしいです。 (アカギ) ---- ちょっと、的外れですが、テンキー電卓はご存知でしょうか? http://www.canon-sales.co.jp/calc/lineup/tenkey-nb.html 結構便利です。 (浦上) ---- 浦上さんありがとうございます。 こんなグッズがあるんですね〜予算があったら購入してみたい・・ MARBINさんありがとうございます。 うまくチェックできそうです! アカギさん、難しそうなコードですね・・ 私には読解不可能です・・ で、試しに今のコードに貼り付けて使ってみたのですが、 前半部分(コマンドボタンクリックより前)の部分でコンパイルエラーって 表示されます。 「定数、固定長の文字列、配列、ユーザー定義型および Declare ステートメントは、 オ ブジェクト モジュールのパブリック メンバとしては使用できません。」 とメッセージがでます。 すいません。ヘルプ見ても全く理解できません・・ (banzai) ---- Declareの部分は標準モジュールに貼り付けてください。 (アカギ) ---- 早速試してみました。 テキストボックス1の値が空白になりますが、値が入りません。 何か他に設定する必要があるのでしょうか? (banzai) ---- 電卓は起動してるよね。 ステップ実行した時に、各変数の値はどうなっていますか? (アカギ) ---- ステップ処理してみます。 その前に・・ ユーザーフォームを起動するとアプリケーションエラーが出て強制終了 してしまいます・・ それも、順調に起動するときとしないときがあるのです。 コードの書き方が悪いのかもしれません。 なんとなくですが・・for〜nextのなかのdo〜loopがはいっているのですが、 やっぱりこれってまずいでしょうか? 関係のない質問ですいません。 (banzai) ---- ステップ処理した結果です。 hWnd1 16122874 hWnd2 9175770 length 0 s "." テキストボックスの値や電卓の結果に関係なくhWnd1とhWnd2は7桁か8桁の 数値が変わります。テキストボックスと電卓の値が同じでもhWnd1とhWnd2は 違った値が出力されています。 テキストボックスは処理後は空白になります。 (banzai) ---- さきほどのアプリケーションエラーの件ですが、 ユーザーフォームを開いて処理実行後にファイルを保存すると ファイルサイズが増えています。 その後にファイルを開いてユーザーフォームを開こうとすると エラーが生じてしまいます。 コードの中にファイルサイズを増やすような要因があるのでしょうか? (banzai) ---- >for〜nextのなかのdo〜loopがはいっているのですが、 >やっぱりこれってまずいでしょうか? 何のことかまったくわからないです。 >ユーザーフォームを開いて処理実行後にファイルを保存すると >ファイルサイズが増えています。 再現しません。 新規ブックで試してもだめなのでしょうか。 なんにしても私もよくわからないので VB掲示板で聞くかあきらめるかした方がいいと思います。 (アカギ) ---- ありがとうございます。 別の質問で掲載させていただきました。 電卓の件ですが、ステップの結果ですがどうでしょうか? やっぱりこれまたわからないでしょうか? (banzai) ---- 少し前のスレですが興味があったので。 私のWin2000の電卓では計算結果の取得ができなかったので 調べてみると「Static」でした。 付属しているOSにより異なるのでしょうかね〜。 Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _ (ByVal hWndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Const WM_GETTEXT As Long = &HD Const WM_GETTEXTLENGTH As Long = &HE Sub test() Dim hWnd1 As Long, hWnd2 As Long Dim length As Long Dim s As String hWnd1 = FindWindow("SciCalc", "電卓") hWnd2 = FindWindowEx(hWnd1, 0&, "Static", vbNullString) length = SendMessage(hWnd2, WM_GETTEXTLENGTH, 0, 0) s = String(length + 1, vbNullChar) Call SendMessage(hWnd2, WM_GETTEXT, length + 1, ByVal s) MsgBox Left(s, InStr(s, vbNullChar) - 1) End Sub (やっちん) ---- やっちんさんありがとうございます。 今書き込みに気づいたので明日試してみます! まずはその報告まで。 (banzai) ---- 自分で何もできないなら、あきらめることをお勧めします。 (アカギ) ---- ありがとうございました。 あきらめます。 (banzai) ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/200604/20060409151555.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97018 documents and 608144 words.

訪問者:カウンタValid HTML 4.01 Transitional