プロが教える店舗&オフィスのセキュリティ対策術

マクロのことはほとんど全くわからない者です。
どなたか、お力をお貸しください。

先日、画像貼り付けのコードについて質問させて頂き

Sub 画像()
Dim fName, pict As Shape
Dim i As Integer
fName = Application.GetOpenFilename("JPG,*jpg", MultiSelect:=True)
If IsArray(fName) Then
For i = 1 To UBound(fName)
Set pict = ActiveSheet.Shapes.AddPicture( _
fName(i), _
msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1) '- 1 = size維持
pict.Height = 180 'resize
ActiveCell.Offset(1, 1).Activate
Next i
End If
End Sub

との回答を頂きました。
このコードをコピーして貼り付けたところ、当然ですが何ら問題なく、マクロが実行できました。

ところが一から自分でコードを入力したところ、
  Set pict = ActiveSheet.Shapes.AddPicture( _
fName(i), _
msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1) '- 1 = size維持
の部分でエラーがでます。
 自分なりに検証したところ
   Set pict = ActiveSheet.Shapes.AddPicture( _
fName(i), _
をコピー貼り付けすれば、当初はエラー(文字が赤くなり、修正候補 式 と表示)がでますが
   msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1) '- 1 = size維持
を自分で入力すれば、エラーが解消しました。
(msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1) '- 1 = size維持 もエラーになりません)

 ところが、
   Set pict = ActiveSheet.Shapes.AddPicture( _
fName(i), _
を自分で入力し、続けて
   msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1) '- 1 = size維持
を入力すれば、
   -1) '- 1 = sizeの )(括弧)が青で色塗りされた白文字
となって
   コンパイルエラー 修正候補 ステートメントの最後
と表示されます。

 何度も確かめ、見本とおりに入力していることは間違いないのですが、なぜコピー貼り付けしたものはエラーがでないのに、同じように入力したものはエラーになってしまうのでしょうか?

 ややこしい説明で申し訳ありませんが、ご教示ください。
 よろしくお願いします。

A 回答 (4件)

こんばんは、



横から失礼させていただいたのは、問題の部分のソース内改行がないものを提示する為です。
For i = 1 To UBound(fName)
Set pict = ActiveSheet.Shapes.AddPicture(fName(i), msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1)
pict.Height = 180
ActiveCell.Offset(1, 1).Activate
Next i

また、改行を入れたのは、通常わかり易くする為ですが、この場合は、本来パラメータを示す部分を省略したので、配列に入っているファイル情報と
画像を操作する部分をあまり考えず分けて示しました。
わかり易いコードでは無かったと思っています。

示すためのコードの場合、改行を入れるのであれば、Shapes.AddPictureメソッドのパラメータを明示して下記の様にするべきと思います。

同じコード(該当部分)は
Set pict = ActiveSheet.Shapes.AddPicture( _
     fileName:=fName(i), _
     LinkToFile:=False, _
     SaveWithDocument:=True, _
     Left:=Selection.Left, _
     Top:=Selection.Top, _
     Width:=-1, _
     Height:=-1)

となります。本来の?コード内で 半角スペース_ を使う意味が伝わりますでしょうか。

あとコメントに残した  '- 1 = size維持 や  'resize は該当部分の説明(目印)みたいなもので実行コードには影響しません。
修正回答の経緯で付けたコメントです。 ' は半角です。通常自動変換されると思いますが、、

ご質問に関係ないコメント、申し訳ありません参考になればと思っています。


ご質問については、
>コンパイルエラー 修正候補 ステートメントの最後
全角を打ち込む場面が無いと思うので、多分なっていると思いますが、コード内はすべて半角になっていますか? スペース () , ' "
あとスペルチェック 、不要箇所への半角スペース混入、などと思います。
'- 1 = size維持は不要なので消してみてください。 ’ が変換されていないかも?

VBEの使用フォントなどで見にくくなっている可能性を考えてコピーした(動く)ものと
書き直したものを交互にメモ帳などにコピペして比較して見るとかどうでしょう。

また、検証の為、一行で書いてみてはいかがでしょう。
    • good
    • 0
この回答へのお礼

Qchan1962様

連日に渡り、また深夜にもかかわらずご回答ありがとうございました。
ご回答頂いたソース内改行がないコードを入力したところ、うまくいきました!
これで作業効率がグッとアップできます。
感謝致します。

お礼日時:2020/06/03 19:17

う~ん、良くわかりませんね。


コンパイルエラーが出ている状態で、手動でコンパイルを実行([デバッグ] > [VBA Projectのコンパイル])することで解決したりしませんか?
    • good
    • 0
この回答へのお礼

nekoronda様
深夜にもかかわらず何度も検討して頂き、感謝致します。
Qchan1962様のご回答にありました、改行しないコードを入力したところ、うまくいきました。
この度は、ありがとうございました。

お礼日時:2020/06/03 19:12

あっ!もしかして


『Set pict = ActiveSheet.Shapes.AddPicture( _
 fName(i), _
 を自分で入力し、続けて
    msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1) '- 1 = size維持
 を入力すれば、
    -1) '- 1 = sizeの )(括弧)が青で色塗りされた白文字
 となって
    コンパイルエラー 修正候補 ステートメントの最後
 と表示されます。』
って言ってますけど、
『Set pict = ActiveSheet.Shapes.AddPicture( _
 fName(i), _ msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1) '- 1 = size維持』
って2行にして書いたということですか?
2行にする場合は、アンダーバーは必要ありません。
『Set pict = ActiveSheet.Shapes.AddPicture( _
 fName(i), msoFalse, msoTrue, Selection.Left, Selection.Top, -1, -1) '- 1 = size維持』
になります。
"_"は1行で書くのには長すぎる場合に、複数行に分けて書くときに使われる文字です。
    • good
    • 0
この回答へのお礼

続けての回答ありがとうございます。
いえ、三行に渡って入力していますので、"_"のあとは改行しています。
あり得ない話だと思うのですが、コピー貼りつけすれば問題ないのに、全く同じように入力するとエラーになるのです。
諸事情により、一から入力する必要があり、入力することにこだわっています。

お礼日時:2020/06/03 00:19

言っていることがちょっと分かりませんが、


行末尾の "( _" ですが、括弧とアンダーバーの間にちゃんと半角スペースを入れましたか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
はい、半角スペースもいれて試していますが、うまくいかないのです。

お礼日時:2020/06/02 23:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています