
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Cancel = True
'===============画像選択
myF = Application.GetOpenFilename _
("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False)
If myF = False Then
MsgBox "画像を選択してください(終了)"
Exit Sub
End If
'===============画像の掃除
For Each mySP In ActiveSheet.Shapes
myAD1 = mySP.TopLeftCell.MergeArea.Address ←この行が黄色くなっちゃいます。
myAD2 = Target.Address
If myAD1 = myAD2 Then mySP.Delete
Next
'===============画像の貼り付け
Set mySP = ActiveSheet.Pictures.Insert(myF)
'===============タテヨコの縮尺を保持
myHH = Target.Height / mySP.Height
myWW = Target.Width / mySP.Width
If myHH > myWW Then
mySP.Height = mySP.Height * myWW
mySP.Width = Target.Width
Else
mySP.Height = Target.Height
mySP.Width = mySP.Width * myHH
End If
'===============中央へ調整
myHH2 = (Target.Height / 2) - (mySP.Height / 2)
myWW2 = (Target.Width / 2) - (mySP.Width / 2)
mySP.Top = Target.Top + myHH2
mySP.Left = Target.Left + myWW2
Set mySP = Nothing
End Sub
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Private Sub Calendar1_Click()
ActiveCell.Value = Calendar1.Value
End Sub
※黄色くなってエラー表示、変数宣言がされていないとご指示いただきましたが、どうして良いのか分かりません。どのように書き加えればを教えてください。よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
こんにちは。
変数の使い方は、なかなか覚えられませんね。
中級までは、あってもなくてもよいと思います。
回答者でも、長くやっていても、よく分かっていない人もいるようです。
VBAというのは、あまりエラーが出ないし、予約語も少ないから、何でもありでしょうけれども、VBA関数やプロパティ名を変数に使ったりする人がいますが、それはまずいなって、分かりそうだと思うのですが。それと、私の場合は 2Byte 文字を変数には使いません。Excel等がバージョン違いが存在していたり、海外のユーティリティを使うと、文字化けが起きてしまうからです。
ただ、あえて自分なりにガンバってみたいのでしたら、例えば、myHH, myWW というのは、Double 型なのですが、こういうのの決め方というのは、ローカルモジュールで推奨型が出てきますから、それをフィードバックしてつけてあげるようにすると良いかもしれません。
>myAD1 = mySP.TopLeftCell.MergeArea.Address ←この行が黄色くなっちゃいます。
ところで、今回のエラーって別に、変数の問題ではないのではありませんか?
>For Each mySP In ActiveSheet.Shapes
問題は、この後だと思います。Shapes というのは、オブジェクトの統合したもので、何でも入ってしまいます。プロパティがあれば、mySP.TopLeftCell でRange オブジェクトが取れるでしょうけれども、これは、オブジェクトのタイプを限定させた方が安心できます。
コードを見る限りは、Active X コントロール(Calendar)があるようです。
最近、似たような質問で、私の回答はボツになりましたが、画像の重なりの問題ですよね。画像を重ねてはならないのでしょうから、左上端のアドレス合わせだけでよいのか、工夫が必要ではないかと思います。
以下は、まだ、不具合は残っているかもしれません。
'//シートモジュール
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim mySP As Object
Dim myAD1 As Range, myAD2 As Range
Dim myF As Variant
Dim myHH As Double, myWW As Double
Cancel = True
'===============画像選択
myF = Application.GetOpenFilename _
("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False)
If myF = False Then
MsgBox "画像を選択してください(終了)"
Exit Sub
End If
'===============画像の掃除
For Each mySP In ActiveSheet.Shapes
If TypeName(mySP.DrawingObject) = "Picture" Then '画像限定
Set myAD1 = mySP.TopLeftCell '左端上
Set myAD2 = mySP.BottomRightCell '右端下
If Not Intersect(Range(myAD1, myAD2), Target) Is Nothing Then mySP.Delete
End If
Next
'===============画像の貼り付け
Set mySP = ActiveSheet.Pictures.Insert(myF)
'===============タテヨコの縮尺を保持
myHH = Target.Height / mySP.Height
myWW = Target.Width / mySP.Width
If myHH > myWW Then
mySP.Height = mySP.Height * myWW
mySP.Width = Target.Width
Else
mySP.Height = Target.Height
mySP.Width = mySP.Width * myHH
End If
'===============中央へ調整
myHH2 = (Target.Height / 2) - (mySP.Height / 2)
myWW2 = (Target.Width / 2) - (mySP.Width / 2)
mySP.Top = Target.Top + myHH2
mySP.Left = Target.Left + myWW2
Set mySP = Nothing
End Sub
Private Sub Calendar1_Click()
If ActiveCell.Value = "" Then
ActiveCell.Value = Me.Calendar1.Value
End If
End Sub
有難うございます。
いろいろな方々から答えを頂き本当に感動です。
まだお願いがあるんです。
シートの保護をしてから貼り付けようとするとエラーが出てしまいます。
フォームは変えられたくないので保護は掛け、そして画像の貼り付け削除が自由にできたらと思っています。
よろしくお願いいたします。
No.6
- 回答日時:
>シートの保護をしてから貼り付けようとするとエラーが出てしまいます。
Protect の中の、UserInterfaceOnly というプロパティをTrue にすれば、マクロはプロテクトとは関係なしに動くようになります。
'//ThisWorkbook モジュールに以下のようなプログラムを足して、再起動(または、実行)すれば、おっしゃるようになります。
Private Sub Workbook_Open()
Const PSW As String = "xyz" 'パスワード
With Worksheets("Sheet1") '保護するシート
.Unprotect Password:=PSW
.Protect Password:=PSW, UserInterFaceOnly:=True, DrawingObjects:=True, Contents:=True
End With
End Sub
早速のご回答有難うございます。
何度もお願いして申し訳ありませんが、セルを保護したところもダブルクイックで画像が貼りつきます。
保護したセルには貼り付けられないようにすることは出来ないでしょうか。
宜しくお願いいたします。
No.4
- 回答日時:
No.3です。
>Dim 変数名をどのように、どこに書くのかも知らないでエクセルを使おうとしています。
まず基本は変数を使う前に宣言してあれば良いのですが、
特別な条件でない限り(今回の場合)なら、
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim 変数名1
Dim 変数名2
と、最初に書くのが一般的ですかね。
ありがとうございます。
せっかく教えていただいているのに何のことか全く分からないのが残念です。
言われるままにコピペするだけをお許しください。
有難うございます。
No.3
- 回答日時:
No.1です。
既存のBookはわかりませんが、チェックを外した後Excelを一旦閉じて
開いた際の新規BookにはNo.2の項目は出ず、
エラーにはならないでしょうね。
と言うより変数の宣言は最初のうちに覚える物ですから、
それを飛ばすのもどうでしょうね?
面倒でなければ
Dim 変数名
を最初に書いてしまえば良いのではないかと。
型の明確な指定は省くことになりますが、エラー表示対策にはなるのでは?
有難うございます。
Dim 変数名をどのように、どこに書くのかも知らないでエクセルを使おうとしています。
関数だけで使ってきて思いどりに使えないことをマクロのコピペで使えたことに味しめているだけなので
アドバイスにお答えできないのが残念です。
いろいろと有難うございます。

No.2
- 回答日時:
先頭に
Option Explicit
がありませんか。
その行を削除すれば、変数宣言がなくてもエラーになりません。
本来は、きちんと変数を宣言してマクロを作成したほうが良いのですが、とりあえず、
Option Explicit の行を削除すれば動きます。
早速のアドバイスを有難うございます。
Option Explicitは有りませんでした。『変数の宣言を強制する』のチェックを外す。もしましたがエラーが出てしまいます。
操作としては文字列や数字・数式を操作して続けて画像をマクロで取りこむとエラーがでます。今は文字列などの入力をしたら保存、立ち上げて画像を貼り付けたら保存と分けて利用するとエラーがでないです。
いちいち保存・開くではめんどうですのでなんとかならないでしょうか。
No.1
- 回答日時:
変数の宣言をしたくなければ
http://officetanaka.net/excel/vba/variable/02.htm
『変数の宣言を強制する』のチェックを外す。
今後変数の宣言をキチンとしたいなら
https://www.vba-ie.net/programing/variable-state …
こう言った所を勉強する。
早速のご回答をありがとうございます。
『変数の宣言を強制する』のチェックを外す。はしましたがNo.2のご回答のところでも書きましたが二度の操作をすればエラーがですにすみます。
お知恵をお貸しください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
男の人はやってるとき 彼女がす...
-
男性の方に質問です。 バックで...
-
風俗ってどこまでの接客をします?
-
彼女が感じやすくて可愛い
-
フェラチオは妻の義務ですか?...
-
男性に質問です! 電話だけで勃...
-
高校生です。彼氏の前で初めて...
-
女性が喘いでいるときの男性の...
-
夫婦の夜の営みについてです。 ...
-
彼と体の相性が良すぎて悩んで...
-
初体験って気持ちいいの? 男の...
-
彼氏と毎日セックスするのは異...
-
男性に質問です。 デリヘルって...
-
兄妹や姉弟で、キスやエッチし...
-
ソープランドについて
-
もし週1しか恋人と会えなかった...
-
キスすれば相手を好きでなくて...
-
ふぇらでイカセテくれる うまい...
-
彼とエッチするとき、私は乳首...
-
男性に質問です。 エッチの時正...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
男の人はやってるとき 彼女がす...
-
男性の方に質問です。 バックで...
-
彼女が感じやすくて可愛い
-
風俗ってどこまでの接客をします?
-
高校生です。彼氏の前で初めて...
-
フェラチオは妻の義務ですか?...
-
女性が喘いでいるときの男性の...
-
夫婦の夜の営みについてです。 ...
-
彼氏と毎日セックスするのは異...
-
男性に質問です! 電話だけで勃...
-
兄妹や姉弟で、キスやエッチし...
-
初体験って気持ちいいの? 男の...
-
彼と体の相性が良すぎて悩んで...
-
男性に質問です。 デリヘルって...
-
ソープランドについて
-
キスすれば相手を好きでなくて...
-
もし週1しか恋人と会えなかった...
-
実家住まいの場合Hはホテル以外...
-
彼女がフェラをしてくれません。
-
彼氏が前戯をしてくれない
おすすめ情報
※シートの保護をしてから貼り付けようとするとエラーが出てしまいます。
フォームは変えられたくないので保護は掛け、そして画像の貼り付け削除が自由にできたらと思っています。
よろしくお願いいたします。
※セルを保護したところもダブルクイックで画像が貼りつきます。
保護したセルには貼り付けられないようにすることは出来ないでしょうか。
宜しくお願いいたします。