【发布时间】:2016-06-14 17:13:05
【问题描述】:
此代码运行,但我需要一种方法来定义变量 x、n 和 c 一次,例如模块范围的变量。提供的示例是“调用”许多过程的更大宏的精简版本。
目前我必须将变量放入每个Sub 中,以便它按需要运行。我尝试使用Public、Private、Dim 等预先声明它们,但n 和c 变量不会在每个Sub 运行后重置为0。因此,变量计数从前一个程序继续执行以下过程,并且我需要在每个子程序运行后重置计数器。 Subs 之外的x = "Minimum"(即带有声明的变量)也不起作用,但对提高效率很有用。
还有:
- 如何简化使用
Call的Main宏。有时我有 50 个订阅者。 - 可以合并这种特定类型的
Sub(此处的 2 个相同,因为我将数据发送到同一个工作表 'Rs' 但只是来自 2 个不同的工作表,'Ts' 和 'BR',在同一个 excel 中文件)
Dim module As Object
Sub Main()
Call Stic1
Call Stic2
End Sub
Sub Stic1()
Dim x As String
Dim n As Integer, c As Integer
x = "Minimum"
Sheets("Ts").Select
Range("A2").Offset(0, 0).Select
Do Until IsEmpty(ActiveCell)
If ActiveCell.Value = x Then
ActiveCell.Offset(0, 1).Copy
Application.Goto (ActiveWorkbook.Sheets("Rs").Range("G2").Offset(n, 0))
ActiveSheet.Paste
Application.CutCopyMode = False
n = n + 1
Application.Goto (ActiveWorkbook.Sheets("Ts").Range("A2").Offset(c, 0))
c = c + 1
Else
Application.Goto (ActiveWorkbook.Sheets("Ts").Range("A2").Offset(c, 0))
c = c + 1
End If
Application.Goto (ActiveWorkbook.Sheets("Ts").Range("A2").Offset(c, 0))
Loop
End Sub
Sub Stic2()
Dim x As String
Dim n As Integer, c As Integer
x = "Minimum"
Sheets("BR").Select
Range("A2").Offset(0, 0).Select
Do Until IsEmpty(ActiveCell)
If ActiveCell.Value = x Then
ActiveCell.Offset(0, 1).Copy
Application.Goto (ActiveWorkbook.Sheets("Rs").Range("I2").Offset(n, 0))
ActiveSheet.Paste
Application.CutCopyMode = False
n = n + 1
Application.Goto (ActiveWorkbook.Sheets("BR").Range("A2").Offset(c, 0))
c = c + 1
Else
Application.Goto (ActiveWorkbook.Sheets("BR").Range("A2").Offset(c, 0))
c = c + 1
End If
Application.Goto (ActiveWorkbook.Sheets("BR").Range("A2").Offset(c, 0))
Loop
End Sub
【问题讨论】:
-
I need a way to define variables x, n and c only once, as say module-wide variables和but the n and c variables don't reset to 0 after each Sub is run是互斥的。如果您想要全局变量,它们将在调用之间保留其内容。如果您希望在每次调用后清除局部变量,则必须每次都将它们声明为本地变量。不知道为什么你甚至试图拥有全局变量 - 只是为了在将它们键入每个子时保存击键,即使以在其他不相关的过程之间引入不必要的依赖关系为代价? -
在不相关的笔记上,您可能喜欢阅读stackoverflow.com/q/10714251/11683。
-
GSerg 谢谢。是的,我正在尝试减小宏的大小以方便 QA。我的模块有时有大约 50 个 Sub,所以希望避免重复这些变量很多次。听起来我做不到。