excel - 我正在尝试创建一个宏,该宏将范围与范围中的对象一起复制并粘贴到新变量位置
问题描述
我的意图是将一个范围与对象(单选按钮)一起复制并将其粘贴到动态位置(偏移 15 列),然后更新新粘贴对象相对于它们的位置的所有单元格引用。即如果单选按钮(对象)的位置=“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
... 使用 ofrng.Cells.Offset(0, 15).Select
是不明智的。这将选择范围内的许多单元格。我选择粘贴它引用范围的第一个单元格。rng.Cells()
如果您想要/需要不同的位置,我认为调整代码()会很容易。
编辑:我修改了代码以仅选择和复制一个名为“OptionButton1”的形状。请注意在这里使用您的真实形状名称!
我还展示了一种将 a 分配LinkedCell
给新创建的选项按钮的方法。我必须承认,查看您的代码,我不明白您试图链接哪个单元格。我使用了一个通用的,与移动形状相同。请根据您的需要在此处使用适当的地址。
推荐阅读
- flask - 如何处理 Flask 中同时包含动态和静态组件的路由?
- r - ggplot 散点图,随着值变小而变大的点。一定范围内的值都应该具有相同的大小
- php - 针对特定产品类别的 WooCommerce 自定义结帐页面重定向
- php - 如何在 Laravel 中使用 php 包?
- java - Android:使用画布绘制时如何观察视图的布局约束?
- ssh - 在 Coda 中使用 SSH ProxyJump
- flutter - 无法在颤振中使用扩展
- swift - 如何知道您在 Firestore 数据库中有多少个主要集合?
- optimization - Julia:NLsolve 每次运行都提供不同的解决方案,有时会返回 NaN?
- c++ - 如何通过多个类“联合变量”(sfml)使用 pollevent