VBA呼叫功能

时间:2016-06-14 17:13:06

标签: excel-vba macros vba excel

此代码运行但我只需要一种方法来定义变量xnc,就像模块范围的变量一样。提供的示例是一个更大的宏的浓缩版本,“调用”许多过程。

目前我必须将变量放入每个Sub,以便根据需要运行。我尝试使用PublicPrivateDim等预先声明它们,但nc变量不会重置为0在每个Sub运行之后。因此,变量计数继续到先前&的以下过程。我需要计数器在每个子运行后重置。 Subs之外的x = "Minimum"(即声明变量)也不起作用,但对效率有用。

此外:

  • 如何简化使用Main的{​​{1}}宏。有时我有50个子。
  • 可以合并这种特定类型的Call(这里的2是相同的,因为我将数据发送到同一工作表' Rs'但仅来自2个不同的工作表,' Ts& #39;&' BR',在同一个excel文件中)
Sub

1 个答案:

答案 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所说,你可能希望在理解了这一点之后专注于避免选择,这对于宏来说是非常耗时的。