合并excel数据和activeXbuttons

我有一个Excelmacros的问题。 我试图将34个不同的excel表合并成一个摘要表。

所有工作表都包含与Macro链接的数据和ActiveXbuttons 。 就像复制粘贴我想要使用macros做确切的操作。

所以在最后的工作表中,我希望数据和button在前面的表中作为输出。

我尝试了下面的代码复制数据,但button不存在和选项卡不正确的顺序。

 Sub MergeAllWorkBook() Dim ws As Worksheet Dim ws2 As Worksheet Dim lRow As Long, lCol As Long, lRow2 As Long Dim rng As Range Dim offsetVal As Long Application.ScreenUpdating = False Sheets("SYNTHESE").Cells.ClearFormats Sheets("SYNTHESE").Cells.ClearContents Sheets("SYNTHESE").Activate offsetVal = 1 For Each ws In Worksheets If ws.Name <> "SYNTHESE" Then With ws lRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row Debug.Print lRow lCol = .UsedRange.Columns(.UsedRange.Columns.Count).Column Debug.Print lCol Set rng = .Range(.Cells(1, 1), .Cells(lRow, lCol)) With rng.Copy End With End With Worksheets("SYNTHESE").Cells(Rows.Count, 1).End(xlUp).Offset (offsetVal,0).PasteSpecial (xlPasteAll) 'offsetVal = offsetVall End If Next ws End Sub 

任何想法如何解决这个问题?

即使复制整个工作表, CopyPasteSpecial都不会复制使用正常Excel接口的ActiveX控件。 因此,在VBA中, RangeWorksheet等对象的相应方法也不会复制ActiveX控件。

当然,ActiveX控件可以从一个工作表拷贝到另一个工作表,所以build议你使用macroslogging器来确定如何复制和粘贴一个控件 – 也就是发现涉及到哪个工作表对象/方法/属性。 一旦你发现了这些,你可能需要进一步发挥,以确保在将控件粘贴到另一个工作表(如“SYNTHESE”)时,确保button位置正确并与正确的macros关联。

macroslogging器可以成为你的朋友,并帮助你理解哪些对象,属性和方法与你想要达到的目标相关,但你需要创造性地使用它,而不是盲目地遵循它生成的笨重的代码。

  Sub MergeAllWorkBook() Dim ws As Worksheet Dim ws2 As Worksheet Dim lRow As Long, lCol As Long, lRow2 As Long Dim rng As Range Dim offsetVal As Long Application.ScreenUpdating = False Sheets("SYNTHESE").Cells.ClearFormats Sheets("SYNTHESE").Cells.ClearContents Sheets("SYNTHESE").Activate offsetVal = 1 For Each ws In Worksheets If ws.Name <> "SYNTHESE" Then With ws lRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row Debug.Print lRow lCol = .UsedRange.Columns(.UsedRange.Columns.Count).Column Debug.Print lCol Set rng = .Range(.Cells(1, 1), .Cells(lRow, lCol)) With rng.Copy End With End With Worksheets("SYNTHESE").Cells(Rows.Count, 1).End(xlUp).Offset (offsetVal,0).PasteSpecial (xlPasteAll) 'offsetVal = offsetVall 

结束如果下一个ws

结束小组

  Sub CopyImages_Controls() Dim sh As Shape Dim ws As Worksheet Dim selRange As Range For Each ws In Worksheets If ws.Name <> "SYNTHESE" Then For Each sh In ws.Shapes sh.copy Sheets("SYNTHESE").Cells(sh.TopLeftCell.Row, sh.TopLeftCell.Column).Activate Worksheets("SYNTHESE").PasteSpecial MsgBox sh.Name & "---" & sh.TopLeftCell.Row Next sh End If Next ws End Sub