我正在使用
选项显式
在所有模块中,这一个让我抓耳挠腮,也许是在调用方法中,事情会丢失。
读取工作表并将特定数据组合到一个新的工作簿、单个工作表中,变量coldata应增加列,并且它将更新并在工作表中传递回尽可能多的次数(例如,在cols 1-12中复制给定年份的1-12个月,然后在下一年复制月份S 1-12 in cols 13-24等)
调用函数返回一个布尔值(这是随后直接进行的错误检查):
'Attempt to load Total Revenue for the Import Sheet
TotRevLoaded = Application.Run("modGetDataHelpers.loadTotRev", wsImport, rng, colData)
以下是功能的重要部分:
'Sub以加载工作表中所选文件的总收入
Private Function loadTotRev(ByRef wsImport As Worksheet, ByRef rng As Range, ByRef colData As Long) As Boolean
'matchRow is called above and works
Dim k As Integer
For k = 1 To 12
'sets headers for the sheet
wsData.Cells(1, colData) = strYear
wsData.Cells(2, colData) = k
'Copy Total Revenue in to row 3
wsData.Cells(3, colData) = wsImport.Cells(matchRow, 2 + k).Value
colData = colData + 1
Next k
loadTotRev = True 'Success in loading the total rev on sheet
End Function
coldata按预期1-13更新函数,但当离开函数并返回到下一个工作表导入时,它始终是1,因此coldata的值在其引用地址处不变。
这个应该很容易。变量正被转换为byval,一旦离开函数的作用域,修改就会丢失。
我想这可能是因为arg包装(),不是。更改为Sub,如果不分配,可以删除这些内容。
我想这可能是因为作业,不是。改为Sub.
因为它正被传递给一个函数,不是。更改为次公共和私有。
因为调用者和修饰符在不同的模块中,所以不是
在解决方案中,我不希望使用全局变量,也不希望将所有助手函数引入同一个模块范围(模块全局变量)。