代码之家  ›  专栏  ›  技术社区  ›  SandPiper

使用shape.copy时Excel VBA运行时错误-2147221040

  •  0
  • SandPiper  · 技术社区  · 7 年前

    我正在试验这里找到的一些代码( https://analystcave.com/excel-image-vba-save-range-workbook-image/ )它获取选定的区域,复制/粘贴为图片,复制将图片粘贴为图表,复制/粘贴为图片的图表区域并将其保存为JPG。此处编码:

    Sub SelectedRangeToImage()
    
        Dim tmpChart As Chart, n As Long, shCount As Long, sht As Worksheet, sh As Shape
    
        Dim fileSaveName As Variant, pic As Variant
    
        'Create temporary chart as canvas
    
        Set sht = Selection.Worksheet
    
        Selection.Copy
    
        sht.Pictures.Paste.Select
    
        Set sh = sht.Shapes(sht.Shapes.Count)
    
        Set tmpChart = Charts.Add
    
        tmpChart.ChartArea.Clear
    
        tmpChart.Name = "PicChart" & (Rnd() * 10000)
    
        Set tmpChart = tmpChart.Location(Where:=xlLocationAsObject, Name:=sht.Name)
    
        tmpChart.ChartArea.Width = sh.Width
    
        tmpChart.ChartArea.Height = sh.Height
    
        tmpChart.Parent.Border.LineStyle = 0
    
        'Paste range as image to chart
    
        sh.Copy
    
        tmpChart.ChartArea.Select
    
        tmpChart.Paste
    
        'Save chart image to file
    
        fileSaveName = Application.GetSaveAsFilename(fileFilter:="Image (*.jpg), *.jpg")
    
        If fileSaveName <> False Then
    
          tmpChart.Export Filename:=fileSaveName, FilterName:="jpg"
    
        End If
    
        'Clean up
    
        sht.Cells(1, 1).Activate
    
        sht.ChartObjects(sht.ChartObjects.Count).Delete
    
        sh.Delete
    
    End Sub
    

    当我使用调试器单步执行代码时,代码工作得很好,但是当我试图运行整个宏时,它在第行弹出以下错误 sh.Copy :

    运行时错误_-2147221040(800401d0_):

    对象形状的方法复制失败

    但是,如果我选择调试,然后单步执行或者继续不间断地从那里运行,它将工作。当我尝试运行此错误,但当我单步执行它时却没有,是什么导致了此错误?

    0 回复  |  直到 7 年前
    推荐文章