我编写了4个宏来执行操作,但是由于某些宏会在两个工作簿之间切换,因此用户需要2个输入才能确保使用了正确的文件。我只能访问其中一些文件,但是我知道最终我将可以访问其余35个文件。如果没有输入,则必须手动更改宏代码中的文件名,但是我不想这样做,所以我使用了输入。但是,既然我具有正确格式的所有文件,那么我尝试使用一个单独的宏,该宏在单独的工作簿中具有其他文件的列表,然后打开这些文件并执行这些宏,但是这需要输入a很多。所以现在,我试图消除对输入的需求。但是我不熟悉公共变量,对其他子例程的调用有些熟悉。
我的设置是这个:
option explicit
public current as string
Sub master_macro
dim i as integer
dim path as string
dim wb as workbook
dim sht as worksheet
set wb = workbooks("name.xlsx")
set sht = wb.worksheets(1)
path = "C:\xxx\"
wb.activate
for i = 1 to 20
currun = sht.cells(i,1).value 'this takes the value from the separate workbooks that has the file names
full_currun = currun & ".xlsx"
with workbooks.open(path & full_currun)
.activate
call blanks
call lookup
call transfer
call combine
.save
.close
end with
next i
最后2个宏在2张纸之间切换。因此,在这些宏中,尽管名称不同,但仍会在输入框内生成currun。
nam = inputbox("yadda yadda")
set wb = workbooks(nam & ".xlsx")
我正在尝试将在主宏中定义的当前值传递给macro3和macro4。
[您看到显示Sub master_macro
的部分吗?您在此处声明的是procedure,这基本上是一个通用术语,用于描述“一个运行时会执行某些操作的自包含代码块”。过程声明具有三个主要组成部分:
Sub
所做的;您是说这是一个subroutine,它与function Function
不同,因为它不返回值最后一部分是您缺少解决此问题的工具。 (在模块B中)声明了macro3
和macro4
,就像这里的master_macro
。如果他们需要知道当前值是什么,那么只需在其声明中添加(ByVal currun As String)
。当从另一个过程调用它们时,就像它们在master宏中一样,它们将期望接收一个字符串。从以下位置更改主宏中的两行:
Call macro3
Call macro4
to
Call macro3(full_currun)
Call macro4(full_currun)
以及macro3和macro4会将full_currun的值存储在自己的内部变量currun中,以根据需要使用。