Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3865 / 13644 ツリー ←次へ | 前へ→

【59546】図面の挿入および該当なしの対応策 タテヤマ 08/12/18(木) 9:49 質問[未読]
【59547】Re:図面の挿入および該当なしの対応策 kanabun 08/12/18(木) 10:38 発言[未読]
【59559】Re:図面の挿入および該当なしの対応策 タテヤマ 08/12/18(木) 17:39 お礼[未読]
【59560】Re:図面の挿入および該当なしの対応策 kanabun 08/12/18(木) 18:05 発言[未読]
【59791】Re:図面の挿入および該当なしの対応策 タテヤマ 09/1/8(木) 18:12 お礼[未読]

【59546】図面の挿入および該当なしの対応策
質問  タテヤマ  - 08/12/18(木) 9:49 -

引用なし
パスワード
   タテヤマ - 2008/12/11 11:10
皆様はじめまして。質問宜しくお願いします。
エクセル及びエクセルシート名は製作表(Sheet1)。
図面はY:\図面というファイルにJPG形式で保存している。
図面名称はセル"O5"に明記してある型式と同じにしてある。
製作表上にコマンドボタンを配置。
コマンドボタンがクリックされたら図面をAD1:AL47に表示したい。

Private Sub 図面挿入_Click()
Dim iP As String
Dim iSheet As String
Dim iC As String
Dim iK As String
'***変数値の設定***
iSheet = "製作表"
iC = "AD1:AL47"
iK = Range("O5").Value
iP = "Y:\図面\" & iK & ".jpg"
'***画像ファイルの挿入***
Call MovePicture(iP, iSheet, iC)
End Sub

Sub MovePicture(iP As String, iSheet As String, iC As String)
Dim MC As Range
Dim ML As Double
Dim MT As Double
Dim MH As Double
Dim MW As Double
Set MC = Range(iC)
'***目的のシート(セルの範囲)へ画像貼り付け***
With MC
ML = .Left
MT = .Top
MH = .Cells(.Count).Offset(1).Top - .Top
MW = .Cells(.Count).Offset(, 1).Left - .Left
End With
Sheets(iSheet).Pictures.Insert (iP)
With Sheets(iSheet).Pictures(Sheets(iSheet).Pictures.Count).ShapeRange
.LockAspectRatio = msoFalse
.Parent.Visible = msoTrue
.Left = ML
.Top = MT
.Height = MH
.Width = MW
End With
End Sub

現在、実行時エラー'1004'
Picturesクラスのinseretメソットが失敗しました。
と表示されるのですが、MovePictureは正常動作することが確認済みなので、おそらく*変数値の設定*が正しく定義されていないのだと推測しています。
どのような変更を行えばよいのかと、図面の型式が該当する図面データY:\図面にない場合はどのようなError表示書式を追加すればよいのか、教えていただければ幸いです。
尚、VBA質問掲示板様にも、同じ内容を質問依頼しています。
現時点では、回答は頂けておりません。
まだ初心者なもので至らない部分が多々ありますが、御教授の程宜しくお願い致します。

【59547】Re:図面の挿入および該当なしの対応策
発言  kanabun  - 08/12/18(木) 10:38 -

引用なし
パスワード
   ▼タテヤマ さん:
こんにちは。

>現在、実行時エラー'1004'
>Picturesクラスのinseretメソットが失敗しました。
>と表示されるのですが、

よく分かりませんが、画像を挿入するアドレスを文字列で渡してるけど
そこには、どのシートのセル範囲か、シートの情報がないですよね?
シート情報付きで、セル範囲そのものを渡したら どうでしょうか?


>  '***画像ファイルの挿入***
>  Call MovePicture(iP, iSheet, iC)

   ↓ に変更し、

  '***画像ファイルの挿入***
  InsertPicture iP, ActiveWorkbook.Worksheets(iSheet).Range(iC)


'***目的のシート(セルの範囲)へ画像貼り付け***
Sub InsertPicture(picPath As String, ByVal Location As Range)
 With Location.Worksheet.Pictures.Insert(picPath).ShapeRange
  .LockAspectRatio = msoFalse
  '.Parent.Visible = msoTrue
  .Left = Location.Left
  .Top = Location.Top
  .Height = Location.Height
  .Width = Location.Width
 End With
End Sub


>どのような変更を行えばよいのかと、図面の型式が該当する図面データY:\図面にない場合はどのようなError表示書式を追加すればよいのか、

呼び出し先 InsertPicture プロシージャ内で、
最初に 指定の画像があるか Dir関数を使ってチェックして、
無ければ、Exitするとか?

  If Len(Dir(picPath)) = 0 Then Exit Sub


【59559】Re:図面の挿入および該当なしの対応策
お礼  タテヤマ  - 08/12/18(木) 17:39 -

引用なし
パスワード
   ▼kanabun さん:
こんにちは。はじめまして。
回答ありがとうございます。
本日は確認がとれないため、お礼の挨拶のみさせて頂きます。
ありがとうございました。
内容確認取れ次第、改めて再度投稿させて頂きます。

ところで、
これ→'.Parent.Visible = msoTrueの(')は、不要でしょうか。
それとも、一時的な確認の為に外しているのでしょうか。
回答宜しくお願いします。

【59560】Re:図面の挿入および該当なしの対応策
発言  kanabun  - 08/12/18(木) 18:05 -

引用なし
パスワード
   ▼タテヤマ さん:

>ところで、
>これ→'.Parent.Visible = msoTrueの(')は、不要でしょうか。
>それとも、一時的な確認の為に外しているのでしょうか。
>回答宜しくお願いします。

不要なのではないかと、コメント化して(') 実行してみたら、
  .Parent.Visible = msoTrue
の行がなくても、挿入した図が表示されましたので、
その行は
コメントアウトのままにしておきました。

【59791】Re:図面の挿入および該当なしの対応策
お礼  タテヤマ  - 09/1/8(木) 18:12 -

引用なし
パスワード
   kanabun さん
 明けましておめでとうございます。

 前年度に回答頂きました内容で、修正をかけましたところ、
正常な動作を確認する事が出来ました。
 非常に感銘を受けてます。書式の中身はまだまだわからない事が、
多々ありますので、内容を把握できる様に勉強しようと思います。
 時間があいてしまいましたが、改めまして御礼させて頂きます。
 ありがとうございました。

3865 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free