2016-08-07 12 views
0

私は、人々がペンとタブレットを使ってサインしなければならないシートを持っています。 Excelでは、このプロセスに「インキング開始」を使用しています。署名が完了した後、署名を選択、サイズ変更、移動したいと思います。私はマクロ記録を使用し、サイズ変更と移動の仕方を理解しましたが、明らかにすべての図形を選択するか、わかりませんが名前を知っている図形(インク17)しか選択できません。私は少し考えを与え、おそらく私はそれを回避する最新の作成された形状を選択して取得します。また、署名には1つ以上のカーブが含まれていることがあります。これは、以前のものを覚えて残りを選択する必要があることを意味します(2番目または3番目の人が署名したとき)。私はそれを行う方法があると確信していますが、私は最後の数時間を幸運なしに過ごしています。excel vba:最近作成された図形を選択する

誰でも手助けできますか?

+0

あなたが試したこととエラーが表示された理由、またはそれが望んでいなかった理由を表示できます – dbmitch

+0

マクロをトリガするのは何ですか? –

+0

@dbmitch今、私は次の "ActiveSheet.Shapes.SelectAllを試しています MsgBox ActiveSheet.Shapes(Application.Caller).Name"と私は取得しています "指定された名前の項目が見つかりませんでした – himura

答えて

1

最も簡単な方法は、他の形がないところにサインすることです。範囲がM11:Q31であると仮定しましょう。このサブは、左上のセルがその範囲にあるすべての図形の高さと幅の半分になります(N11で始まる「背景」は影響を受けません)。

Sub kjhdrle() 
    Dim x As Variant, y As String 
    y = "" 
    For Each x In ActiveSheet.Shapes 
    If Not Intersect(x.TopLeftCell, [M11:Q31]) Is Nothing Then 
     If y = "" Then 
     y = x.Name 
     Else 
     y = y & vbLf & x.Name 
     End If 
    End If 
    Next 
    If y = "" Then Exit Sub 
    ActiveSheet.Shapes.Range(Split(y, vbLf)).Select 
    If InStr(y, vbLf) Then Selection.ShapeRange.Group.Select 
    Selection.ShapeRange.ScaleWidth 0.5, msoFalse, msoScaleFromTopLeft 
    Selection.ShapeRange.ScaleHeight 0.5, msoFalse, msoScaleFromTopLeft 
End Sub 

私はできるだけシンプルにしました。複数のアイテムがある場合は、アイテムをグループ化してサイズを変更すると、アンカーも拡大/縮小されます。 (なしでは、各要素はそれ自身のアンカーで縮小するでしょう)。

異なる方法では、名前の前に「not_me_」などのような処理をしたくないシェイプの名前の自動変更があります。次に、コードを実行するときに、その文字列で始まるシェイプを無視するだけです。そして処理後、サブで使用されている図形は"not_me_" & [shape].nameに改名されますので、次回無視されます)

まだ質問がある場合は、質問してください。

+0

私はあなたの第2の方法が好きです。かなり賢い。 –

関連する問題