Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel I';我试图创建一个宏,将一个范围和该范围内的对象复制并粘贴到一个新的变量位置_Excel_Vba_Object_Radio Button - Fatal编程技术网

Excel I';我试图创建一个宏,将一个范围和该范围内的对象复制并粘贴到一个新的变量位置

Excel I';我试图创建一个宏,将一个范围和该范围内的对象复制并粘贴到一个新的变量位置,excel,vba,object,radio-button,Excel,Vba,Object,Radio Button,我的目的是复制一个范围和对象(单选按钮),并将其粘贴到动态位置(偏移15列),然后更新新粘贴对象相对于其位置的所有单元格引用。i、 e.如果单选按钮(对象)的位置=“AF22”,则链接的单元格=新范围的第一列+右侧的11列(例如T列+11列=列“AD”),因此新单元格引用=“AD22” 编辑:我删除了代码中看似多余的一部分。下面的代码完美地复制和粘贴了数据和对象。但是,我需要Linkedcell部分的帮助 `Sub Macro2() Dim rng, rng1, rng2 As Range, s

我的目的是复制一个范围和对象(单选按钮),并将其粘贴到动态位置(偏移15列),然后更新新粘贴对象相对于其位置的所有单元格引用。i、 e.如果单选按钮(对象)的位置=“AF22”,则链接的单元格=新范围的第一列+右侧的11列(例如T列+11列=列“AD”),因此新单元格引用=“AD22” 编辑:我删除了代码中看似多余的一部分。下面的代码完美地复制和粘贴了数据和对象。但是,我需要Linkedcell部分的帮助

`Sub Macro2()
Dim rng, rng1, rng2 As Range, s As Shape, ws As Worksheet, sr As 
ShapeRange, Loc As String
Set ws = ActiveWorkbook.ActiveSheet
Set rng = ActiveSheet.Range("E19")
Set rng1 = ActiveSheet.Range("T19:AF34")
Set rng2 = ActiveSheet.Range("E19:Q34")

'Copy the range with text and paste it to the desired location

ActiveSheet.Range("E19:Q34").copy

With rng
rng.Offset(0, 15).Select
ws.Paste
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

End With

'Trying to find option buttons and give them a new cell reference.(linked cell)
 With ActiveSheet
    'Selection = Range("V19:AC34")
    For Each s In .Shapes
        'if s.TopLeftCell.Column =
         '   .Range ("V19:AC34")

    If s.Name Like "OptionButton*" Then

     s.DrawingObject.LinkedCell = "=" & Chr(s.TopLeftCell.Column) & CStr(s.TopLeftCell.Row)
     Debug.Print s.DrawingObject.LinkedCell

        'Loc = "AD" & s.TopLeftCell.Row
        'Debug.Print Loc
        '.Value = xlOff
        'Selection.LinkedCell = Range(Loc).Address
        '.Display3DShading = False
        End If
 'End With
    Next s
 End With



End Sub`

尝试下一个代码来选择/复制范围选择的形状:

Dim ws As Worksheet, s As Shape, rng As Range, optB As OLEObject
    Set ws = ActiveSheet
    Set rng = sh.Range("your range containing the Option Button to be copied")
    With ws 
      For Each s In .Shapes
        If Not Intersect(Range(s.TopLeftCell.Address), Range(rng.Address)) Is Nothing Then
            If s.Name = "OptionButton1" Then 'use here your option button name
                s.Copy
                Exit For
            End If
        End If
      Next s
    End With
    rng.Cells(1, 1).Offset(0, 15).Select
    ws.Paste
    'Generic way of identifying the newly pasted Option button and allocate a `LinkedCell` to it:
    'Set optB = ws.Shapes(ws.Shapes.Count).OLEFormat.Object
    'optB.LinkedCell = "=" & rng.Cells(1, 1).Offset(0, 15).Address
    Selection.LinkedCell = rng.Cells(1, 1).Offset(0, 15).Address
要做到这一点,必须使用技巧,但要使用
ActiveSheet.Shapes
。。。 使用
rng.Cells.Offset(0,15)。选择
是不明智的。这将选择范围内的所有单元格。我已选择将其粘贴到范围的第一个单元格。如果你想要/需要一个不同的位置,我认为修改代码(
rng.Cells()
)会很容易

编辑:我修改了代码,只选择并复制了一个名为“OptionButton1”的形状。请注意使用您的真实姓名


我还展示了一种将
LinkedCell
分配给新创建的选项按钮的方法。我必须承认,通过查看您的代码,我不理解您试图链接的单元格。我使用了一个通用的,同样用于移动形状。请根据您的需要在此处使用适当的地址。

我收到一条错误消息“Object不支持此属性或方法错误”:对于rng2.Shapes中的每个s,没有一个范围的
Shapes
属性!感谢您的回复@FaneDuru。有没有一种方法可以选择某个范围内的所有形状/对象?是的,是。。。我将发布一个答案…@FaneDuru,我的代码有3种类型的对象,-复选框,组框和选项按钮(单选按钮)。但是,只有选项按钮需要链接到相应的行。注释不用于扩展讨论;这段对话已经结束。