Excel VBA質問箱 IV

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

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


3832 / 13646 ツリー ←次へ | 前へ→

【59948】再現不能のエラーで困っています 初心者 09/1/20(火) 18:28 質問[未読]
【59951】Re:再現不能のエラーで困っています neptune 09/1/20(火) 20:28 発言[未読]
【59952】Re:再現不能のエラーで困っています kanabun 09/1/20(火) 21:24 発言[未読]
【59953】Re:再現不能のエラーで困っています neptune 09/1/20(火) 21:32 発言[未読]
【59973】Re:再現不能のエラーで困っています bykin 09/1/22(木) 0:33 発言[未読]

【59948】再現不能のエラーで困っています
質問  初心者  - 09/1/20(火) 18:28 -

引用なし
パスワード
   Excelのアドインを製作し、使ってもらっていたのですが、
その中の1人に急にエラーが発生するようになってしまいました
直そうにもこちらでは発生せず、相手は遠隔地にいるため、原因が特定できません・・・
構文的におかしい部分がありましたらご指導お願いします

機能
Excelのセルを選んだ状態でCTRL+Qを押すと画像選択画面が開き、
セルの大きさに合わせて画像を張り付けする
コードは標準モジュールに記入しています

エラー箇所と思われる場所
画像ファイルを選択した後にエラーが出て、デバッグを押すと
For Each mySP In ActiveSheet.Shapes
の部分がエラーを出している
For〜Nextをコメントアウトしたものを使用すると
Set mySP = ActiveSheet.Pictures.Insert(myF)
の部分でエラーが発生するらしい
ActiveSheetが取得できていない?

---以下内容----

Sub 画像貼付()
' Keyboard Shortcut: Ctrl+q

  Application.ScreenUpdating = False
  Cancel = True
  
  '===============画像選択
  myF = Application.GetOpenFilename _
      ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False)
  If myF = False Then
    Exit Sub
  End If

  '===============画像の掃除
  For Each mySP In ActiveSheet.Shapes
    myAD1 = mySP.TopLeftCell.MergeArea.Address
    myAD2 = Selection.Address
    If myAD1 = myAD2 Then mySP1.Delete
  Next

  '===============画像の貼り付け
  Set mySP = ActiveSheet.Pictures.Insert(myF)
    
  If vbYes = MsgBox("縦横比を維持しますか?", vbYesNo) Then
  
  '===============タテヨコの縮尺を保持
  myHH = Selection.Height / mySP.Height
  myWW = Selection.Width / mySP.Width
  
  If myHH > myWW Then
    mySP.Height = mySP.Height * myWW
    mySP.Width = Selection.Width
  Else
    mySP.Height = Selection.Height
    mySP.Width = mySP.Width * myHH
  End If
  
  '===============中央へ調整
  myHH2 = (Selection.Height / 2) - (mySP.Height / 2)
  myWW2 = (Selection.Width / 2) - (mySP.Width / 2)
  mySP.Top = Selection.Top + myHH2
  mySP.Left = Selection.Left + myWW2
 
   Else
   
   mySP.Height = Selection.Height
   mySP.Width = Selection.Width
  
  End If

  
  Set mySP = Nothing
  Application.ScreenUpdating = True
End Sub

【59951】Re:再現不能のエラーで困っています
発言  neptune  - 09/1/20(火) 20:28 -

引用なし
パスワード
   ▼初心者 さん:
こんにちは

勘で書くので間違ってるかも知れませんが、
>For Each mySP In ActiveSheet.Shapes
ですが、ActiveSheetにShapesが存在する事が保証されていない
コードになってますが。その辺りは大丈夫ですか?

普通コード上で保障する処理を書くと思いますが。。。

【59952】Re:再現不能のエラーで困っています
発言  kanabun  - 09/1/20(火) 21:24 -

引用なし
パスワード
   ▼初心者 さん、neptune さん:
ちょっとお邪魔します。

neptune さんのコメントですが、
>>For Each mySP In ActiveSheet.Shapes
>ですが、ActiveSheetにShapesが存在する事が保証されていない
>コードになってますが。その辺りは大丈夫ですか?

これは、
 For i = 2 To 0
と書いても、1回もLoopしないだけ、
 For Each mySP In ActiveSheet.Shapes
も、同じくShapeがなければ、Loopしないだけのことかと思います。

それよりも、モジュールの先頭に
Option Explicit
を宣言して、変数を宣言してから使う習慣をつけたほうがいいですよ。
Dim myF
Dim mySP as Picture
Dim myAD1 as string
Dim myAD2 as string
dim myHH as single
dim myHH as single
  :
そうすれば、
>  Cancel = True
のところと、
>   If myAD1 = myAD2 Then mySP1.Delete
               ~~~~~ 宣言されていない
のところで、変数が宣言されていないと、叱られるでしょう。

> Set mySP = ActiveSheet.Pictures.Insert(myF)
> の部分でエラーが発生するらしい
エラーメッセージの内容くらい、確かめて欲しいものです。

なので、まるで原因は分かりませんが、
変数 mySP のデータ型が Shapeですと、構文エラーですね
As Picture なら、通ります。

【59953】Re:再現不能のエラーで困っています
発言  neptune  - 09/1/20(火) 21:32 -

引用なし
パスワード
   ▼kanabun さん:

>neptune さんのコメントですが、
>>>For Each mySP In ActiveSheet.Shapes
>>ですが、ActiveSheetにShapesが存在する事が保証されていない
>>コードになってますが。その辺りは大丈夫ですか?
>
>これは、
> For i = 2 To 0
>と書いても、1回もLoopしないだけ、
> For Each mySP In ActiveSheet.Shapes
>も、同じくShapeがなければ、Loopしないだけのことかと思います。
そういえばその通りです。恥ずかし^ ^;;;;
ご指摘ありがとうございます。

初心者 さん>
見んかった事にして下さい。

【59973】Re:再現不能のエラーで困っています
発言  bykin  - 09/1/22(木) 0:33 -

引用なし
パスワード
   おばんです。

>変数 mySP のデータ型が Shapeですと、構文エラーですね
>As Picture なら、通ります。

・・・ん?
As Picture にしたら、今度は
>For Each mySP In ActiveSheet.Shapes
でエラーが出ると思うねんけどな?

ま、同じ変数を使いまわしてるのがよくないんやけど・・・
わても変数をきっちり宣言する習慣はつけたほうがええと思うよ。

で、同じコードで特定のPCでのみ動かんってことやねんから
動かんPCで参照設定をチェックしてみたらどうでっか?
参照不可になってるやつがあったりせんのかな?
あったらそれのチェックをはずすとか・・・

確認してみてな。
ほな。

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