【问题标题】:Copying Excel sheet content to a new sheet does not copy VBA Form controls in Excel 2007将 Excel 工作表内容复制到新工作表不会复制 Excel 2007 中的 VBA 表单控件
【发布时间】:2015-01-08 20:45:02
【问题描述】:

我创建了一个 Excel 工作簿,它根据在主选项卡中所做的选择“生成”新表单(选项卡)。背景:我隐藏了我创建的预定义选项卡,并且基于在主选项卡中所做的选择,我的 VBA 代码将复制特定隐藏选项卡中的内容并将内容粘贴到通过 VBA 自动创建的新选项卡。具有粘贴内容的新选项卡还包含一个表单控件(按钮)。

在 Excel 2010 及更高版本中一切正常,但在 Excel 2007 中,我粘贴的内容选项卡中缺少表单按钮。我找不到我的代码有任何问题,也无法确定为什么按钮也没有被复制。

检查工作表是否退出的代码,如果没有,则创建一个新选项卡并将内容从隐藏选项卡复制到新创建的选项卡。

我的代码的哪一部分与 Excel 2007 不兼容,我该如何解决这个问题?

Sub NewWorkSheetProcess(ByVal b As String)

Dim numLines As Integer
Dim requestType, clientNumber, clientName, processType, screenName, ProcessName

requestType = Sheets("FrontPage").Range("c9")
clientNumber = Sheets("FrontPage").Range("c7")
clientName = Sheets("FrontPage").Range("c5")
processType = Sheets("FrontPage").Range("c11")
screenName = Sheets("FrontPage").Range("c13")
ProcessName = Sheets("FrontPage").Range("c15")

    If Not SheetExists(b) Then

        Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = b
        Sheets("MainProcess").Cells.Copy Worksheets(b).Range("A1")
        Worksheets(b).Cells(5, 3).Value = ProcessName
        Worksheets(b).Cells(7, 3).Value = clientName
        Worksheets(b).Cells(8, 3).Value = processType
        Worksheets(b).Cells(6, 3).Value = screenName
        Worksheets(b).Cells(9, 3).Value = Worksheets(b).Name

    End If
    If Worksheets(b).Name = "Modify Process" Then
        MsgBox "Please ensure to highlight/notate all required configuration changes. -Thank you!", VbMsgBoxStyle.vbInformation, "Courtesy Message"
    End If
End Sub

更新:我尝试在我的副本之前添加Application.CopyObjectsWithCells = True,但仍然无法正常工作。

【问题讨论】:

    标签: excel excel-2007 excel-2013 vba


    【解决方案1】:

    添加

    Application.CopyObjectsWithCells = True
    

    在运行Copy之前

    【讨论】:

    • 谢谢,我明天将在另一台机器上测试它,因为我没有安装 Office 2007。如果可行,我会接受你的回答。
    • 我让某人在他们的机器上使用 Office 2007 进行了测试,但仍然没有出现表单按钮。我发布的原始代码似乎仅适用于 Office 2010 及更高版本。还有其他想法吗?下面是我添加的一段代码: Application.CopyObjectsWithCells = True Sheets("MainProcess").Cells.Copy Worksheets(b).Range("A1")
    • 这在 XL2007 中一直对我有用(但我现在是 2010 年所以无法测试)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多