[[20101007132805]] 『写真を貼り付けるマクロ』(いい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『写真を貼り付けるマクロ』(いい)
 ダブルクリックしたら、そのセルの中に写真がきれいに納まるようになるように作りましたが、、、
 表示倍率100%表示の時はきちんと納まるように写真が貼りつきますがそれ以外だとずれてきます。
 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As 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

	'===============画像の貼り付け

	With Range("A1").MergeArea
		Set mySP = ActiveSheet.Shapes.AddPicture(Filename:=myF, _
		LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, _
		Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
	End With

	With mySP
		.ScaleHeight 1, msoTrue
		.ScaleWidth 1, msoTrue
		.LockAspectRatio = msoFalse
	End With

	'===============タテヨコの縮尺を保持

	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

 マクロ・VBAが分からないので、いろんな所から引用していて手に負えません。
 今は「はじめてのVBAプログラミング」という本とインターネットで勉強していますが、
 まず何から学べば良いのでしょうか?
 合わせてご教授願います。
 宜しくお願い致します。

 回答が付かないようなので猿知恵を。

 画面の表示倍率を100%にしてから画像を貼り付けて、
 その後、元の表示倍率に戻すってのはうまくいかないですかね?
 (マクロの内容はまったく見ていません)
 
(純丸)(o^-')b ※自分じゃ画像を扱ったことないけど、、。

純丸様

画面の表示倍率を100%にしてから画像を貼り付けて、その後、元の表示倍率に戻すことは出来ます。
やはり不可能なんでしょうか・・・
ありがとうございます。


 >画面の表示倍率を100%にしてから画像を貼り付けて、その後、元の表示倍率に戻すことは出来ます。

 それをマクロでしたらどうなんでしょう?と
 ご提案したつもりですが。
 
(純丸)(o^-')b

なるほど!!!

発想がすばらしいですね!

やってみましたが、100%にして貼り付ける事は出来ますが
その後元の倍率に戻す方法が分かりません。


 100%にする前にZoomの値を変数へ入れておき、貼り付け後に変数からZoomへ戻してはどうでしょうか?
 (独覚)

独覚様

現在の表示倍率を変数に入れるという事でしょうか?

現在の表示倍率を探る構文?関数?が必要でしょうか?

勉強不足ですみません・・・

(いい)


 表示倍率を100%にする時にはどうしていますか?
 その時に設定するプロパティにその時点での倍率が入っています。

 ActiveWindow.Zoom = 100
 で倍率を100%に。

 変数 = ActiveWindow.Zoom
 で現在の倍率を変数に。

 (独覚)

独覚様

Dim AWZoom

AWZoom = ActiveWindow.Zoom
ActiveWindow.Zoom = 100

〜〜〜
貼り付けの構文
〜〜〜

ActiveWindow.Zoom = AWZoom

で成功しました!

このような事でしょうか?

ありがとうございます!


 うまくいったようでよかったですね。
 元々のマクロもすべて変数宣言しておきましょう。
 
(純丸)(o^-')b

純丸様

変数宣言してみます!
ありがとうございました*

(いい)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.