在VBA里使用range(cells(),cells()) ,一个容易出错的点:需要注意 range() 和cells() 前都指定好sheet名!

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值