我正在尝试根据第三个单元格的内容在 Excel 中的两个单元格之间交换内容。因此,我在 Excel 中有一列 - 假设为 C 列。我想根据 C 列中相应单元格中是否有“S”来交换 A 列和 B 列中相应单元格的值。我不是 VB 专家,但我有这两个宏,我正在尝试重新处理它们。第一个宏在 Sheet 模块中,如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("C1"), Target) Is Nothing Then
If IsNumeric(Target.Value) And Target.Value = "S" Then
Call swap
End If
End If
End Sub
第二个在标准模块中,如下所示:
Sub swap()
Dim cellVal
cellVal = ActiveCell.Value
ActiveCell.Value = ActiveCell.Offset(0, 1).Value
ActiveCell.Offset(0, 1).Value = cellVal
End Sub
由于某种原因,它无法正常工作。有人能帮我吗?我认为这是因为我在第一个宏中有“.Count”,而我正在寻找“S”,但我不知道要将其更改为什么。任何帮助都将不胜感激。
答案1
嗯,我不确定你为什么要支票Target.Cells.Count
,但如果你需要的话我会把它留在里面。
我在您的代码中看到的主要问题是,您正在检查 C 列的值是否为数字值,但您想要的是字符串。因此,IsNumeric(Target.Value)
当您在 C 列中输入“S”时,您的代码始终返回 false。所以我已经将其删除了。
以下代码适用于整个 C 列:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then
Exit Sub
End If
If Not Intersect(Range("$C:$C"), Target) Is Nothing Then
If Target.Value = "S" Then
swap Target
End If
End If
End Sub
Sub swap(rng As Range)
Dim cellVal As String
cellVal = rng.Offset(0, -2).Value
rng.Offset(0, -2).Value = rng.Offset(0, -1).Value
rng.Offset(0, -1).Value = cellVal
End Sub