ActiveX
以下のコードを使用して、ActiveX コントロールをあるシートから別のシートにコピーできます。
注: 1 つのスプレッドシートに同じ名前の 2 つのオブジェクトを含めることはできません。
Sub CopyActiveX()
Application.ScreenUpdating = False
Dim x As OLEObject, y As OLEObject
Set x = Sheets("SRC").OLEObjects("HasCustomName")
Set y = x.Duplicate
Dim xName As String
xName = x.Name
y.Cut
With Sheets("TRGT")
.Paste
.OLEObjects(.OLEObjects.Count).Name = xName
.Activate
End With
Application.ScreenUpdating = True
End Sub
フォーム コントロール
ボタンをあるシートから別のシートにコピーして、名前の自動変更を防止するには、以下のコードを使用します。デフォルトでは、Excel はコピーされたボタンに (別のシート上であっても)新しい名前を付けるため、コピーするボタンの名前と一致するように名前を変更する必要があります。
サブを使用CopyButton()
してそれを達成します。4 つの必須パラメータがあります
from
- ボタンをコピーするシート名
btnName
- コピーするコントロールの名前
toWorksheet
- 対象ワークシート
rng
- ボタンに関連付けるターゲット範囲
Sub CopyPasteButton()
CopyButton "SRC", "Button 1", "TRGT", "B10"
End Sub
Private Sub CopyButton(from As String, btnName As String, toWorksheet As String, rng As String)
Application.ScreenUpdating = False
Sheets(from).Shapes(btnName).Copy
Sheets(toWorksheet).Activate
Sheets(toWorksheet).range(rng).Select
Sheets(toWorksheet).Paste
Selection.ShapeRange.Name = btnName
Application.ScreenUpdating = True
End Sub