此代码运行但我只需要一种方法来定义变量x
,n
和c
,就像模块范围的变量一样。提供的示例是一个更大的宏的浓缩版本,“调用”许多过程。
目前我必须将变量放入每个Sub
,以便根据需要运行。我尝试使用Public
,Private
,Dim
等预先声明它们,但n
和c
变量不会重置为0
在每个Sub
运行之后。因此,变量计数继续到先前&的以下过程。我需要计数器在每个子运行后重置。 Subs之外的x = "Minimum"
(即声明变量)也不起作用,但对效率有用。
此外:
Main
的{{1}}宏。有时我有50个子。Call
(这里的2是相同的,因为我将数据发送到同一工作表' Rs'但仅来自2个不同的工作表,' Ts& #39;&' BR',在同一个excel文件中)Sub
答案 0 :(得分:0)
也许您正试图在模块中模仿'x''n'和'c'的Static行为?这可以节省您的时间,而不是将其声明为公共
静态变量保留它们的值(与Dim相反)甚至sub结束(但是,如果你调试然后停止它们会重置),你也可以组合Public Static。
修改强>
整数被“弃用”,你可以google Integer vs Long看看为什么。
Dim module As Object
Public x As String
Public n As Long
Public c As Long
Sub Main()
Call Stic1
Call Stic2
End Sub
Sub Stic1()
Call ResetVariables
x = "Minimum"
Sheets("Ts").Select
Range("A2").Offset(0, 0).Select
....
Sub ResetVariables
x = vbNullString
n = 0
c = 0
End Sub
没有办法简化“通话”,但是,对于我能阅读的内容,问题是你在这里有“镜像潜艇”,你可能想看看this.
如果工作表是可变的,为什么不呢?
Sub Stic(WhatSheet as String)
Dim x as String: x = "Minimum"
Sheets(WhatSheet).Select
...
'then
Sub Main()
Call Stic("Ts")
Call Stic("BR")
....
你只有一个子(而不是每张表50),其中要执行的变量位置是工作表(一切都相同,只是工作表是一个变量)。在你的主要是的,没有别的办法,只能打电话给每张纸(或者如果你有什么定义什么样的纸张将被执行,哪些纸张不是你可以做一个For循环)
Sub Main
Dim WSheetInBook As Worksheet
For Each WSheetInBook In ActiveWorkbook.Worksheets
Call stic(WSheetInBook)
Next WSheetInBook
End Sub
Sub stic(WhatSheet As Worksheet)
x = "Minimum"
WhatSheet.Select
Range("A2").Offset(0, 0).Select
...
PS:正如GSerg所说,你可能希望在理解了这一点之后专注于避免选择,这对于宏来说是非常耗时的。