0

以下のコードを試して、あるシートから ActiveX コマンド ボタンをコピーし、別のシートに貼り付けました。

Sheets("SRC").HasACustomName.Copy
Sheets("TRGT").Range("O1").PasteSpecial

私も試しました:

Sheets("SRC").Shapes("hasACustomName").Copy 
Sheets("TRGT").Range("O1").Select 
Sheets("TRGT").Paste

しかし、これらの両方で私が抱えている問題は、コマンド ボタンの名前を hasACustomName から CommandButtonX に変更したことです。

コマンド ボタンの元の名前を保持できる、あるシートから別のシートにコマンド ボタンを貼り付ける別の方法を見つけられますか?

4

1 に答える 1

4

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
于 2013-08-29T10:23:10.097 に答える