[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『図の位置を調整』(ぽん)
図のいちを微妙に調整したいのですがコードを教えてください。 Sub ボタン426_Click()
'
Dim i As Variant, x As Double, y As Double
i = Application.InputBox _
("1〜500の値を指定して下さい。" & vbLf & _ "最後に「-」をつけると、左に並びます。", Type:=2) i = StrConv(i, vbNarrow) If 0 < Val(i) And Val(i) < 500 Then If TypeName(Selection) = "Range" Then With ActiveCell x = .Offset(, IIf(Right(i, 1) = "-", 1, 0)).Left y = .Offset(1).Top End With Else With Selection.ShapeRange x = .Left + IIf(Right(i, 1) = "-", 0, .Width) y = .Top + .Height End With End If Sheets("倉庫").Shapes("Picture " & Val(i)).Copy ActiveSheet.Paste With Selection.ShapeRange .Left = x - IIf(Right(i, 1) = "-", .Width, 0) .Top = y - .Height End With ElseIf i <> "False" Then MsgBox "入力した値が不正です。" End If End Sub
ベストの図の調整位置のコードです。
ActiveSheet.Unprotect Dim pic As Picture ActiveSheet.Paste For Each pic In ActiveSheet.Pictures Selection.ShapeRange.PictureFormat.Brightness = 0.5 Selection.ShapeRange.PictureFormat.Contrast = 0.5 Selection.ShapeRange.PictureFormat.ColorType = msoPictureAutomatic Selection.ShapeRange.PictureFormat.CropLeft = 2 Selection.ShapeRange.PictureFormat.CropRight = 0# Selection.ShapeRange.PictureFormat.CropTop = 4 Selection.ShapeRange.PictureFormat.CropBottom = 0# pic.Height = 43 pic.Width = 130 Next ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=False End Sub
前半のコードは [[20091106222909]]『棚割りソフト』(みさ) この時に私が作ったものと似ている様に思いますが。。。 今回のなさりたい事と どの程度一致しているのでしょう?
>ベストの図の調整位置のコードです。 のコードでは、図形の位置が決まっている様ですが。。。
マクロで、番号を入れることによって Sheets("倉庫").Shapes("Picture " & Val(i))の図を一枚だけ ベストの図の位置に貼り付けたい って事でしょうか?
その場合、図形を削除する部分が無いので 実行するたびに重なってしまう事に成りそうですが。。。
仕様の説明をしていただいた方が良い様に思います。
(HANA)
Dim rng As Range Dim orng As Range On Error Resume Next Set rng = Selection If Err.Number = 0 Then Set orng = Application.InputBox("貼り付けるセルの範囲をドラック選択又は直接入力して下さい。", , , , , , , 8) If Err.Number = 0 Then Application.GoTo orng With ActiveSheet.Pictures.Paste(link:=True) .Interior.ColorIndex = xlColorIndexAutomatic .Left = orng.Left .Top = orng.Top .Width = orng.Width .Height = orng.Height End With End If End If On Error GoTo 0 Dim myFileName As String If TypeName(Selection) <> "Range" Then MsgBox "セルを選択して実行して下さい。" Exit Sub End If myFileName = Application.GetOpenFilename( _ FileFilter:="画像 ,*.jpg; *.gif; *.bmp", MultiSelect:=False) If myFileName <> "False" Then With ActiveSheet.Pictures.Insert(myFileName) .Left = Selection.Left .Top = Selection.Top .Width = Selection.Width .Height = Selection.Height End With End If End Sub
この上のコードと組合したイメージで先ほどのHANAさんが理解していただいた※マクロで、番号を入れることによって
Sheets("倉庫").Shapes("Picture " & Val(i))の図を一枚だけ ベストの図の位置に貼り付けたい この作業を組み合わせたいのですがお願いできませんでしょうか?(ぽん)
実際には前回のHANAさんコードが一番いいのですが結合セルにあわせてマクロ実行すると微妙に枠線に重なってしまいます。希望はこのままのコードがいいのですがイメージでコードを載せておきました。 もし前回のコードを調整可能であれば調整していただけないでしょうか?(ぽん)
同じ方でしたか。 お名前が違うので、違う方かと思っていました。
問題は >微妙に枠線に重なってしまいます。 だけで、サイズ変更等は必要無いのですよね?
また、基本仕様として 1.実行前にセルが選択されていた場合 セルの左下を基準に貼り付ける 2.実行前に画像が選択されていた場合 画像の右下を基準に貼り付ける と成っていると思いますが、 思った位置でないのは 1のパターンでのみだと思えば良いでしょうか?
ずれれば良い大きさは、どのセルで実行した時も一定でしょうか?
図形はセルの左下を基準に(セルの枠を基準に)貼りつきます。 ですから、ぴったり重なっているのが正常ですが 単純に、「枠の内側から配置される様にしたい」と言う事だったでしょうか?
と、言う事であれば x = .Offset(, IIf(Right(i, 1) = "-", 1, 0)).Left y = .Offset(1).Top ここの所を調整してみて貰えると良いのではないかと思います。 上にずらしたい場合は、y = .Offset(1).Top - 10 の様に。
右にずらしたい場合は、マイナスするのかプラスにするのか判断が必要なので 少し長く成りますが x = .Offset(, IIf(Right(i, 1) = "-", 1, 0)).Left + 10 * IIf(Right(i, 1) = "-", -1, 1) こんな感じで、「10」の所を調整して下さい。
(HANA)
HANAさんまたの回答ありがとうございました。みさです。 教えていただいたコードで調整出来ました。今回も大変お世話になりました。ありがとうございました。 (ぽん)
そこの調整で良かったですか。 でしたら、簡単な変更で済んで良かったですね。
動きに変わりは有りませんが 調整の数字は他の場合に変更する事も有ると思いますので x = .Offset(, IIf(Right(i, 1) = "-", 1, 0)).Left + IIf(Right(i, 1) = "-", -1, 1) * 10 の様に後ろに持って行っておいた方が良かったかもしれません。
まだご覧になっておられましたら、お手数ですが 変更しておいて頂けると良いと思います。
(HANA)
HANAさんご親切に再度ご指導いただきありがとうございます。 書き換えときました。有難うございました。(ぽん)
もう一つ質問お願いします。 エクセル2003と2007だと図のサイズの縦の寸法が違うのはなぜでしょうか? 図を合わせる時のコードですがエクセル2007だと横はOKですが縦が大きくなつてしまいます。 ActiveSheet.Unprotect Dim pic As Picture ActiveSheet.Paste For Each pic In ActiveSheet.Pictures Selection.ShapeRange.PictureFormat.Brightness = 0.5 Selection.ShapeRange.PictureFormat.Contrast = 0.5 Selection.ShapeRange.PictureFormat.ColorType = msoPictureAutomatic Selection.ShapeRange.PictureFormat.CropLeft = 2 Selection.ShapeRange.PictureFormat.CropRight = 0# Selection.ShapeRange.PictureFormat.CropTop = 4 Selection.ShapeRange.PictureFormat.CropBottom = 0# pic.Height = 43 pic.Width = 130 Next
End Sub 色々数値を変えましたがわかりません?よろしくお願いします。(ぽん)
pic.Height = 43 この部分で調整できませんなぜでしょうか?(ぽん)
ちょっとよく分かっていませんが 図のサイズを変更するのですよね?
pic.ShapeRange.Height = ○○ としてみるとどうですか?
(HANA)
2007でやってみました。
原因はおそらく 図形を選択して、右クリック→サイズとプロパティ(Z) の「拡大/縮小」の所に ■縦横比を固定する(A) にチェックが入っている事だと思います。
サイズを変更する前に pic.ShapeRange.LockAspectRatio = msoFalse で、チェックを外すと個別に指定が出来る様に成ると思います。
ただ、このマクロを実行すると そのシートに有る すべての図が同じ大きさに成ってしまうと思いますが それで良いのでしょうか?
また、サイズ変更以外の設定は 貼り付けたものに関してのみ実行されますが それもそれで 意図している事なのでしょうか?
(HANA)
HANAさん回答ありがとうございます。 今日夜試して見ます。 確かに全ての図が同じ大きさになります。 できればサイズ変更以外の設定は ※貼り付けたものに関してのみ実行のが理想的です。 (ぽん)
>確かに全ての図が同じ大きさになります。 と言う印象からは、意図していない結果に成っている印象を受けますが
>できればサイズ変更以外の設定は >※貼り付けたものに関してのみ実行のが理想的です。 でしたら、理想通りと言う事ですか??
(HANA)
こんばんわ! pic.ShapeRange.LockAspectRatio = msoFalse を入力して実行したら解決しました。 何度も何度もすみませんでした。 HANAさんありがとうございました。(ぽん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.