excel - 如何在excel VBA中组合两个不同列的两个不同请求
问题描述
我想要一个自动将给定列乘以设定数字的宏。这个数字对于每一列都是不同的。到目前为止,我只能将它应用于一列。我不能为任何其他人完成它:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target.Value = Target.Value * 300
Application.EnableEvents = True
If Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
Application.EnableEvents = False
Target.Value = Target.Value * 500
Application.EnableEvents = True
End Sub
解决方案
或许是这样的:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
On Error GoTo SafeExit
Application.EnableEvents = False
Dim rng As Range
Set rng = Intersect(Target, Me.Range("B:B")
If Not rng Is Nothing Then
rng.Value = rng.Value * 300
End If
Set rng = Intersect(Target, Me.Range("C:C"))
If Not rng Is Nothing Then
rng.Value = rng.Value * 500
End If
SafeExit:
Application.EnableEvents = True
End Sub
编辑:如果您有两个以上的列(并且它们是连续的),这可能是一种更好的方法:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("B:F")) Is Nothing Then
On Error GoTo SafeExit
Application.EnableEvents = False
Dim rng as Range
For Each rng In Intersect(Target, Me.Range("B:F"))
Dim multiplier As Long
Select Case rng.Column
Case 2 ' column B
multiplier = 300
Case 3 ' column C
multiplier = 500
Case 4 ' column D
multiplier = 400
Case 5 ' column E
multiplier = ...
Case 6 ' column F
multiplier = ...
End Select
If IsNumeric(rng.Value) Then
rng.Value = rng.Value * multiplier
End If
Next
End If
SafeExit:
Application.EnableEvents = True
End Sub
推荐阅读
- tortoisegit - 同步对话框显示了一些提交,但 git 声称远程分支是最新的
- angular - 为将 karma.conf.js 修改为幻像的 Angular 应用程序运行单元测试无法识别打字稿规范文件
- c++ - 具有默认成员值和不完整类型的模板扩展的编译器差异
- python - 如何将 NFS 共享挂载到 JupyterHub 中的衍生容器?
- python - 如何在字典中使用不同数字的键的多个值?
- c# - 利用资源字典中的 WindowStyle 并将按钮添加到应用程序中的 ControlPresenter
- r - 基于 R 中另一个表的值在表中首次出现
- azure - Microsoft Bot Framework - 从 Azure 应用服务调用外部 Web API
- python - 如何使用库文件作为独立文件创建 setup.py
- activemq-artemis - 在 Artemis Webconsole 中设置标题的问题