
excelマクロでサーバから画像を取得して貼り付ける処理です。
繰り返しの処理で、100回くらいは正常に動作しますが、途中でオートメーションエラーとなり、処理が止まります。(ソースはその一部)
この処理は任意の抽出条件でデータ処理をしますが、抽出件数が多いときに正常終了することもあります。
これは特定のPCでエラーが発生しますが、別のPCで処理をすると正常終了します。
メモリの状況も確認しながら実行しましたが、正常値の範囲でした。メモリ2Gのうち1G程度使用です。
原因がさっぱりわからず困っております。どなたかお知恵を…お助けください。
For cntH = 1 To 9 Step 1
If Right(pathD(cntH), 3) = "jpg" Then
Set pic = LoadPicture(pathD(cntH)) ← ここでエラーになります。
If pic.Width > pic.Height Then
With ActiveSheet.Pictures.Insert(pathD(cntH))
.Width = 100
End With
Else
With ActiveSheet.Pictures.Insert(pathD(cntH))
.Height = 100
End With
End If
End If
Next

No.1ベストアンサー
- 回答日時:
オートメーションエラーは原因の特定が困難で厄介ですね。
VBAでは、画像系の処理が上手くいかないことはよくありますが、内容からサーバーからのデータ取得と処理にタイムラグが起こっている可能性もありそうです。
エラー発生行の直前にDo Eventsや、時間稼ぎのループなどを入れて試してみては如何でしょうか?
実行時間は延びますが、エラーになるよりはマシなのではないかと。
説明が不十分でしたが、任意の抽出条件を設定し、エラーが出る場合は、毎回同じ場所でエラーとなります。
PC再起動後などでも同じ場所でエラーになります。
Doeventsの処理を直前に入れましたが、やはり同じ場所でエラーになりました。
No.3
- 回答日時:
EXCELのバージョンは、2013以上でしょうか。
この所、私のほうはファイル読み込みで2013/2016で、軒並み失敗していますから、珍しい話ではなくなってきてしまっています。2010では通っていたものが、上位バージョンでは通りません。
>メモリの状況も確認しながら実行しましたが、正常値の範囲でした。メモリ2Gのうち1G程度使用です
メモリの使う場所が違うでしょう。タスクマネージャーの詳細の部分で、どんどん肥大化してきているのだろうと思います。Excelは仮想メモリを使っていますが、Excelのメモリの限界の出し方とか、Microsoft のサポートにありました。試してみると、限界が定量だとかではなくて、限界が来たら、休んでもう一度、それを行うと、今までの3倍とかのサイズまでインポートが可能になります。しかし、そのためのマクロも考えましたが、どれも期待薄なのです。
そこで、今回でも同じですが、途中で休みを入れればよいのだと思います。
>繰り返しの処理で、100回くらいは正常に動作しますが
だから、一回の枠を100回にして、インポートの分散型のマクロを作ればよいのではないでしょうか。自動で行うなら、OnTime を使って、事実上、マクロ自体を休ませるわけです。Sleep や Wait は、メモリを開放しませんが、OnTime は、一旦、それを開放します。
それと、もうひとつは、
Activesheet.AddPicture(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
を試してみる方法がありますね。これは、実際には、ActiveSheet というよりも、ActiveCell に対してインポートします。
ご返答ありがとうございました。
その後、調査の結果、そもそもjpgファイルが崩れているのが判明しました。PCによって処理ができる場合とエラーになる場合があり、画像ファイルに問題があると疑うことをしていませんでした。
処理が成功したPCとエラーになるPCのエクセルのバージョンは同じでしたが、windows10とwindows7の違いがありました。jpgの崩れた画像でもwindows10ではエラーにならなかったのかもしれません。
No.2
- 回答日時:
こんにちは
LoadPictureって使ったことがないので、ほとんど知らないのですが・・・
ご提示のコードを見ると、jpgファイルだけ特別扱いをしているようですが、内容を見ると事前にサイズをチェックしているだけのように見えます。
結局は、いずれの場合も、Pictures.Insertで改めて読み込んでいるので、サイズのチェックを読み込み後に行えば済むことのように思えます。
そうすることで、LoadPictureの文そのものが不要になると推測しますし、全体の流れも一つにできて、サイズ指定の部分だけを場合分けするような感じにできるのではないでしょうか。
※ MSDNでLoadPictureを探してみましたが、ACCESSでのメソッドとしての解説しか見つかりませんでした。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
Excelとまったく同じとは限りませんが、説明には「.bmp、.ico、.rle、.wmf のいずれか」と記されていて、.jpgは記載は明記されてはいないようですね。
ご返答ありがとうございました。
他のPCでは問題なく処理がされ、特定のPCでのみエラーとなったので、ソース上の問題とも思えず…です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
途中で処理を中断させたい (ア...
-
“try/catch”と“if/else”
-
vbaのエラー対応(実行時エラー...
-
Excel VBA セルの名前があるか...
-
【bat&vbs】batからvbsに処理...
-
シグナル 6(SIGABRT)とは?
-
RaiseEventのメリット
-
特定のファイルを他のプロセス...
-
順番に処理させたい
-
フォルダのアクセス権確認について
-
IF文に時間(何時から何時ま...
-
UWSファイルを VBで実行させたい
-
For ~ Next文
-
private subモジュールを他のモ...
-
C言語のselect
-
Visual C++でのif文
-
【C#】Page_Loadさせない方法に...
-
VBAで実行アカウントをログイン...
-
ListViewから選択中の文字列を取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
vbaのエラー対応(実行時エラー...
-
private subモジュールを他のモ...
-
マクロで、次のコードへ行く前...
-
シグナル 6(SIGABRT)とは?
-
特定の名前のオートシェイプの...
-
IF文に時間(何時から何時ま...
-
どう増強すべきか
-
特定のファイルを他のプロセス...
-
Word VBA。各マクロの間に待ち...
-
どうやってもFor文を抜けてしま...
-
Excel VBA セルの名前があるか...
-
ExcelのVBAで、選択したファイ...
-
【C#】Page_Loadさせない方法に...
-
StatusStripの表示が更新されな...
-
途中で処理を中断させたい (ア...
-
エクセル VBAで複数セル選択時...
-
Functionで戻り値を複数返す方法
-
VBAでBook読み込み時の非表示方...
-
VBA 複数の行を高速で削除する...
おすすめ情報