VBAの内容の修正をお願いしたく質問させて頂きます。
知人にExcel2007でシートのアルバムに写真をクリックで貼り付けられ、また別に張り付けてあるボタンでフォルダーを選択するとフォルダー内の写真を一括貼り付けるVBAを作成してもらいました。
ところがExcel2013で作成したものは他のPCで見られず、『リンク先が分からない・・・』と言った内容のメッセージが表示されます。
張り付けたボタンをクリックすると、フォルダーの選択はできますが、その後
『実行時”1004” PicturesクラスのInsertプロパティを取得できません』と言うメッセージが出ます。
残念ながら知人もよくわかりません。
表示内容がお分かりの方はぜひとも修正のご指導をお願いします。
写真のアルバムはA4サイズに横2×縦4の8枚を並べています。セルの結合が8枚あり、その場所をクリックすることで1枚1枚貼り付けることができます。
また、VBAでフォルダ内で番号順に並んでいる写真がばらばらに貼りついて今します。その部分も分かりましたら、よろしくお願いします。
VBA 左上表示:(General) 右上表示:画像貼り付け
Sub 画像貼り付け()
'===============フォルダ選択
Set myPath = CreateObject("Shell.Application") _
.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, 0)
If myPath Is Nothing Then Exit Sub
If myPath.Items Is Nothing Then Exit Sub
If myPath.Items.Item Is Nothing Then Exit Sub
フォルダ = myPath.Items.Item.Path
Set myPath = Nothing
'===============画像の掃除
' For Each mySP In ActiveSheet.Shapes
' myAD1 = mySP.TopLeftCell.MergeArea.Address
' myAD2 = Target.Address
' If myAD1 = myAD2 Then mySP.Delete
' Next
元シト = ActiveSheet.Name
セル = Array("C4", "AO4", "C21", "AO21", "C38", "AO38", "C55", "AO55")
i = 8
Set myFS = CreateObject("Scripting.FileSystemObject")
For Each myF In myFS.GetFolder(フォルダ).Files
myEXT = LCase(myFS.GetExtensionName(myF))
If myEXT = "jpeg" _
Or myEXT = "jpg" _
Or myEXT = "gif" _
Or myEXT = "tiff" _
Or myEXT = "bmp" _
Or myEXT = "png" _
Or myEXT = "tif" Then
If i > 7 Then
i = 0
Sheets(元シト).Copy after:=Sheets(Sheets.Count)
End If
'===============画像の貼り付け
Set mySP = ActiveSheet.Pictures.Insert(myF)
myMA = Range(セル(i)).MergeArea.Address
'===============タテヨコの縮尺を保持
myHH = Range(myMA).Height / mySP.Height
myWW = Range(myMA).Width / mySP.Width
If myHH > myWW Then
mySP.Height = Range(myMA).Height
mySP.Width = Range(myMA).Width
Else
mySP.Height = Range(myMA).Height
mySP.Width = Range(myMA).Width
End If
'===============中央へ調整
myHH2 = (Range(myMA).Height / 2) - (mySP.Height / 2)
myWW2 = (Range(myMA).Width / 2) - (mySP.Width / 2)
mySP.Top = Range(myMA).Top + myHH2
mySP.Left = Range(myMA).Left + myWW2
Set mySP = Nothing
i = i + 1
End If
Next
Set myFS = Nothing
End Sub
No.3ベストアンサー
- 回答日時:
答えを回答するとすれば、こんな感じかな~。
以下の2ヶ所を変更しています。
「'▼修正箇所(1)▼ ~ '▲▲▲▲▲▲▲」
「'▼修正箇所(2)▼ ~ '▲▲▲▲▲▲▲」
(変更前のコードはコメントアウトしています)
(1)箇所目はNo1で記述したAddPictureを利用する方法に変更
(2)箇所目は質問コードの縦横比率の保持処理が変だったので修正
あと質問のエラーについてはmyFがVariantだからです。
ファイルパスをCstrで文字列へ変換すればエラー回避できるかと。
(修正(1)に含みます)
【追記】
エクセルのVBAは型宣言を省略しても動作しますが、
宣言しないで使用すると変数の型が混雑しますので
やはり宣言はしたほうがよいかと。(今回はしていませんが)
No2の方がおっしゃっていますが、先頭にTAB入れてても
OKWebに張り付けると先頭の空白行は無視されるんですよね(;_;
(よって今回コードも詰まっていますが、ご愛嬌。)
■以下修正後のコードです入替えてください
Sub 画像貼り付け()
'===============フォルダ選択
Set myPath = CreateObject("Shell.Application") _
.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, 0)
If myPath Is Nothing Then Exit Sub
If myPath.Items Is Nothing Then Exit Sub
If myPath.Items.Item Is Nothing Then Exit Sub
フォルダ = myPath.Items.Item.Path
Set myPath = Nothing
'===============画像の掃除
' For Each mySP In ActiveSheet.Shapes
' myAD1 = mySP.TopLeftCell.MergeArea.Address
' myAD2 = Target.Address
' If myAD1 = myAD2 Then mySP.Delete
' Next
元シト = ActiveSheet.Name
セル = Array("C4", "AO4", "C21", "AO21", "C38", "AO38", "C55", "AO55")
i = 8
Set myFS = CreateObject("Scripting.FileSystemObject")
For Each myF In myFS.GetFolder(フォルダ).Files
myEXT = LCase(myFS.GetExtensionName(myF))
If myEXT = "jpeg" _
Or myEXT = "jpg" _
Or myEXT = "gif" _
Or myEXT = "tiff" _
Or myEXT = "bmp" _
Or myEXT = "png" _
Or myEXT = "tif" Then
If i > 7 Then
i = 0
Sheets(元シト).Copy after:=Sheets(Sheets.Count)
End If
'===============画像の貼り付け
'▼修正箇所(1)▼
Set mySP = ActiveSheet.Shapes.AddPicture(CStr(myF), False, True, 0, 0, 0, 0)
mySP.ScaleHeight 1, msoTrue
mySP.ScaleWidth 1, msoTrue
'Set mySP = ActiveSheet.Pictures.Insert(myF)
'▲▲▲▲▲▲▲
myMA = Range(セル(i)).MergeArea.Address
'===============タテヨコの縮尺を保持
'▼修正箇所(2)▼
myHSP = mySP.Height / mySP.Width
myHMA = Range(myMA).Height / Range(myMA).Width
If myHMA >= 1 Then
mySP.Width = Range(myMA).Width
If myHSP < myHMA Then
mySP.Height = mySP.Width * myHSP
Else
mySP.Height = mySP.Width * myHMA
End If
Else
myHSP = mySP.Width / mySP.Height
myHMA = Range(myMA).Width / Range(myMA).Height
mySP.Height = Range(myMA).Height
If myHSP < myHMA Then
mySP.Width = mySP.Height * myHSP
Else
mySP.Width = mySP.Height * myHMA
End If
End If
'myHH = Range(myMA).Height / mySP.Height
'myWW = Range(myMA).Width / mySP.Width
'If myHH > myWW Then
' mySP.Height = Range(myMA).Height
' mySP.Width = Range(myMA).Width
'Else
' mySP.Height = Range(myMA).Height
' mySP.Width = Range(myMA).Width
'End If
'▲▲▲▲▲▲▲
'===============中央へ調整
myHH2 = (Range(myMA).Height / 2) - (mySP.Height / 2)
myWW2 = (Range(myMA).Width / 2) - (mySP.Width / 2)
mySP.Top = Range(myMA).Top + myHH2
mySP.Left = Range(myMA).Left + myWW2
Set mySP = Nothing
i = i + 1
End If
Next
Set myFS = Nothing
End Sub
本当に!本当に!感謝!感謝!ありがとうございます!m(_ _)m
本来であれば自分で勉強をして、理解して作業をしなければいけないこと思いますが・・・できません。^^;
知人も過去にどこかのサイトから引っ張ってきて作った様で理解もしていません。--;
そうは言っても仕事で非常に重宝しており困っていました。
本当に『教えて!』の目的そのもののご回答をいただきました。
他力本願で非常によくないことは感じていますが・・・・^^;
兎にも角にも本当にありがとうございました!m(_ _)m
失礼承知で、また質問させて頂く事もあるかと思います。よろしくお願いいたします。^^/
No.2
- 回答日時:
同じ質問?
当方、Excel2003のため
とりあえず、1行1行ステップイン[F8」で確認。
データが全てちゃんと入っているか、下のウィンドウで確認して下さい。
myFにしっかりした値が入っていないということが考えられそうです。
Tabで分けてもらわないと、プログラムが見難いです。
1. しっかり変数定義がされていない。
全部全部そうですが、どこに定義されてるんです?
Dim ●● As String とか。
2013は変数定義は必要ないということで?
2. If のあと、 End IF で閉じられてない。
If myPath Is Nothing Then Exit Sub の後とかもそうですが
どこにEnd if があるんですか?
これで、エラーが出ないというのもおかしな話。
No.1
- 回答日時:
エクセルのバージョンで2010から「Pictures.Insert」を用いて画像を挿入した場合
リンク貼り付けになるように仕様がかわりました。
http://support.microsoft.com/kb/2396509/ja
http://detail.chiebukuro.yahoo.co.jp/qa/question …
AddPicture(LinkToFileをFalseにする必要事)を用いて画像を挿入してください。
詳しくは参考URLをご覧ください。
参考URL:http://www.moug.net/tech/exvba/0120020.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
遅刻の「言い訳」選手権
よく遅刻してしまうんです…… 「電車が遅延してしまい遅れました」 「歯医者さんが長引いて、、、」 「病院が混んでいて」 などなどみなさんがこれまで使ってきた遅刻の言い訳がたくさんあるのではないでしょうか?
-
あなたは何にトキメキますか?
「きゅんとした〜♪」 と思う瞬間ってありますよね。 それは恋愛だったり、推し活だったり、映画のワンシーンだったり……。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて
Excel(エクセル)
-
【VBA】写真の縦横比を変えずに貼り付ける
Visual Basic(VBA)
-
マクロで画像挿入→エラー「リンクされたイメージを表
Excel(エクセル)
-
-
4
画像を削除したい(VBA)
Word(ワード)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
エクセルマクロでシート内にある画像のみを選択する
Excel(エクセル)
-
7
Pictures.Insertメソッド⇒Shapes.AddPictureメソッドに変更したいです。
Visual Basic(VBA)
-
8
VBAで選択した画像を貼り付けたい
Excel(エクセル)
-
9
VBAで特定のセルに画像があれば削除、なければ貼り付けを行いたい
Excel(エクセル)
-
10
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
11
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
12
エクセル ハイパーリンクで画像を表示
その他(Microsoft Office)
-
13
エクセルのマクロで特定フォルダ内のJPGファイルを検索して開きたいので
Excel(エクセル)
-
14
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
15
画像読み込み失敗の判定
Visual Basic(VBA)
-
16
VBAエクセルに貼り付けた画像をセルにあった大きさにしたい(等倍)
Excel(エクセル)
-
17
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
18
Excel VBA 見本通りに入力してもエラーがでます どこがいけないのでしょうか
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
同級生の顔を使ってエロ画像を...
-
結婚して2ヶ月の旦那のスマホの...
-
至急回答お願いします、彼氏に...
-
EXIF情報がない場合はどのよう...
-
マクロで画像挿入→エラー「リン...
-
tiffファイルの解像度変更の仕方
-
pixivの画像を保存しようとした...
-
可愛い子がプリクラを撮ると盛...
-
PCでPDFファイルを電子書籍のよ...
-
受信した添付写真を大きくする
-
CD-ROMからSDカードへ できます...
-
整形外科などで、MRIやレントゲ...
-
ツイッターとかの画像を紙に印...
-
「強調」の対義語は何ですか?
-
可愛い子はプリクラが盛れない...
-
ワードで 「ぼかし」の機能はど...
-
彼氏の携帯から、パンチラ画像...
-
「湾岸の千葉君」での秀里毅の写真
-
証明用写真の作り方をお教えく...
-
アマゾンドライブフォトにある...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同級生の顔を使ってエロ画像を...
-
至急回答お願いします、彼氏に...
-
整形外科などで、MRIやレントゲ...
-
pixivの画像を保存しようとした...
-
iPhoneで写真を撮りました。 端...
-
マクロで画像挿入→エラー「リン...
-
「強調」の対義語は何ですか?
-
「湾岸の千葉君」での秀里毅の写真
-
PCでPDFファイルを電子書籍のよ...
-
受信した添付写真を大きくする
-
可愛い子はプリクラが盛れない...
-
撮影日時をそのままに残して画...
-
tiffファイルの解像度変更の仕方
-
写真の下に文字を入れるには?
-
VBAの内容の修正をお願いさせて...
-
至急です!!答えてくださいお願...
-
コンクリートが茶色になってし...
-
Word差し込み印刷 画像更新され...
-
macのプレビューで写真の編集が...
-
結婚して2ヶ月の旦那のスマホの...
おすすめ情報