Excel VBA处理和粘贴许多形状现在在Windows 10中出现错误,但在2016年没有
我是VBA的新手,但总能从阅读论坛中找到解决方案 我现在有一个无法解决的问题,我的公司最近从Windows 2016切换到了Windows 10(幸运的是,目前我仍然有两台笔记本电脑),但我在旧版本中开发的一些Excel VBA工具中遇到了代码不一致错误的问题 我的同事也有这个问题,但通过禁用和启用丢失的库,成功地解决了他的问题。。我尝试过这个,但没有解决 错误 基本上,我的工具通过复制和粘贴形状、调整形状大小并在指定的单元格位置重命名形状来“绘制”项目的甘特图。。以前的版本完全没有问题只花了几秒钟。。Windows 10完全不一致。。有时,它会在没有问题的情况下运行(比如说20%的时间),然后它会在完全不同的代码区域出错 我得到的错误是“运行时错误1004工作表类的粘贴方法失败” 我不知道为什么我的代码会在旧的Windows中运行find,而不是Windows 10。。但这可能是因为我的代码有点垃圾,选择形状和单元格等等,有时它就是无法处理 以下是我正在使用的代码示例,如有任何建议,将不胜感激:Excel VBA处理和粘贴许多形状现在在Windows 10中出现错误,但在2016年没有,excel,vba,Excel,Vba,我是VBA的新手,但总能从阅读论坛中找到解决方案 我现在有一个无法解决的问题,我的公司最近从Windows 2016切换到了Windows 10(幸运的是,目前我仍然有两台笔记本电脑),但我在旧版本中开发的一些Excel VBA工具中遇到了代码不一致错误的问题 我的同事也有这个问题,但通过禁用和启用丢失的库,成功地解决了他的问题。。我尝试过这个,但没有解决 错误 基本上,我的工具通过复制和粘贴形状、调整形状大小并在指定的单元格位置重命名形状来“绘制”项目的甘特图。。以前的版本完全没有问题只花了几
Sub DrawDevelopment()
Dim rngData As Range
Set rngData = Sheets("Gantt Extract").Range("a4:a300")
For Each G In rngData
G_Address = G.Offset(0, 39).Value
G_size = G.Offset(0, 40).Value
G_Scheme = G.Offset(0, 1).Value
If G_Address <> "" Then
Sheets("Gantt").Shapes("Development").Select
Selection.Copy
Range(G_Address).Select
Sheets("Gantt").Paste
Selection.Name = "Delete" & (G_Scheme)
With Selection.ShapeRange
.Width = G_size
Selection.ShapeRange.IncrementTop 4
Selection.ShapeRange.ZOrder msoBringToFront
End With
End If
Next G
End Sub
Sub-DrawDevelopment()
暗rngData As范围
设置rngData=图纸(“甘特图提取”)。范围(“a4:a300”)
对于rngData中的每个G
G_地址=G偏移量(0,39).值
G_size=G.偏移量(0,40).值
G_方案=G偏移量(0,1).值
如果G_地址为“”,则
表格(“甘特图”)。形状(“展开”)。选择
选择,复制
范围(G_地址)。选择
表格(“甘特图”)。粘贴
Selection.Name=“Delete”&(G_方案)
带Selection.shaperage
.宽度=G_尺寸
Selection.ShapeRange.incrementTop4
Selection.shaperage.ZOrder msoBringToFront
以
如果结束
下一个G
端接头
虽然并非特定于Windows 10,但可能是某些原因导致了一个问题,该问题通过在此处使用非限定的
Select
语句而暴露出来
我尝试在没有Select
的情况下重新编写它-但是为了测试它,我不得不在它与我的形状一起工作之前去掉shaperage
的用法
可能有更好的方法来引用粘贴的形状,但我无法立即看到,因此这看起来有点凌乱,但在我的Win10机器上工作:
Sub DrawDevelopment()
Dim rngData As Range
Dim shtCopyFrom As Worksheet
Dim shtCopyTo As Worksheet
Set shtCopyFrom = Sheets("Gantt")
Set shtCopyTo = Sheets("Gantt Extract")
Set rngData = shtCopyTo.Range("a4:a300")
For Each g In rngData.Cells
G_Address = g.Offset(0, 39).Value
G_size = g.Offset(0, 40).Value
G_Scheme = g.Offset(0, 1).Value
If G_Address <> "" Then
shtCopyFrom.Shapes("Development").Copy
With shtCopyTo
.Paste
Set objShape = .Shapes(.Shapes.Count)
objShape.Name = "Delete" & (G_Scheme)
Set pasteCell = .Range(G_Address)
With objShape
.Width = G_size
.IncrementTop 4
.ZOrder msoBringToFront
.Left = pasteCell.Left
.Top = pasteCell.Top
End With
End With
End If
Next g
End Sub
Sub-DrawDevelopment()
暗rngData As范围
Dim shtCopyFrom As工作表
Dim shtCopyTo As工作表
设置shtCopyFrom=图纸(“甘特图”)
设置shtCopyTo=图纸(“甘特图提取”)
设置rngData=shtCopyTo.Range(“a4:a300”)
对于rngData.细胞中的每个g
G_地址=G偏移量(0,39).值
G_size=G.偏移量(0,40).值
G_方案=G偏移量(0,1).值
如果G_地址为“”,则
shtCopyFrom.Shapes(“开发”).Copy
用shtCopyTo
粘贴
设置对象形状=.Shapes(.Shapes.Count)
objShape.Name=“Delete”&(G_方案)
设置粘贴单元=.Range(G_地址)
呈椭圆形
.宽度=G_尺寸
.递增前4名
佐德·姆索布林托弗先生
.Left=粘贴单元格.Left
.Top=粘贴单元格.Top
以
以
如果结束
下一个g
端接头