循环浏览包含图形的工作表,将两个 ChartObject 复制到另一个工作表中 [已关闭]

Loop through worksheets containing graphs, copy both ChartObjects into another sheet [closed]

提问人:TheEndUK 提问时间:3/4/2020 最后编辑:halferTheEndUK 更新时间:11/26/2021 访问量:94

问:


想改进这个问题吗?通过编辑这篇文章来更新问题,使其仅关注一个问题。

3年前关闭。

在我的工作簿中,我有多个工作表,每个工作表包含 2 个图形——我想遍历这些工作表,将 ChartObjects(1) 和 ChartObjects(2) 并排复制到另一个名为“Graphs”的工作表中。

为了澄清,包含 2 个图形的工作表被命名为“John”、“Paul”、“George”和“Ringo”。我想首先选择工作表“John”,将 ChartObjects(1) 复制到“Graphs”的单元格 A3 中,然后将 ChartObjects(2) 复制到“Graphs”的单元格 K3 中,接下来我想选择“Paul”并将 ChartObjects(1) 复制到“Graphs”的单元格 A24 中,将 ChartObjects(2) 复制到“Graphs”的单元格 K24 中,依此类推“George”、“Ringo”等。

我已经研究了这个问题,但找不到将 2 个 ChartObjects 从一张纸并排复制到另一张纸上的解决方案,因此我目前正在使用一种代码,该代码只是依次选择每个工作表并复制/粘贴图表 - 我相信有更好的方法,不幸的是,它超出了我有限的 VBA 技能。

注意

按照要求,我已经更新了我原来的问题,@Harassed爸爸好心地提供了解决方案。

VBA 循环 Office365 Excel 图表

评论


答:

0赞 Harassed Dad 3/4/2020 #1
Sub example()
Const offsetrows = 26 ' numbers of rows to move down between copies
Dim ws As Worksheet
Dim c As ChartObject
Dim target As Worksheet
Set target = Worksheets("graphs") 'sheet to copy to
Dim t As Range
Set t = target.Range("a1") 'first cell to copy to
For Each ws In Worksheets
     Select Case ws.Name
        Case "graphs"
           'skip this sheet
        Case Else
            For Each c In ws.ChartObjects
               c.Copy
               t.PasteSpecial xlPasteAll
               Set t = t.Offset(offsetrows, 0)
 'edited code here===============
                If t.column = 1 then     'if it was in A then
                   set t = t.offset(-offsetrows,4)    Go to D
                 else
                    set t = t.offset(0,-4)     'if D then A
                 end if
     '=======================================
            Next c
      End Select
Next ws
End Sub

评论

0赞 Hrothgar 3/4/2020
那太快了!
0赞 TheEndUK 3/4/2020
@Harassed 爸爸:非常感谢你如此迅速的回应——这很有效。我可以再补充一个问题吗?如果我每张纸有 2 个图形,有没有办法将 ChartObjects(1) 复制到 A1,将 ChartObjects(2) 复制到 D1,依此类推?再次感谢 TE。
0赞 BigBen 3/4/2020
@TheEndUK - 如果这回答了您的问题,请确保单击左侧的复选标记以接受...然后,新问题被问到一个新问题:-)
0赞 TheEndUK 3/4/2020
@Harassed 爸爸对不起,你的意思是我应该把它作为一个全新的问题发布,还是在同一线程中继续我的查询?非常感谢