使用workbook_sheetchange事件使行范围内的数值为负数



我正在excel中创建预算,我已经复制并粘贴了一整年的月度预算大纲。某些支出在本工作簿的多张工作表中都在同一行。我想这样做,每当在这些行的单元格中输入数值时,它就会立即变为负值。

这些行中有非数字文本,所以我希望vba只在那些有数字的行中查找单元格。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Rows("22:52")) Is Nothing Then 'VBA change event for all sheets
Dim rng As Range
For Each rng In Intersect(Target, Rows("22:52"))
If Application.WorksheetFunction.IsNumber(Rows("22:52")) Then
If rng.Value > 0 Then c.Value = 0 - c.Values
End If
End If
Next rng
End Sub

我得到的错误是如果没有块如果结束。

我想让它在这些行中的单元格中输入数值时,它会立即变为负值。

这就是你正在尝试的吗?

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error GoTo Whoa

Application.EnableEvents = False

Dim aCell As Range

If Not Intersect(Target, Rows("22:52")) Is Nothing Then
For Each aCell In Target
If aCell.Value2 > 0 Then aCell.Value = -1 * aCell.Value2
Next aCell
End If

Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub

注意:如果您计划更改未激活的工作表的值,则必须按照Tim在上述评论中提到的操作。例如,如果Sheet1处于活动状态,并且您希望写入Sheet2

更改

If Not Intersect(Target, Rows("22:52")) Is Nothing Then

If Not Intersect(Target, Sh.Rows("22:52")) Is Nothing Then

相关内容

  • 没有找到相关文章

最新更新