• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文: エクセルの写真表示Sheetに写真のサムネイル表示をさせています。)

エクセル2007で写真のサムネイル表示ができない問題の対処法を教えてください

このQ&Aのポイント
  • エクセル2003までは写真のサムネイル表示ができていたが、エクセル2007ではうまく行かない問題が発生している。
  • セルに貼り付けた写真が動かないようにSheetの保護をかけたり、コピーしたりの小細工をしているが、エラーが発生している。
  • エクセル VBAのコード内で、写真の表示とコピーを行っているが、エクセル2007ではコピーの部分でエラーが発生している。

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

確認です。 1)OSのバージョン ex)XPproSP3 2)Excelのバージョン ex)2007sp2(12.0.6535.5002) ※前スレッドで最新パッチがあたってるとは思いますが念のため。 以下はお願い事項。 3)セーフティな環境で試してみる。 ・端末に別ユーザーでログイン。(もしくは新規ユーザー) ・写真をローカルハードディスクに保存。 ・2007セーフモードで起動。([Ctrl]キー押しながら起動) ・新規Book作成し、標準モジュールにコードのみコピーして一旦名前をつけて保存。 ・再度Bookを開き試してみる。 ※試してほしいのは下記test1-test3の3コード。 Sub test1()  Dim x As Variant  x = Application.GetOpenFilename("jpgFiles,*.jpg")  If VarType(x) = vbBoolean Then Exit Sub  ActiveSheet.Pictures.Insert(CStr(x)).Select  DoEvents: DoEvents  Selection.Width = 162  Selection.Height = 100  Selection.Copy  'Selection.CopyPicture xlScreen, xlPicture '.Copy  ActiveSheet.Paste End Sub '----------------------------------------------------------------- Sub test2()  Dim x As Variant  Dim s As Shape  x = Application.GetOpenFilename("jpgFiles,*.jpg")  If VarType(x) = vbBoolean Then Exit Sub  Set s = ActiveSheet.Shapes.AddPicture(Filename:=CStr(x), _                     LinkToFile:=msoFalse, _                     SaveWithDocument:=msoTrue, _                     Left:=0, _                     Top:=0, _                     Width:=162, _                     Height:=100)  DoEvents: DoEvents  s.CopyPicture xlScreen, xlPicture  ActiveSheet.Paste  Set s = Nothing End Sub '----------------------------------------------------------------- Sub test3()  Dim x As Variant  x = Application.GetOpenFilename("jpgFiles,*.jpg")  If VarType(x) = vbBoolean Then Exit Sub  ActiveSheet.Pictures.Insert CStr(x)  Application.OnTime Now, "test3sub" End Sub Sub test3sub(Optional n As Long)  With ActiveSheet   .Pictures(.Pictures.Count).Copy   '.Pictures(.Pictures.Count).CopyPicture xlScreen, xlPicture   .Paste  End With End Sub また、.Copyメソッドがダメだったら、下にコメントアウトしている CopyPictureメソッドも試してみてください。

sintaro-hosome
質問者

補足

 end-u さん、度々ありがとうございます。 早速ですが 1)OSのバージョン XP SP3 (proはついていません) 2)Excelのバージョン 2007sp2 ですが     (12.0.6535.5002)ではなく(12.0.6425.1000)です。 それで 3)セーフティな環境で試してみる。 ・端末に別ユーザーでログイン。(もしくは新規ユーザー) ・写真をローカルハードディスクに保存。 ・2007セーフモードで起動。([Ctrl]キー押しながら起動) ・新規Book作成し、標準モジュールにコードのみコピーして一旦名前をつけて保存。 ・再度Bookを開き試してみる とのことですが、 設定の関係もありとりあえず、いつも通りパソコン、エクセルを起ち上げて ・新規Book作成し、標準モジュールにコードのみコピーして一旦名前をつけて保存。  (2003モード.xlsで保存) ・再度Bookを開き試してみる でSub test1()を試してみました。  結果、見事ペーストまで上手く行きました! test1()で行けましたので、test2()、test3()は試していません。 取り急ぎ、報告させていただきます。  test2()、test3()でも試す必要がありましたら、 また試してみます。  それと Selection.CopyPicture xlScreen, xlPicture でも試しましたが、こちらも上手く行きました。  また、推察できることがありましたら、よろしくお願いします。

その他の回答 (4)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

失敗。 いくつかの対策をまとめて入れたため、どれが原因か特定できず...orz まあ、動く事はわかったので、後はコードを変更しつつ確かめてください。 エラーが出た直前の変更が肝かと思います。 1)ローカルな写真ではなく、元のmドライブの写真をやってみる。  (ところでmドライブは何者でしょう?ネットワークドライブ?) 2)DoEvents: DoEventsを消す。 3)Selection.Width = 162 Selection.Height = 100 の2行を消す。 4)Selectしないコードに変更してみる。 ...くらいですね。 あと気になるのは >(12.0.6535.5002)ではなく(12.0.6425.1000)です。 これ。 エラー対策が特定できた後に Microsoft Updateをやって、最新パッチをあててください。 その後エラーが出るコードを実行してみてどうなるか、ちょっと興味あります。

sintaro-hosome
質問者

お礼

 end-u さん、ここまでお付き合いいただきまして 本当にありがとうございました。 1)ローカルな写真ではなく、元のmドライブの写真をやってみる。  (ところでmドライブは何者でしょう?ネットワークドライブ?)  元のMドライブでOKでした。 (Mドライブは外付けポータブルHDDです。) 2)DoEvents: DoEventsを消す。  消してもOKでした。 3)Selection.Width = 162 Selection.Height = 100 の2行を消す。  消してもOKでした。 4)Selectしないコードに変更してみる。  test1()ではこの部分は試すことができません。   ◎以下は最初の質問時のマクロでの結果 With myPic '貼り付けた写真をコピー .Copy 'コピーを貼り付け、それをmyPicbとする Set myPicb = ActiveSheet.Pictures.Paste '元の写真を削除 .Delete End With のままではやはり駄目で .Copy を .CopyPicture に書き換えるとエラーは出ず、行けました。 因みに、今回新たにUPdateしましたが (12.0.6535.5002)ではなく(12.0.6425.1000)のままです。 何故かはよくわかりません。(XPのeditionが異なるからかも?) いまだ、 .Copy が駄目で .CopyPicture なら行ける のが何故なのか不明です。 (test1()では、どちらも行けるのですが。)  とりあえず、今回は .CopyPicture で行けてますので この質問スレは閉じたいと思います。  end-u さん、最後までお付き合いいただきまして 感謝しております。 本当どうもありがとうございました。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

ダメ元で、あえてSelectしてみるとか。 myPic.Select Selection.Copy : 手作業でやってもエラーが出るのでしょうか? jpgファイルのサイズはどれくらいなんでしょう? jpgファイルやBookの破損を疑ってもいいかもしれませんね。 ・別のjpgファイルで試す。 ・新規Bookで試す。 あとアドバイスできるのはこれくらいです。 または環境を疑って、別の端末もしくは別ユーザーでログインして試してみるとか。 新規Bookで問題ないようなら、作成し直したほうが近道かもしれません。

sintaro-hosome
質問者

補足

 end-u さん、度々ありがとうございます。 >手作業でやってもエラーが出るのでしょうか?  このマクロは新たにこれだけのために 新規Bookで作成したのもです。  それで、手作業でマクロの記録を取りながら 試してみましたところ、 手作業ではコピー、ペースト出来ました。 が、記録を取ったマクロで実行させると 『Pictureクラスのcopyメソッドが失敗しました』 といつもと同じエラーが出ます。  ちなみにエラーはいつも 実行時エラー'1004' です。  また、今日勤務先で2台のPCのエクセル2007で、 最初に質問したややこしいマクロ入りファイルを 試したところ(VistaとXP)、 どちらも同じ 実行時エラー'1004' で 『Pictureクラスのcopyメソッドが失敗しました』 となりました。  これから何か推察できることがありますでしょうか?

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

コードは標準モジュールに書いてあるのですよね? イベント実行ではないパターンを試してみてはどうですか。 また、写真を変えて試してみるとか、 シート保護せずに試してみるとか。 >(今回はエラーがどこで起こっているのかが不明なので、 >明らかに不要と思われるコード以外は、念のために載せておきました。) エラーが再現できる最低限のコードに絞り込んでいく事で、 原因も特定できるのではないかと思います。 相変わらず再現しないので、整理だけしてみただけのコードです。 Sub 写真の表示2(sheetmei As String, sei_c As Long)   Dim i    As Long   Dim ii   As Long   Dim j    As Long   Dim k    As Long   Dim counter As Long   Dim maisu  As Long   Dim myPicb As Picture   Dim sFile  As String   Dim koumoku As String   Dim ws1   As Worksheet   Dim ws2   As Worksheet   On Error GoTo ErrorHandler   Set ws1 = Worksheets(sheetmei)   Set ws2 = Worksheets("写真表示")   'ws2.Unprotect Password:="123"   i = 0   counter = 10   For ii = 4 To counter     If ws1.Cells(ii, sei_c).Value <> "" Then       sFile = motopath & "写真\" & sheetmei _           & "\" & ws1.Cells(ii, 1).Text & ".jpg"       j = ((2 * i) \ 10) * 2 + 2       k = (2 * i) Mod 10 + 2       ws2.Cells(j + 1, k).Value = ws1.Cells(ii, 1).Text       With ws1.Pictures.Insert(sFile)         With .ShapeRange           .LockAspectRatio = msoFalse           .Height = ws2.Cells(j, k).Height           .Width = ws2.Cells(j, k).Width         End With         .Copy         Set myPicb = ws2.Pictures.Paste         .Delete       End With       With myPicb         .Left = ws2.Cells(j, k).Left         .Top = ws2.Cells(j, k).Top         .Locked = True       End With       'Cancel = True '?       i = i + 1       maisu = i       Set myPicb = Nothing     End If   Next ii   'ws2.Protect Password:="123", _         DrawingObjects:=True, _         contents:=True, _         UserInterfaceOnly:=True ErrorHandler:   If Err().Number <> 0 Then     MsgBox Err().Number, Err().Description   End If   Set ws1 = Nothing   Set ws2 = Nothing End Sub それと Debug.Print ...はVBEで[ctrl]+[g]、[イミディエイトウィンドウ]に書き出すものです。

sintaro-hosome
質問者

補足

 end-u さん、丁寧なご回答本当にありがとうございます。  どうしても上記の .copy のところでエラーがでます。  そこで >エラーが再現できる最低限のコードに絞り込んでいく事で、 >原因も特定できるのではないかと思います。 に従って新たに、極端なマクロを作成しました。    今回は単純に.copy が出来るかどうかに絞りました。 ●マクロの内容 写真表示のSheetに写真を表示させ(pictures.insert) それをコピー出来るかどうかだけ試しました。 結果はやはりここで 『PictureクラスのCopyメソッドが失敗しました。』 とのエラーメッセージが出ます。 これはどこに問題有りなんでしょうか??? Private Sub CommandButton1_Click() Dim myPic As Picture Dim sFile As String Dim myPicb As Picture sFile = "M:\データ\コンサート\DSCF0329.jpg" Set myPic = Worksheets("写真表示").Pictures.Insert(sFile) With myPic '貼り付けた写真をコピー .Copy '''''''←ここでエラーが起こります 'コピーを貼り付け、それをmyPicbとする Set myPicb = Worksheets("写真表示").Pictures.Paste End With End Sub

  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

再現しません。 効率の問題はおいといて、とりあえずコードの中には 2003で動いていて、2007ではエラーが出るような箇所は 無いように思います。 ●エラー箇所に間違いないか >.Copy '←ここでエラー?が起こりエラーハンドラに飛んでしまう エラー発生箇所は確実なのですか? [F8]ステップ実行で確認しましたか? また、 : ErrorHandler:   Debug.Print Err().Number, Err().Description : こんな感じでエラーNumberとDescriptionを確認してください。 ●処理内容の問題はないか 最大何枚くらいの写真を処理しようとしていますか? エラーは必ず1枚目で発生するのですか? それとも何枚目かで発生するのでしょうか。 コード内容ではなくPicturesの内容や量によるものだとすると 情報が不足していますし、Pictureの内容はそちらでないと確認できないです。 少なくともエラー発生時のシート状態とPictureの内容は確認してください。 また、エラー箇所まわりのコードを抜き出し、 余計な事をせずにできるだけシンプルな形でコード化してみてください。 誰でも検証できるようなコードにしてアップすれば 他の方からもレスがあると思いますよ。

sintaro-hosome
質問者

補足

 end-uさん、今回もお付き合いいただき どうもありがとうございます。  早速ですが、 >●エラー箇所に間違いないか >.Copy '←ここでエラー?が起こりエラーハンドラに飛んでしまう >エラー発生箇所は確実なのですか?  はい、必ずここで起こります。  (F8で確かめています) >●処理内容の問題はないか >最大何枚くらいの写真を処理しようとしていますか?  表示させたい項目により処理枚数は違いますが、 ここでは3枚と、少ないのを選んで試しています。 (2003では、100枚ぐらい表示させる項目もありますが、 不具合は出ていません。) >エラーは必ず1枚目で発生するのですか? >それとも何枚目かで発生するのでしょうか。  エラーは必ず1枚目から、同じところで起こります。 ステップ実行中、コピー前の段階の1枚目の写真は コード通りセル(2,2)に表示されています。 >ErrorHandler: >  Debug.Print Err().Number, Err().Description >: >こんな感じでエラーNumberとDescriptionを確認してください。  こういう方法で、エラーを特定していくというのは全く知りませんでした。 (いい勉強になりました。) ただ今回、上のようにしてみたところ 何も表示されませんでした。 ・・・う~ん、よく分かりません。コピぺしましたので 入力ミスはないと思うのですが・・・。 >また、エラー箇所まわりのコードを抜き出し、 >余計な事をせずにできるだけシンプルな形でコード化してみてください。 >誰でも検証できるようなコードにしてアップすれば・・・  確かにそうですね、読みづらくて回答しようとしてくれている人には 申し訳なく思っています。 (今回はエラーがどこで起こっているのかが不明なので、 明らかに不要と思われるコード以外は、念のために載せておきました。)  また上記エラーの補足ですが、 上記エラーの出るSubルーチンは、表示させたい項目Sheet(別Sheet)から Private Sub Worksheet_BeforeRightClick(ByVal T・・・ の中の処理から飛んできています。  関係ないと思って書きませんでしたが、 ひょっとして、こういうイベント処理は不具合が 起こりやすい可能性はあるかもしれません。(汗、汗…)

関連するQ&A