[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『直前まで選択していた図形の名称』(ひろとし)
よろしくお願いします。
ある場所のセルをダブルクリックしたときに直前まで選択していた画像をそのセルの左上に移動させたいのですが、可能でしょうか。
宜しくお願い致します。
< 使用 Excel:Excel2010、使用 OS:unknown >
ダブルクリックしたとたんに(というか、ダブルクリックのためにセルを選択したとたんに)画像の選択がはずれますから VBA処理を考えると、(???)さんご指摘の通りです。
一方、素朴な疑問です。
1.画像を選択 2.移動させたい右下のセルを選択してダブルクリック
という操作になるんだと思いますが
1.画像を選択 2.移動させたいセルにドラッグ
これと、操作数はかわらないのでは?
(β) 2015/11/19(木) 17:38
Shapes(Application.Caller).Select Set SelectedPicture = Shapes(Application.Caller) End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) SelectedPicture.Top = Target.Offset.Top - SelectedPicture.Height SelectedPicture.Left = Target.Offset.Left - SelectedPicture.Width End Sub (mm) 2015/11/19(木) 17:43
長くなりすみません。
(ひろとし) 2015/11/19(木) 18:35
(ひろとし) 2015/11/19(木) 18:43
>>エクセルの図の取込みから取り込まれると登録ができないことになります。
取り込んだ後、マクロ登録をして、それを選択してダブルクリックすればできないことはないですね。
>>人にそのシートだけをデータで渡すこともあるのでその場合には図形に登録された マクロを消去しないといけなくなります
それは、渡す前に当該シートの図に登録されているマクロを一括削除するマクロを流して きれいにして渡すという方法で、なんとでもなると思います。
ということなんですが、(ひろとし) 2015/11/19(木) 18:35 で説明されたことを、もう少し具体例で 説明されると、皆さんから別案も寄せられるかもです。 たとえば、そのダブルクリックしようとしているセル内に画像の左上隅が、ちょっとかかる状態でドラッグしておいてから ダブルクリックし、配置条件をそのセルから取得して、移動させるとか。
(β) 2015/11/19(木) 19:07
全く別案ですが。
1.画像を選択 2.目的のセルをダブルクリック
という操作と比較すると1手間多いのですが
標準モジュールに
Sub Test() Dim c As Range If TypeName(Selection) <> "Picture" Then MsgBox "画像が選ばれていません" Exit Sub End If
On Error Resume Next Set c = Application.InputBox("セルを選択してください", Type:=8) On Error GoTo 0
If c Is Nothing Then Exit Sub
'ここで c(1) を相手に処理
MsgBox c(1).Address & vbLf & Selection.Name
End Sub
このマクロにマクロショートカットキー(たとえば a) を割り当て。
操作は
1.画像を選択 2.Ctrl/a 3.目的のセルを選択
になります。
(β) 2015/11/19(木) 19:21
やはりその時だけユーザーホームを出すことにしました。
簡単に書くと ThisWarkbookシートに(これで各シートをそのままコピーや移動されて他人に渡ってもマクロは含まれない)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
処理判断 = ActiveCell.Value
場所 = ActiveCell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
幅 = Selection.Width
高さ = Selection.Height
If 処理判断 = 移動 Then UserForm1.Show (vbModeless): Exit Sub
If Application.Dialogs(xlDialogInsertPicture).Show = False Then Exit Sub
名前 = Selection.Name
Select Case 処理判断
Case 1
With ActiveSheet.Shapes(名前)
.LockAspectRatio = msoTrue
.Left = Range(場所).Left
.Top = Range(場所).Top
.Height = 高さ
End With
Case 2
With ActiveSheet.Shapes(名前)
.LockAspectRatio = msoFalse
.Left = Range(場所).Left
.Top = Range(場所).Top
.Width = 幅
.Height = 高さ
End With
End Sub
ユーザーホームボタンに下
Private Sub CommandButton1_Click()
If TypeName(Selection) <> "Range" Then 名前 = Selection.Name Else: MsgBox "表示したい図形を選択してから実行してください。": Unload UserForm1: Exit Sub
セル場所 = ActiveCell.Address(RowAbsolute:=False, ColumnAbsolute:=False)
幅 = セル場所.Width
高さ = セル場所.Height
With ActiveSheet.Shapes(名前)
.LockAspectRatio = msoFalse
.Left = Range(セル場所).Left
.Top = Range(セル場所).Top
.Width = 幅
.Height = 高さ
End With
Unload UserForm1
End Sub
上のイメージで処理なら可能でした。
皆様本当にありがとうございました。
(ひろとし) 2015/11/20(金) 09:33
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.