excel - VBA Range.Offset 问题
问题描述
我在使用以下代码时遇到问题:
Sub UseDictionary()
' Get the range of values
Dim rg As Range
Set rg = Range("A2:B7")
' Create the dictionary
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")
' Fill the dictionary
Dim cell As Range
For Each cell In rg
dict(cell.Value) = cell.Offset(0, 1).Value
Next
' Perform the Lookups
For Each cell In rg
Debug.Print cell.Value, dict(cell.Value)
Next
End Sub
问题是,当该行dict(cell.Value) = cell.Offset(0, 1).Value
正在处理列上的单元格时B
,字典项是使用列B
和的值创建的C
。
这怎么可能,因为我设置 rg 只有两列A
和B
?!我认为 Excel 不会创建该项目,因为当将列作为其列cell.Offset(0, 1).Value
时不应该存在。cell
B
那么,如何防止字典在cell.Offset(0, 1).Value
引用 column时创建项目C
,这些项目在我的 rg 对象中不存在?
非常感谢您提供任何线索。
解决方案
cell.Offset()
是相对于范围对象计算的cell
。该对象本身独立于rg
您设置为的对象Range("A2:B7")
。您正在循环的事实rg
并不意味着循环变量cell
以某种方式或其他方式是rg
. 当它作为该循环的一部分cell
引用时和当它直接设置为等于同一个单元格时没有区别。在任何一种情况下,它都只是一个引用的范围变量(因此自然会引用)。B2
cell
B2
Set cell = Range("B2")
B2
cell.Offset(0,1)
C2
在您的情况下,您似乎希望键位于 columnA
中,值位于 column 中B
。如果是这样,只需将您的更改rg
为Set rg = Range("A2:A7")
.
推荐阅读
- ruby-on-rails - Ruby on Rails - 从某些路由中排除单个域
- r - 链接到弹出窗口中的图像(R 传单)
- jmeter - 如何为 JMeter 测试计划定义不同的变量集
- c - 如何在不重复除法的情况下判断一个数是否为素数
- java - 在 Android Studio 中保存视图中的视频
- r - 关于应用 K 折交叉验证时 R 中的 Caret 包
- javascript - 这个 API 端点如何验证请求是否合法?
- google-chrome-devtools - 在 Chrome 中调试 WebAssembly
- cordova - 删除离子科尔多瓦插件的正确方法
- sqlite - sqlite3_prepare_v2 失败:没有这样的表 Ionic 和 cordova 插入 sqlite