前回の質問の続きです。
(前回 https://oshiete.goo.ne.jp/qa/9376599.html)
クリップボードがダメなら、UserPictureメソッドしかないということで、クッリプボードの図をemf形式でファイル化するプロシージャーを入手しました。(http://www.oaltd.co.uk/Excel/Default.htmのPastePicture.zip)
そして、下記のプロシージャーを作成しました。
そして、aa()の1回目は問題なく実行できます。
しかし、選択するShapeを変更して2回目を実行すると、”SavePicture oPic, FN”の行でエラー。「書き込みできません。(Error 70)」で実行できません。Helpを見ると「・別のプロセスでロックされているファイルに書き込もうとしています。 別のプロセスが解放してから、ファイルを開きます。 」とあります。
(エラーの出方が不安定です。コードを修正するとできるときもありますが、保存後再起動すると同様にエラーが出ます。)
その他の状況は、
(1) ”cc FN”をコメントアウトすると何回でも問題なく実行できます。
(2) また、エラーの発生時に、エクスプローラからzzz.emfを削除しようとすると、エクセルが使用していて削除不可とのこと。
(3) 手動でファイルから塗りつぶし設定を行うと、そのファイルはすぐに削除可能なこと。
これらから、cc()のコードに問題があり、ファイルを解放しないようなのですが、何が悪いのかさっぱり判りません。
よろしくアドバイスをお願いします。
Private Sub aa()
Dim FN As String
FN = "zzz.emf"
Selection.Copy ’事前にShapeを選択してます
Set oPic = PastePicture(14) '入手プロシージャーの呼び出し
SavePicture oPic, FN '同 ファイル保存ステップのプロシージャーの呼び出し
cc FN
End Sub
Sub cc(FN As String) '塗りつぶし処理
Dim Oj As Object
ActiveSheet.Shapes("Rectangle 14").Select
Set Oj = Selection
Oj.ShapeRange.Fill.UserPicture FN
Set Oj = Nothing
End Sub
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
すみません。
質問の細かい所無視ですが、埋込み型グラフ(シート上)に、ひとつ置いて、実行すれば、図の中にチャートが入ります。この操作というのは、簡単だけれども、古い技術なのです。
ただ、私のほうでは、絵がボケていますね。やはり専用ツールのほうがよいかもしれません。
Sub Test1()
Const TEMP As String = "$Temp.gif"
Dim Shp As Shape
With ActiveSheet
.ChartObjects(1).Chart.Export Filename:=TEMP, FilterName:="GIF"
Set Shp = .Shapes.AddShape(msoShapeRectangle, 250, 250, 360, 200)
Shp.Fill.UserPicture PictureFile:=ThisWorkbook.Path & TEMP
Shp.Visible = msoTrue
Kill ThisWorkbook.Path & TEMP 'TEMPファイルの削除
Set Shp = Nothing
End With
End Sub
>ActiveSheet.Shapes("Rectangle 14")
既存のオートシェイプに貼り付けるのは、面倒ですね。
いっそ、Selection にしてしまったほうが速いと思います。
なお、クリップボードから取り出す話は、一応なしにしてください。かなり面倒だからです。クリップボードの中身を1つずつ調べて、必要なものを取り出さないといけないのです。
そういうメソッドが、Excel側にVBAには用意されていないので、一から、取り出すプログラムを作らなくてはなりません。クリップボードの蓋を開けて取り出して蓋を閉めるという作業なのです。(^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する 4 2022/08/28 08:48
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FTPの送信結果を検知したい
-
VB6 Dir関数で52エラー発生
-
Returnに対するGoSubがありません
-
ACCESS VBAでのインポート
-
batファイルでレジストリキーの...
-
アクセスのクエリでコンパイル...
-
freadでデータがない場合の読込...
-
【VB6.0】ファイルからサイズの...
-
EXCELでのXMLファイルのインポ...
-
DisplayAlertsブロパティで ”実...
-
DOCUMENT行の書き出しについて-...
-
エクセル Fill.UserPictureで...
-
すでにファイルが開かれている...
-
ファイルの有無を確認した際の...
-
Adobeのプレミアプロの書き出し...
-
Excelファイルのマクロによる排...
-
Access2010 コンパイルエラー...
-
OUTLOOK VBA 指定フォルダ内の...
-
PowerShellを使って関連付けら...
-
Excel 2003 のエラーメッセージ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBでファイルが開かれているか...
-
batファイルでレジストリキーの...
-
Returnに対するGoSubがありません
-
VBから参照できないCのDLLを使...
-
「パス名が無効です」の発生原因
-
access テキストボックスの値取得
-
アクセスのクエリでコンパイル...
-
PowerShellを使って関連付けら...
-
freadでデータがない場合の読込...
-
【COBOL】read文でエラー
-
gccを行ってもexeファイルが生...
-
ファイルクローズ(fclose)でエ...
-
VB6 Dir関数で52エラー発生
-
ACCESS VBAでのインポート
-
NAS上のファイルの使用中が解除...
-
FTPの送信結果を検知したい
-
エクセルマクロでエラーの原因...
-
Access2013にてドラッグ&ドロ...
-
EXCELのVBAでWORDが開いてある...
-
fcloseで発生するエラーについて。
おすすめ情報