1 问题
在VBA里使用range(cells(),cells()) 发现处了下面这个状况
- 当前sheet就是sh1时,代码正常运行
- 当前sheet不是sh1时,有一行代码报错 arr3 = sh1.Range(Cells(4, 3), Cells(16, 8))
- 为什么会这样呢?
Sub test1001()
Dim sh1 As Object
Set sh1 = ThisWorkbook.Worksheets("data")
arr1 = sh1.Range("c" & 4 & ":h" & 16)
arr2 = sh1.Range(sh1.Cells(4, 3), sh1.Cells(16, 8))
arr3 = sh1.Range(Cells(4, 3), Cells(16, 8))
Debug.Print "arr1(3, 3)=" & arr1(3, 3)
Debug.Print "arr2(3, 3)=" & arr2(3, 3)
Debug.Print "arr3(3, 3)=" & arr3(3, 3)
End Sub
2 问题原因和解决办法
2.1 出错原因时书写错误
- 其实还是因为我的代码书写不规范导致的
- arr3 = sh1.Range(Cells(4, 3), Cells(16, 8)) 因为这么写,VBA会去当前sheet去找,而不是指定sheet比如sh1去查找数据,就报错,除非刚好当前sheet是sh1就不报错
- 所以以后记住 range(cells()) 前面也要指定sheet名!!
- 所以要这么写才准确 arr2 = sh1.Range(sh1.Cells(4, 3), sh1.Cells(16, 8))
2.2 其他,为什么range() 不报错
- range() 因为只需要指定一次sh1.range() 所以没出错
- sh1.Range(sh1.Cells(4, 3), sh1.Cells(16, 8)) 需要在range() 和cells() 每处都要限定好 sh1,指定是从哪个 sheet里取数据,所以这个要更小心,否则容易出错