といった回避策があるようです。, さしあたり これがコードが長く見ずらい原因となっていますので、以下のサンプルコードのように関数化して使用すると操作が多少楽になります。, 「エラーの原因や回避策は後回しでいいから、とにかく目的が実現したいのだ!」 「まゆみ1101」というユーザー名です!, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。, 理系夫婦の方程式(りけいふうふのほうていしき)です。理系夫婦による初めての雑記ブログ, Excel-VBAでWordの画像を一括保存する(ペイント使用、SendKeys操作), Set wdApp = CreateObject("Word.Application"), Set wdDoc = wdApp.Documents.Open(Range("D5").Text), With Application.FileDialog(msoFileDialogFolderPicker), Application.Wait Now + TimeValue("00:00:02"), https://www.moug.net/tech/exvba/0150016.html. 紹介した記事が難しかったとのことですので補足させていただきます。 1 / クリップ 1, 回答 かなり難しいことに挑戦されていると思われますので、まずはVBAに関する基礎知識を習得することをお勧めします。, これまでなんどもSendKeysを使ってきましたが、このエラーが発生したことはないですね。。, でも「sendkeys vba 実行エラー 70」で検索するといろいろでてきました。, どうやらWindowsVista以降のセキュリティ強化の影響のようで、 ExcelのVBAでWord内の画像を一括保存するツールを作ってみました。 紆余曲折を経て、ペイントを使用して名前を付けて保存する方法にたどり着きます。SendKeysでペイントを操作します。手こずった点を説明していますので、参考にしてください。 会社で設備付けパソコンのため、アップデートはしていません。 他のアプリケーションを起動する最も簡単な方法の一つはShell関数です。 Shell関数は、引数で指定した実行形式ファイルを起動します。 Sub Sample1() Dim rc … 0, 【募集】 SendKeys"(%F4)",wait 1 / クリップ 最近Wordpressに記事を投稿するお仕事をちょくちょくしております。その際、Wordで下書きされた記事を渡されるんです。記事投稿の作業としては、ざっくりこんな流れ, 1:Word内の画像を保存する2:画像を圧縮する3:Word文書をHTML化(文字装飾とか)4:WordPressに画像をアップロード5:HTML化した記事をWordPressに投稿, VBAでWordを操作するための準備です。といっても、参照設定を一つ追加するだけですが。, 「ツール」→「参照設定」で「Microsoft Word ## Object Library」にチェックします。(##はOfficeのバージョンによります), Wordファイルはこのようになっています。(今回は自分の過去記事をWordにしてみたのを使用します), Excel VBAで作ってみた、Word内の画像を一括保存するツールです。Wordファイルの選択と、保存するフォルダの選択、ファイル名はあらかじめシートでやっておくようにしました。, また、画像のファイル名は「***0.png」「***1.png」と、指定した名前+数字(0始まり)で、pngで保存するようにしています。, このソースコードにたどり着くまでに、かなり紆余曲折しました。そんな経緯を振り返りつつ、ソースコードのポイントを説明していきます。, Wordに貼り付けてある画像は、「InlineShape」オブジェクトらしいです。「Shape」オブジェクトというのもあり、私は最初、Shapeオブジェクトを使ってやろうとしていました。が、どうも画像を取得できていない・・・ShapeとInlineShapeの違いがよく分からないけど、とりあえずInlineShapeにしたら画像を取得できるようになりました。, 私なりの解釈なので合っているか分かりませんが、Shapeは文の途中に埋め込まれていない図形で、InlineShapeは文の途中に埋め込まれている図形や画像なのかな、と。, 画像をコピーする際の注意点として普通、SelectしたらSelection.Copyだけでいいはずなのですが、Wordだからなのかダメでした。wdDoc.ActiveWindow.Selection.Copyとしないとコピーできません。, InlineShapeなら画像を取得できるのですが、保存する関数がありませんでした。Shapeオブジェクトなら保存する関数があるのですが。, InlineShapeをShapeに変換する関数があるので、それでShapeに変換して保存しようと試みたのですが、なぜか上手くいかず。原因不明です。, ツール作成に暗雲が立ち込める中、思いついたのがペイントに画像を貼り付けて保存する方法。, 手作業でやるならWord画像を右クリックで一発で保存できるのに、自動だとペイントを介さないといけないなんてバカげています。が、他に方法がないので仕方なくペイントを使って画像を保存してみることにしました。, 起動後とアクティベイト後に待ち時間を入れています。待ち時間を入れないと、上手く画像が保存されなかったためです。, VBAからペイントを操作するのに、SendKeys関数を使ってキー操作を行います。, 貼り付け(Ctrl + V)トリミング(切り取り)(Ctrl + Shift + x)名前を付けて保存(Alt + ファイル→a)保存ファイル名入力エンターペイントを閉じる(Alt + ファイル→x), の順にコマンドを送るようにしました。また、「,1000」の部分はコマンド送信後に1秒待つように指定しています。, SendKeysについてはこちらのページを参考にしました。https://www.moug.net/tech/exvba/0150016.html, なお、いろんなサイトで「名前を付けて保存」を「F4→a」としているのですが、それだと上手くいかなかったので、「Alt+f」で「ファイル」メニューを開いて「a」で名前を付けて保存というコマンドに変えています。(閉じるも同様), 一番最後にハマったのは貼り付け(Ctrl + V)の操作ができなかったこと。保存などの他の操作はできていたので、何が悪いのか見当もつかず・・・・, そしたら、こんなQ&Aをみつけました。ドンピシャ。https://q.hatena.ne.jp/1162662706, ようは、コマンドは大文字ではなく小文字でないといけなかったのです!なぜ小文字???理解不能ですが、小文字にしたらあっさりと実行できるようになりました。, ×:SendKeys “^V”, 1000 ‘貼り付け Ctrl + V〇:SendKeys “^v”, 1000 ‘貼り付け Ctrl + V, ツールを実行してみた動画です。今回はWord文書内にある5枚の画像を保存してみました。, 本当はもっと早くしたいけど、早くするときちんと画像が保存されないことがあったため、この速度で我慢しています。, しかし想像に反して手こずる手こずる…どうして手動では右クリックでできる操作が自動だとできないのか?不思議であります。, 今回の「Word内の画像を一括保存する」は、なんとか自動化できたものの、他の作業は自動化できるのかな?不安です。, 理系夫婦の妻のほうです。 ⇒Windows7で VB6 / VBA の SendKeys の問題について - アプリ仮想化奉行 ここでは、VBAで他アプリを起動したり、そのアプリを操作したりするテクニックをご紹介します。 Shell関数でアプリケーションを起動する . という状況なのかもしれないので、別方向からのアプローチも提案してみます。, 下記参考サイトですが、これは質問者さんの環境ではエラーとなったというCopyPictureメソッドの解説ページです。 フルタイム勤務ワーママ→休職中。 Excel2003で、表をコピーしてペイントに張り付け、図に変換しエクセルに張り付けようとしています。OSはwin7proです。バージョンは、これで正解かわかりませんが、6.1.7601 servicepack1 ビルド7601です。 (ツール開発、記事執筆など) rc=Shell("mspait.exe".VbNormalNoFocus) Range("B51:L55").select 3箇所構文ミスがありますし、何より選択したセルをコピーするところがないんですが。 >Excel 2003以前の[Shift]キーを押しながら[編集]メニューを選択した時に表示される[図のコピー]の機能と同じです。, この操作を実際にシート上で行いそれを「マクロの記録」してみると、記録されたVBAではCopyPictureメソッドは使用されていませんでした。(当方の環境Windows7/Office2010での結果です), つまりセル範囲を普通にコピーして「図として貼り付け」ています。(そのままですね。), 解決済みではありますが、まだ模索を続けられているようでしたらこちらも試してみてはいかがでしょうか。 ちなみに、1つの操作ごとにSendInputを実行(計4回SendInputする)でも同じ結果が得られます。, 非常に長いコードに見えますが、操作用の配列の中身は「入力キー」と「キーアップ/ダウン」の部分しか変更しておらず、他は同じ内容を毎回記述しています。 0, 回答 「CrowdWorks(クラウドワークス)」でお仕事受け付けております! Sheet("データ収集”).select インターネットで調べて、以下のように作ってみました。SendKeysのところで Sheet("データ収集”).select 手元にExcel2003が無いので動作するか未確認ですが、CopyPictureメソッドはあるようなので動作するのではないでしょうか。, 貼り付け後のサイズやら何やらが違ったりするのは全く考慮していませんし、その辺を貼り付け後に調整するならもう少しコードに工夫が必要ですが参考まで。, 貼り付け先の列数が足りず、図で張り付け縮小させようとしていました。 参考⇒セル範囲を画像としてコピーする(CopyPictureメソッド)|Excel VBA, 上記の記事内に、以下のような記載があります。 もしもう他の方の回答で解決してるのならベストアンサーをつけるようにしましょう。, 図(絵)として貼るのが目的ならば、ペイントを呼んだりせずとも、下記のようにExcelだけで完結できなくもないです。 >Excel 2007以降の[ホーム]タブ→[貼りつけ]→[図]→[図としてコピー]の機能、 teratailを一緒に作りたいエンジニア, Excel2003がある環境を触る機会がありましたので試しましたが、そのまま使えましたよ。, ひとつめに紹介した記事は「エラーの回避策としてSendInputが使えるよ」ということを説明しているので少し難しいですね。, ⇒Windows7で VB6 / VBA の SendKeys の問題について - アプリ仮想化奉行, 参考⇒セル範囲を画像としてコピーする(CopyPictureメソッド)|Excel VBA. 2016年に長女を出産。 などが参考になるでしょうか?, といった具合に、各キーのキーダウン、キーアップのタイミングを考慮しながら操作用の配列を作成し、それをまとめて実行する、といった手順になります。 Sendkeys"(^a)",wait ,続く, SendKeysで検索すると、Send○○とかCall Send○○とか書かれているのですが動きません。2003とwin7との組み合わせがよくないようなことも書かれているようですが、書いてあることが難しくてよくわかりません。, VBAは、インターネットからコピペして使用する程度で、くわしいことはわかっていません。質問も初めてです。素人で申し訳ありませんが、ご教授いただければ幸いです。, teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。, 評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。, 上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。, このコード、動きます? ・SendInputを利用する ⇒Windows7で VB6 / VBA の SendKeys の問題について - アプリ仮想化奉行 ⇒SendInputにてキーを送る - Yahoo知恵袋 などが参考になるでしょうか? 追記① SendInputでペイントを操作する . 参考になれば幸いです。, 2019/01/21 12:22 編集, 回答 ・当該セキュリティ設定(UAC)を無効にする(非推奨) Application Wait Now+TimeValue("0:00:01") B, ŒÂl—pƒ}ƒNƒƒuƒbƒN‚ɍì‚Á‚½ƒf[ƒ^‚̓ǂݍž‚Ý•û–@, ƒI[ƒgƒ[ƒVƒ‡ƒ“ƒGƒ‰[‰ñ”ð‚µ‚½‚¢i“Y•t‚o‚c‚eŒÜ–‡ˆÈã‚É‚È‚é‚ƃGƒ‰[j, ƒtƒ@ƒCƒ‹Žg—p’†‚̃tƒHƒ‹ƒ_–¼•ÒW•s‰Â–hŽ~•û–@, uƒŒƒ|[ƒgã‚ōs‚Æ—ñ‚ð‹t‚É‚µ‚½‚¢v‚Ì‘ê‘ò‚³‚ñ‚ցA•ÊˆÄ. 大学、大学院(修士)で物理を専攻。 SendKeys"(^v)",wait そうであれば普通に貼り付ければいいのになぜ一旦ペイントに貼り付けるのでしょう? , これができると、手間も少なく良かったのですが無理なようです。 『実行エラー 70 書き込みできません』で止まります。, Dim rc As long 2 / クリップ どのようなコピーをしたいのか?CopyPicture? Dim v,a,c,F4 今回は、貼り付け先を工夫して、セルでコピーできるようにしていきます。, ペイントを起動し、セル範囲を貼り付けするまでを記載してみました。 ⇒SendInputにてキーを送る - Yahoo知恵袋 SendKeys"(^c)",wait