使用范围变量

时间:2017-07-06 07:04:33

标签: excel vba excel-vba

我的函数 testFunc Range为参数,循环遍历其单元格并对其进行编辑。我有 testSub 来测试两个案例:首先是我将当前工作簿的范围传递给 testFunc 通过: 1。变量Range 2.仅作为参数testFunct(...Range("A1:A16"))

第二种情况是指我打开另一个工作簿并执行相同操作 - 将其worksheets范围之一传递给 {{1} 直接或通过变量

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 对于每个单元格在aCol`中,而所有其他情况(包括通过范围)当前工作簿的变量)工作正常。

需要 variable not defined才能保持testFunc,因为它是一个简单的例子,来自较大程序的某些代码需要从函数中获取返回值。我还需要将Function存储在变量中,以最大限度地缩短执行时间。

编辑:正如评论中所指出的,我将Range替换为Cells(1,5)并修改了变量名称,但原始错误更改为origWorkbook.Worksheet("shee t1").Cells(1,5)。我编辑了问题的标题和正文。

1 个答案:

答案 0 :(得分:0)

工作表的默认名称中不应包含空格。

Set incomesNamesRange = dataWorkbook.Worksheets("sheet 1").Range("A1:A20")

将其更改为:

    Set incomesNamesRange = dataWorkbook.Worksheets("Sheet1").Range("A1:A20")

看看是否能解决问题。