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里取数据,所以这个要更小心,否则容易出错
 



















