【问题标题】:Copy excel formulas without referencing previous worksheet in vb.net复制 excel 公式而不参考 vb.net 中的先前工作表
【发布时间】:2016-08-13 06:31:11
【问题描述】:

我目前将整个工作表从文件 A 复制到文件 B。一些工作表只需要复制值而不需要公式。有 1 个特定的工作表,我需要将格式与公式一起复制,但我不希望公式引用原始文件。我希望它引用新文件中的工作表。我如何复制工作表/公式而不引用原始文件。

下面我有复制工作表的代码,然后将公式只替换为一次性工作表的值。

  xlWorksheetSource = xlWorkbookSource.Sheets(sheet.Name)
                 xlWorksheetSource.Copy(After:=xlWorkbookDestination.Worksheets(xlWorkbookDestination.Worksheets.Count))

                xlWorkDestSource = xlWorkbookDestination.Worksheets(xlWorkbookDestination.Worksheets.Count)
                ws = xlWorkDestSource

With ws.UsedRange
                   .Copy()
                    .PasteSpecial(Paste:=XlPasteType.xlPasteValues, _
                    Operation:=XlPasteSpecialOperation.xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False)
                    xlApp.CutCopyMode = False
 End With

尝试您的解决方案粘贴公式时出错

  .Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Me.Range("BE4")) Is Nothing Then
BE4 = Target.Value

If BE4 = "X" Then
    Worksheets("Invoice 2").Visible = xlSheetVisible
    Exit Sub
End If

If BE4 = "" Then
    Worksheets("Invoice 2").Visible = xlSheetVeryHidden
    Exit Sub
End If

如果结束

【问题讨论】:

  • 如果引用原始文件的公式也引用了您复制到新文件的工作表,您可以通过将所有相关工作表复制到一个副本中来解决您的问题。我不确定 vb.net 等价物是什么,但在 VBA 中它会类似于 xlWorkbookSource.Sheets(Array("Sheet4", "Sheet2", "Sheet1")).Copy After:=xlWorkbookDestination.Worksheets(xlWorkbookDestination.Worksheets.Count))

标签: vb.net excel


【解决方案1】:

将PasteSpecial的第一个参数值改为xlPasteFormulas

.PasteSpecial(Paste:=XlPasteType.xlPasteFormulas, _     
Operation:=XlPasteSpecialOperation.xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False)
                xlApp.CutCopyMode = False

【讨论】:

  • 我试过了,但由于某些原因,当它尝试这样做时它会崩溃......并且我收到调试错误消息运行时错误 13 类型不匹配。我点击调试,它说我粘贴在原始帖子中的以下错误消息
【解决方案2】:

这是VBA中的一种方法,希望您可以轻松地在.Net中转换,我这台机器上没有VisualStudio,所以无法编写VB.Net。另外我对 VB.Net 不太擅长

您首先将所有公式加载到数组中(它也会加载值,以防混合单元格),然后在数组中更新工作表名称(或 wb 名称或您想要的任何内容),然后将数组转储到目的地。然后再次复制并粘贴特殊格式。

Sub test()

    Dim arr

    Dim strSheetFrom        As String
    Dim strSheetTo          As String

    Dim lctrRow             As Long
    Dim lctrCol             As Long

    strSheetFrom = "Sheet3"
    strSheetTo = "Sheet2"


    '/ First: Update your formulas in array and simply dump them.
    arr = Sheet2.UsedRange.Formula

    For lctrRow = LBound(arr, 1) To UBound(arr, 1)
        For lctrCol = LBound(arr, 2) To UBound(arr, 2)
            arr(lctrRow, lctrCol) = Replace(arr(lctrRow, lctrCol), strSheetFrom, strSheetTo)
        Next
    Next

    Sheet1.Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr

    '/ Now formats
    Sheet2.UsedRange.Copy
    Sheet1.Cells(1, 1).PasteSpecial xlPasteFormats
    Application.CutCopyMode = False

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多