Excel Sheet VBA代码适用于一个但不适用于其他代码

时间:2017-03-30 11:35:00

标签: excel vba excel-vba

我一直在研究一块VBA代码,这让我感到非常痛苦。我想弄明白:

Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim numCell As Range

If Target.Count <> 1 Then Exit Sub

If Target.Value = "+" Then
    Set numCell = Target.Offset(0, -1)
    numCell.Select
    numCell.Value = numCell.Value + 1
ElseIf Target.Value = "-" Then
    Set numCell = Target.Offset(0, 1)
    numCell.Select
    numCell.Value = numCell.Value - 1
End If
    End Sub

处理多个不同的Excel工作表。就目前而言,在一张纸(原版)上它完美地运作。但随后我将第一张纸的布局复制粘贴到下一张,现在+和 - 在新纸张上不再有效。

即使将“Sub”设为私有,它仍然不会改变任何内容。

这是一个简单的加法和减法代码,每张表上的代码都应该以相同的方式工作。

感谢您提供任何建议!

2 个答案:

答案 0 :(得分:0)

如果将此代码复制到另一个工作表模块,它应该可以工作。 打开一个空白工作簿,并在多个工作表的模块上添加此代码,以查看它是否适用于新工作簿。

虽然如果要为工作簿中的所有工作表实现此代码,而是将此代码放在特定工作表模块上,请将其放在ThisWorkbook Module上。

代码如下......

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim numCell As Range

If Target.Count <> 1 Then Exit Sub

If Target.Value = "+" Then
    Set numCell = Target.Offset(0, -1)
    numCell.Select
    numCell.Value = numCell.Value + 1
ElseIf Target.Value = "-" Then
    Set numCell = Target.Offset(0, 1)
    numCell.Select
    numCell.Value = numCell.Value - 1
End If

End Sub

答案 1 :(得分:0)

Worksheet_SelectionChange函数必须放在您想要它的每个工作表对象中。我还担心你在选择更改触发的sub中导致选择更改 - 要求无限循环?!

在每张表中包含此子

Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count <> 1 Then Exit Sub      
    addsubtract Target
End Sub

将此子文件包含在一个模块

要创建模块,请转到VBA编辑器中的“插入&gt;模块”。

Sub addsubtract(Target as Range)
    Dim numCell As Range
    If Target.Value = "+" Then
        Set numCell = Target.Offset(0, -1)
        numCell.Value = numCell.Value + 1
    ElseIf Target.Value = "-" Then
        Set numCell = Target.Offset(0, 1)
        numCell.Value = numCell.Value - 1
    End If      
End Sub