我在从一个 Excel 文件复制/粘贴到另一个 Excel 文件时遇到了问题。
我有一个工作簿,里面有用于输入数据的表格。最近,我添加了一个子程序,用于自动将输入单元格的首字母大写。
Private Sub Worksheet_Change(ByVal Target As Range)
' Code goes in the Worksheet specific module
Dim rng As Range
' Set Target Range, i.e. Range("A1, B2, C3"), or Range("A1:B3")
Set rng = Target.Parent.Range("B11:C47")
' Only look at single cell changes
If Target.Count > 1 Then Exit Sub
' Only look at that range
If Intersect(Target, rng) Is Nothing Then Exit Sub
' Action if Condition(s) are met (do your thing here...)
Application.EnableEvents = False
Target.Value = UCase(Application.WorksheetFunction.Substitute(Target.Value, " ", ""))
Application.EnableEvents = True
End Sub
现在,当我复制并粘贴包含空单元格的单元格区域(例如:B2:B12)到同一文件的旧版本时没有子目录中,一些空白单元格会导致公式问题。如果激活(双击或删除)粘贴的空白单元格,此问题就会消失。
我无法修改文件的旧版本,因为它已分发给多人,不可能全部纠正。
这似乎是随机发生的,因为并非所有空单元格都会导致此问题,而且问题并不总是发生在相同的单元格中。我尝试使用 =CODE()、=VALUE()、=ISTEXT()、=ISNUMBER() 来查找单元格中实际的内容,但我无法获得任何值,只是单元格是文本(因为所有输入单元格的格式都是文本)。
尝试回答可能出现的任何问题:
复制/粘贴值等...会导致同样的问题
在每个文件内复制/粘贴都没有问题
从旧文件转到新文件有效
除了每次进入并“删除”所有“空”单元格中的“值”之外,有没有办法防止这些空的粘贴单元格在旧文件中出现并需要激活?我假设问题出在子文件中,因为此问题的出现并不存在于该文件的先前版本中。
编辑 其中一张表的全部代码:
Private Sub Worksheet_Activate()
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
End Sub
Private Sub Worksheet_Calculate()
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' Code goes in the Worksheet specific module
Dim rng As Range
' Set Target Range, i.e. Range("A1, B2, C3"), or Range("A1:B3")
Set rng = Target.Parent.Range("B11:C47")
' Only look at single cell changes
If Target.Count > 1 Then Exit Sub
' Only look at that range
If Intersect(Target, rng) Is Nothing Then Exit Sub
' Action if Condition(s) are met (do your thing here...)
Application.EnableEvents = False
Target.Value = UCase(Application.WorksheetFunction.Substitute(Target.Value, " ", ""))
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Deactivate()
End Sub
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
End Sub
Private Sub Worksheet_PivotTableAfterValueChange(ByVal TargetPivotTable As PivotTable, ByVal TargetRange As Range)
End Sub
Private Sub Worksheet_PivotTableBeforeAllocateChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long, Cancel As Boolean)
End Sub
Private Sub Worksheet_PivotTableBeforeCommitChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long, Cancel As Boolean)
End Sub
Private Sub Worksheet_PivotTableBeforeDiscardChanges(ByVal TargetPivotTable As PivotTable, ByVal ValueChangeStart As Long, ByVal ValueChangeEnd As Long)
End Sub
Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
End Sub
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
答案1
问题出在新文件上,而不是子文件上。其他人(共享主文件)显然在一些单元格中留下了数据。我不确定为什么这不会在它所在的工作表上导致错误,但在复制到旧文件后却导致错误。数据不是未显示的空格或 0,因此公式不知道如何处理它并返回错误。清除新文件上单元格的内容并保存解决了该问题。