gpt4 book ai didi

两个工作表上的 VBA 宏

转载 作者:行者123 更新时间:2023-12-04 21:05:54 31 4
gpt4 key购买 nike

我在 Excel 2003 中有一个 VBA 对象,当通过流数据获得某些值时,它会触发三个简单的宏。它运行良好。我想打开一个重复的工作表,但具有不同的流数据,并在各自的工作表上触发宏。它现在可以使用,但仅适用于我当前选择的工作表。每个工作表中都有对象和宏。

对象监控三个单元格,当第一个单元格被触发时,继续监控下一个单元格,当触发时监控下一个单元格,然后重复。

我会帮助他们同时在各自的电子表格上运行。

这是 VBA 对象:

Private Sub Worksheet_Calculate()

Static oldval1
Static oldval2
Static oldval3

Static LastAction As Integer
' Initial state will be 0, neither Fast nor Slow
Const Fast As Integer = 1
Const Fast2 As Integer = 2
Const Slow As Integer = 3

Application.EnableEvents = False

If Range("I1").Value = "1" And oldval1 <> "1" And LastAction <> Fast Then
PasteFast
LastAction = Fast
ElseIf Range("Q1").Value = "1" And oldval2 <> "1" And LastAction <> Slow Then
PasteFast2
LastAction = Fast2
ElseIf Range("Y1").Value = "1" And oldval3 <> "1" And LastAction <> Slow Then
PasteSlow
LastAction = Slow
End If

oldval1 = Range("I1").Value
oldval2 = Range("Q1").Value
oldval3 = Range("Y1").Value

Application.EnableEvents = True

End Sub

而且,这里有三个宏——它们本质上是相同的——它们从同一个位置复制,但粘贴到不同的位置。 PasteSlow 和 PasteFast 在一个模块上,而 PasteFast2 在第二个模块上(无缘无故)。
Sub PasteSlow()
'
' PasteSlow Macro
'

'
Application.ScreenUpdating = False
Range("G5:G57").Select
Selection.Copy
Range("H5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("K5:K57").Select
Application.CutCopyMode = False
Selection.Copy
Range("L5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
End Sub

Sub PasteFast()
'
' PasteFast Macro
'

'
Application.ScreenUpdating = False
Range("g5:g57").Select
Selection.Copy
Range("P5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("k5:k57").Select
Application.CutCopyMode = False
Selection.Copy
Range("T5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
End Sub


Sub PasteFast2()
'
' PasteFast2 Macro
'

'
Application.ScreenUpdating = False
Range("g5:g57").Select
Selection.Copy
Range("x5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("k5:k57").Select
Application.CutCopyMode = False
Selection.Copy
Range("ab5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").Select
End Sub

对于任何代码格式错误,我深表歉意。

最佳答案

您的代码不起作用的原因在于您使用 Range 函数的方式。单独使用 Range 是 Application.Range 的缩写。

Excel 帮助文件对此进行了说明:

When used without an object qualifier, this property is a shortcut for ActiveSheet.Range (it returns a range from the active sheet; if the active sheet isn’t a worksheet, the property fails).



将其保存在 Worksheet_Calculate事件将其锁定到给定的工作表。

我建议移动 Worksheet_Calculate 中的代码将感兴趣的单元格作为参数放入单独函数中的模块中。这将允许您干燥您的代码,并允许您调用 Worksheet_Activate 中的函数。事件。

如果您不想重写代码,只需调用 Worksheet_Calculate进入 Worksheet_Activate事件:
Private Sub Worksheet_Activate()
Worksheet_Calculate
End Sub

这将在输入工作表时启动您的代码。

关于两个工作表上的 VBA 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19302080/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com