Lui*_*ara 0 excel vba excel-vba
我在VBA中有一些代码,有一些“国家/地区”和“产品”按钮。
我的目标是当我单击按钮时,单元格(1,1)将被诸如“ US”,“ CA”,“ MX”之类的文本覆盖,而单元格(2,1)将被“ PC”,“打印机”
示例:如果单元格(1,1)= US,则选择一个范围,复制该范围,最后将其粘贴到同一张纸中,但作为图片和不同的范围。
但是,首先,我需要删除上一张图片,用新图片替换它。
它可以工作,但有时会出现一条带有以下错误的消息,并且不会粘贴该范围。
'运行时错误1004-Microsoft Excel无法粘贴数据'
删除图片的代码。
Sub Delete_Pictures()
For Each Shape In ActiveSheet.Shapes
If Left(Shape.Name, 7) = "Picture" Then
Shape.Delete
End If
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
假设我已经单击PC按钮,并且单元格(2,1)包含='PC'
如果单击“美国按钮”,则宏应执行以下操作。
Sub Button_US()
Application.ScreenUpdating = False
Application.EnableEvents = False
Cells(1, 1) = "US"
Call Delete_Pictures
If Cells(2, 1) = "PC" Then
Range("BP73:BX87").Select
Selection.Copy
With Worksheets("Main")
.Activate
.Range("Z7").Select
.Pictures.Paste(Link:=True).Select
End With
End If
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以纠正这一问题,或者是否有其他方法可以复制并粘贴范围而不会出现此类错误。
我敢打赌这是.Select。有关如何避免使用的信息,请参见此线程.Select。
Sub Button_US()
Dim myPic As Picture
Application.ScreenUpdating = False
Application.EnableEvents = False
Cells(1, 1) = "US"
'Call Delete_Pictures
If Cells(2, 1) = "PC" Then
Range("BP73:BX87").Copy
With Worksheets("Main")
Set myPic = .Pictures.Paste(Link:=True)
myPic.Left = .Range("Z7").Left
myPic.Top = .Range("Z7").Top
' .Range("Z7").Pictures.Paste(Link:=True).Select
End With
End If
Application.CutCopyMode = False
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)
(此外,我从该线程中获得了一些见识)