excel - 在范围宏的一部分中覆盖任何要复制到 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 列。
解决方案
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
.
推荐阅读
- python - 在 IBM i 上运行 Flask 应用程序会导致错误“无法启动新线程”
- python-3.x - 如何通过自定义标识符选择硒中的元素
- r - R-没有分类变量的多元线性回归机器学习
- javascript - 在渲染组件之前只调用一次 Hook (Meteor/React/Apollo/Graphql)
- typescript - 使用 Typescript 和 React 三纤维的着色器
- angular - 使用 Angular 和 bootstrap 5 beta 找不到 VS 代码 CSS 类选择器
- eslint - 配置 Rider 以在解决方案工具窗口中的错误中显示 ESLint 错误/警告
- python - 有没有办法在熊猫中进行滚动排名?
- javascript - 如何从 require.context 获取完整路径?
- python - 在同一个 shell 中运行 python 文件