首页 > 解决方案 > 在范围宏的一部分中覆盖任何要复制到 0 的值

问题描述

这是应从一个打开的工作簿 (WorkbookA) 复制到另一个打开的工作簿 (WorkbookB) 的代码:

Option Explicit

Dim shRange1 As String
Dim shRange2 As String
Dim shRange3 As String
Dim wrk As Workbook
Dim inx As Integer


Public Sub cPasteToWorkbookB()

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Calculation = xlAutomatic
ThisWorkbook.Date1904 = False
ActiveWindow.View = xlNormalView

For inx = 2 To 6

    chooseInx

    ThisWorkbook.Worksheets(inx).Range(shRange1).Copy
    
    findOpenWorkbookB
    
    ActiveWorkbook.Worksheets(inx).Range(shRange1).PasteSpecial Paste:=xlPasteValues
    
    ThisWorkbook.Worksheets(inx).Range(shRange2).Copy
    
    findOpenWorkbookB
    
    pasteShRange3


Next inx
    
Set wrk = Nothing

Application.ScreenUpdating = True
Application.EnableEvents = True
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
ThisWorkbook.Date1904 = False
Application.StatusBar = False

End Sub

对于不同工作表中的范围,它具有以下功能:

Function chooseInx()

Select Case inx

    Case 2:
    shRange1 = "C6:S17"
    shRange2 = "K24:L27"
    shRange3 = "C24"
    
    Case 3:
    shRange1 = "C6:W14"
    shRange2 = "K21:L23"
    shRange3 = "C21"
    
    Case 4:
    shRange1 = "C6:S14"
    shRange2 = "K21:L23"
    shRange3 = "C21"
    
    Case 5:
    shRange1 = "C6:S14"
    shRange2 = "K21:L23"
    shRange3 = "C21"
    
    Case 6:
    shRange1 = "C6:U14"
    shRange2 = "K21:L23"
    shRange3 = "C21"

End Select

End Function

代码完成了它的工作,但对于这一部分:

Case 5:
shRange1 = "C6:S14"

宏似乎仅在“P6:P14”范围内将任何值更改为 0(这不是错字),然后将 0 粘贴到 WorkbookB。当我使用 F8 浏览宏时不会发生这种情况 - 然后我得到了两个工作簿中最初的值。对于案例 4,它可以完美运行,尽管范围完全相同。

这是浏览所有打开的工作簿以搜索 WorkbookB 的功能:

Function findOpenWorkbookB()
For Each wrk In Workbooks
    If InStr(wrk.Name, "WorkbookB") > 0 Then
    wrk.Worksheets(inx).Activate
    Exit For
End If
Next
End Function

为什么会有这样的结果?为什么它会覆盖应该只复制的部分?我很难理解这个过程中发生了什么,所以我可能不会像我想要的那样与这篇文章进行交流。欢迎任何评论,我会相应地调整问题。

我试图在不同的步骤(复制、粘贴和 findOpenWorkbookB 函数中)稍微减慢宏,但无济于事。

以下是 shRange1 供您参考,来自案例 5 中的受影响列 P,其中隐藏了敏感数据:在此处输入图像描述

在右侧的灰色单元格中是公式,来自列 Q 和 R 的公式只是将左侧同一行中的一些单元格相加,最右边的一个在屏幕上可见。没有一个公式涉及有问题的 P 列。

标签: excelvba

解决方案


You most likely have formulas that evaluate to 0 or "" in range P6:P14. Either delete the formulas or copy the formatting by changing Paste:=xlPasteValues to Paste:=xlPasteValuesAndNumberFormats.


推荐阅读