[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ実行中に』(つん)
すみません。原始的な質問なのですが・・・
マクロの実行中に マウス・キーボードの入力を受け付けないコードって
ありますか?
一応、過去ログも見ましたが、それらしきコードが探せなくて・・・
ちなみに他アプリへの切替処理(IE)を含むマクロです。
どなたかご教授いただけませんでしょうか?
よろしくお願い致します。
具体的な使用目的をお教え下さい。 Windowsはマルチタスクでアプリケーションを使用できますが、 Excel以外のアプリケーションに切り替えたときも、 操作をできないようにしたいのでしょうか? (INA)
エクセルデータを全国の社員にユーザーフォームで入力させて
それをメール(グループウェア)で自分の元に暗号で飛ばしたいんです。
エクセルのみであれば、progressbar等で画面を固定できるのですが
エクセルデータコピー →アプリケーション切替(sendkeysで操作)
→エクセルに切替で再度データコピー
→アプリケーション切替で転送
問題はIEに切り替えたときにリロードタイム
タイム = Now + TimeValue("00:00:05")
Application.Wait (タイム)
等を取っているのでその間にキー(特にタブ)を押されると sendkeyがずれてしまうのを
防ぎたかったんです。
切替は初めの呼び出しをセルに記入したハイパーリンク→IEを呼び出し
AppActivate "Microsoft ○○" で交互に切り替えています
転送マクロは仕上がったのですが、ちょっとグレードアップさせたくて。
この説明でわかりますでしょうか? (つん)
だいたい理解できます。
>自分の元に暗号で飛ばしたいんです。 これの仕様次第なのでなんともいえませんが、 いちばん気になったのは、「全国の社員」といった広範囲のユーザーを対象にした おおがかりなVBAなのに、不安定な(sendkeysで操作)に頼っているところです。
>sendkeyがずれてしまうのを もともと安定性を重視するプログラムでは、 重要な箇所に動作が不安定なSendkeysは使用しないものです。
>問題はIEに切り替えたときにリロードタイム IEはActiveXオートメーションで制御しているのではないのでしょうか? → Set obj = CreateObject("InternetExplorer.Application")
参考 http://www.asahi-net.or.jp/~ef2o-inue/download/sub09_020_050.html http://homepage2.nifty.com/inform/vbmania/source/ievb.htm <AppActivate ステートメントと SendKeys ステートメントを Win 32 オペレーティングシステムで使用する場合> http://support.microsoft.com/default.aspx?scid=kb;ja;408402
(INA)
sendkeysと言う不安なコードは使いたくないのですが、
VBAコード歴2ヶ月ド素人の私は、
それしか適当なコードを知らないのです。
こんな付け焼刃マクロではなくて、本当はもっとキチンとした物を作成するべきなんでしょうけれども、
何処の企業もそうなのでしょうが・・・
やんごとなき事情(システム本稼動までの繋ぎ)により・・です。
IEと言ってもLANで繋がったイントラネットなのです。
端末もXPで統一されているので、動作は今の所安定しているように思います。
(必殺のエラー回避コード→エラーが出たら再度送れ!届くまで何度でも送れ!と全員に命令)
ただ、報告用のユーザーフォームを
何度も何度も条件分岐させて繰り返し処理している為に、
これ以上は新たな何かを組み込みたく無いと言う気持ちから
簡単なコードで操作不可に出来れば・・と思って質問を出しました。
そんな魔法みたいなコードは存在しないんでしょうね!
色々参考になる事を教えていただきありがとうございました。(つん)
なるほど・・・
>問題はIEに切り替えたときにリロードタイム > Application.Wait (タイム) >等を取っているのでその間にキー(特にタブ)を押されると > sendkeyがずれてしまうのを防ぎたかったんです。
IEを非表示で起動して、Wait後に表示しては如何でしょう?
(INA)
レスが遅れてすみません・・・目を離してしまっておりました。
>IEを非表示で起動して、Wait後に表示しては如何でしょう?
そんな事が出来るんですか?
非表示コードは
Application.ScreenUpdating = False
しか知らないのですが・・・
アプリケーションを切り替える際に上記コードを書いてもダメでした・・・
よろしければご教授下さい。 どうかお願い致します。
私は全て自己流で覚えているので、基本的な事を知らないのです。
(つん)
掲載したリンク先のページは見て頂けたのでしょうか・・ InternetExplorerは、ActiveXオートメーションで制御可能なアプリケーションです。 なので、CreateObject関数を用いて起動すれば、VBAでいろいろな制御が可能です。
Dim obj As Object
Set obj = CreateObject("InternetExplorer.Application") obj.Visible = False obj.Navigate "https://www.excel.studio-kazu.jp/" & _ "cgi-bin/kazuwiki2.cgi?mycmd=read&mypage" & _ "=[[20050225114450]]&mytime=000627"
Application.Wait (Now + TimeValue("0:00:05")) obj.Visible = True
(INA)
本当に何度も何度もありがとうございます。
リンク先ページは熟読しましたが、まったくもってちんぷんかんぷんでした・・・
上記コードも今すぐ出来たかどうか?と回答する事が出来ません(まだ理解していないので)
キチンと勉強して理解して、来週中くらいには成果をご連絡差し上げたいと思います。
INA様、何度もありがとうございました。(つん)
VBAヘルプの CreateObject 関数 のページを読んでみて下さい。 そこそこ詳しく書いてあります。 (INA)
残念ながらこのPCにはVBAのヘルプがインストールされていない為に
CreateObject関数に関しては全然解らずじまいでした。
ActiveXオートメーションに関してはまったくもってお手上げです。
読めば読むほど迷宮入りしてしまう状態です。
やはり根本的に勉強しなおすべきと思い 少し自分でも調べました。
(30時間位寝てませんw)
sendkeys → keybd_event→ 最終的にはSendInput関数に辿り着きました
この関数だと、キーコードによる入力を受け付けないようです。
http://fukkey.dyndns.org/pins/vb/020315/35491.html
(読んで来たのみです。質問は一切していないのでマルチポストに当たらないと良いのですが)
これでTABキーは送れるようになりました・・・
Const OLECMDID_PASTE = 13
objIE.ExecWB OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT
ペーストにはこのコードを使用することによって sendkeysを排除
あとはENTERキーが送れれば・・・なんですが・・・
もう少しがんばってみます。 (つん)
>最終的にはSendInput関数に辿り着きました API を使うことに比べたら ActiveXオートメーション(CreateObject)なんて簡単ですよ。 (用途が違いますけど。)
Sendkeysに比べたらSendInputは安定しているようですね。(使ったこと無いですが)
VBAを利用するのにヘルプをインストールしていないのは致命傷です。 どんな上級者でもヘルプは利用します。 Office(Excel)のCDからインストールしてください。
http://www.bcap.co.jp/hanafusa/VBHLP/SendMous.htm
http://www.moug.net/skillup/nksw/nksw15-01.htm
(INA)
ま、その内無断拝借してインストール致します。
ところで、本件ですが。
ENTERキーは SendInputをtab→RETURN に書き換えてテスト
→上手く動かないので、モジュールを分けて(call)呼び出しを掛けた所上手く行きました。
・・・ただし、新たなるトラブル発生。モジュールを分けると
ペーストコードが上手く働きません・・・
Const OLECMDID_PASTE = 13
Const OLECMDEXECOPT_DODEFAULT = 0
Dim objIE As Object
Dim a, b
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True '可視
objIE.Navigate "http://******"
Do While objIE.Busy = True
(拾ってきたコード原文まま使用しています)
これで
objIE.Execwb OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT で貼付出来るんですが (この時点ではエクセル切替、コピー→貼付も可能)
マクロを切り替えると「実行時エラー91 オブジェクト変数、またはwithブロック変数が設定されていません」と出ます。
そのまま手作業でペーストすると内容が貼付られるのでクリップボードが空と言うことは無いと思うのですが・・・
Execwbが怪しいような・・・
ここまで来たのだから、何とか頑張ってみます。
またご連絡致します。
ありがとうございます! (つん)
INA様、長々とお付き合いいただいて本当にありがとうございます。
あなたのちょっと辛口(失礼ですが・・)なアドバイスがなければ
きっと諦めていたと思います
本当に本当にありがとうございました!
心から感謝いたします (つん)
全容が分からないので、あるていど勘で回答していたのですが、 解決したようで何よりです。 (INA)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.