【发布时间】:2018-10-16 09:50:51
【问题描述】:
我想将工作表中的一列更改为负数,因为该列表示“缺货”。
我从以下链接获得了代码,它将给定范围的值更改为负数:
https://www.extendoffice.com/documents/excel/677-excel-change-positive-numbers-to-negative.html
但问题是这需要用户的交互。
代码:
Sub ChangeToNegative()
'Updateby20131113
Dim rng As Range
Dim WorkRng As Range
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Set WorkRng = WorkRng.SpecialCells(xlCellTypeConstants, xlNumbers)
For Each rng In WorkRng
xValue = rng.Value
If xValue > 0 Then
rng.Value = xValue * -1
End If
Next
End Sub
然后我发现将代码放入工作表本身并将子命名为Change(ByVal Target As Range),这将在您使用时更新所选范围。
代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Dim WorkRng As Range
On Error Resume Next
Set WorkRng = Application.Selection
Set WorkRng = WorkRng.SpecialCells(xlCellTypeConstants, xlNumbers)
If Target.Address = WorkRng Then
For Each rng In WorkRng
xValue = rng.Value
If xValue > 0 Then
rng.Value = xValue * -1
End If
Next
End If
End Sub
这很好用,但这意味着无论我点击哪个单元格并输入数字,它都会是负数。
所以我不想使用Application.Selection,而是想给它一个特定的范围——但可能会改变。
所以只有当单元格
C5:C143中有文本时,单元格F5:F143才应该是负数如果我删除
C5:C143之间的任何单元格,则范围应相应更新。
也许该范围可能基于C4 和C144 中的文本 - 所以F 列中这两个文本单元格之间的任何内容都是负数?
【问题讨论】:
-
作为工作表更改事件的第一步,您必须检查您正在编辑的单元格是否在所需范围内
-
不确定您的代码是如何工作的 -
Target.Address是一个字符串,而WorkRng是一个范围。WorkRng将引用包含数字的所有单元格,而Target.Address将是您更改的选择中的任何单元格的地址。