【发布时间】:2017-07-06 07:04:33
【问题描述】:
我有函数 testFunc 将Range 作为参数,循环遍历其单元格并对其进行编辑。我有子 testSub 可以测试 两种情况:首先是当我将 当前工作簿的范围 传递给 testFunc通过:1。变量Range 2. 作为参数testFunct(...Range("A1:A16"))。
第二种情况是当我打开另一个工作簿并执行相同操作时 - 将其中一个 worksheets 范围传递给 testFunc 直接或通过变量。
Function testFunc(aCol As Range)
Dim i As Integer
i = 0
For Each cell In aCol
MsgBox (cell.Value)
cell.Value = i
i = i + 1
Next
testFunc = i
End Function
Sub testSub()
Dim origWorkbook As Workbook
Set origWorkbook = ActiveWorkbook
Dim aRange As Range
Set aRange = ThisWorkbook.Sheets("sheet 1").Range("A1:A16")
Dim dataWorkbook As Workbook
Set dataWorkbook = Application.Workbooks.Open("Y:\vba\test_reserves\test_data\0503317-3_FO_001-2582480.XLS")
Dim incomesNamesRange As Range
Set incomesNamesRange = dataWorkbook.Worksheets("sheet 1").Range("A1:A20")
' origWorkbook.Worksheets("sheet 1").Cells(1, 5) = testFunc(dataWorkbook.Sheets("1").Range("A1:A20"))
origWorkbook.Worksheets("Ëèñò2").Cells(1, 50) = testFunc(incomesNamesRange)
' testFunc aRange
'origWorkbook.Worksheets("sheet 1").Cells(1, 5) = testFunc(aRange) '<---good
' origWorkbook.Worksheets("sheet 1").Cells(1, 5) = testFunc(ThisWorkbook.Sheets("sheet 1").Range("A1:A16"))
End Sub
问题是,正如我用 cmets 指出的那样,当我打开一个外部工作簿并将其范围传递给一个变量时,它会给出错误 variable not definedFor Each cell In aCol`,而所有其他情况(包括传递范围变量当前的工作簿)工作正常。
我需要 testFunc 保持Function,因为它是来自更大程序的一些代码的简化示例,需要从函数中获取返回值。我还需要将 Range 存储在 变量 中,以最大限度地减少执行时间。
编辑:正如 cmets 中所指出的,我将 Cells(1,5) 替换为 origWorkbook.Worksheet("shee t1").Cells(1,5) 并修复了变量名,但原来的错误改为 variable not defined。我编辑了问题的标题和正文。
【问题讨论】:
-
Workbook对象没有Cells属性,因此origWorkbook.Cells(1, 50)无效。您需要指定Cells.指的是哪个工作表。 -
如果您在顶部添加
Option Explict,所有问题都将得到解决 -
^^ 是啊,那也是!! (@ShaiRado 不是所有问题 -
Workbook.Cells仍然会出错。) -
重新编辑问题:请参阅 Shai Rado 的评论 - 使用
Option Explicit将向您显示错误的原因。一旦你看到它,你只需不到一秒钟的时间就可以修复它。 -
添加了
Option Explicit,您现在应该定义所有变量 - 例如Dim cell As Range。这是一种很好的做法,尽管它需要做更多的工作。