请考虑以下代码段.它写入相同的公式两个小区A1和A2
Sub Main()
With Range("A1")
.Formula = "=1+1"
End With
With Range("A2")
.Formula = "=1+1"
.Value = .Value
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
第二个with块用于.Value = .Value计算/执行公式,因此公式从公式栏中消失.请参阅隐藏公式栏中的公式以获得支持性参考.

现在,添加另一个块
With Range("A3")
.Formula = "=1+1"
End With
Range("A4") = Evaluate(Range("A3").Formula)
Run Code Online (Sandbox Code Playgroud)
您向单元格添加公式,A3然后新单元格的公式将Evaluated()进入另一个单元格A4.结果如图所示
我认为上面那种表明.Value = .Value和Evaluate()做同样的事情.
但是,下面的代码使用上述两种方法从已关闭的工作簿中提取值.我已经book9.xlsm为这个例子创建了一个工作簿,其中包含一个hello单元格A1.book9.xlsm是我将从中汲取A1价值的人.考虑一下代码
Sub PullValue()
With Range("A1")
.Formula = "='C:\Users\admin\Desktop\[book9.xlsm]Sheet1'!A1"
End With
With …Run Code Online (Sandbox Code Playgroud) 我不明白这种行为:
Sub tuEs()
Dim A() As Variant
A = Range("A1:A10") ' works
Dim B() As Variant
B = ActiveSheet.Range("A1:A10") ' Type mismatch
End Sub
Run Code Online (Sandbox Code Playgroud)
第一个版本的第二个版本没有.为什么?有什么不同?
我在单元格中的Excel工作表中有文本数据B6:H14.
有些行有2个单元格有内容,有些行有4个,有些行有7个.如何将这些复制到2维数组?我已经知道尺寸了,所以我很擅长尺寸没有被声明为动态代码.
我是否需要使用循环(我目前正计划使用)?
或者是更容易/更优雅的方式?
因此,有一个上问题什么 DIM是的,但我无法找到我为什么要使用它.
据我所知,我发现这三组代码没有区别:
'Example 1
myVal = 2
'Example 2
DIM myVal as Integer
myVal = 2
'Example 3
DIM myVal = 2
Run Code Online (Sandbox Code Playgroud)
如果我省略DIM代码仍然运行,并且在2或3个嵌套循环后,我看到省略它们时输出没有区别.来自Python,我喜欢保持我的代码干净*.
那么为什么我需要声明变量DIM?除了风格问题,是否有技术理由使用DIM?
*我也懒惰,并且没有宣布变量的习惯.
我正在尝试检索工作表中的单元格数组的值(存储为数组而不是简单单元格),但由于某种原因,不断获得运行时错误13类型不匹配.我已经阅读了有关类似问题的帖子,但其中许多似乎与数组错误类型(即NOT Variant类型)或静态大小有关.
以下是调试中发生错误的相关行:
Dim SizeSelection() As Variant
SizeSelection = Workbooks("Wheels.xlsx").Worksheets("Test").Range("B1:W1")
Run Code Online (Sandbox Code Playgroud)
我也试过用
Dim SizeSelection() As Variant
SizeSelection = Array(Workbooks("Wheels.xlsx").Worksheets("Test").Range("B1:W1"))
Run Code Online (Sandbox Code Playgroud)
但仍然得到相同的错误.除了上面提到的两个常见错误,有没有人知道为什么我会遇到类型不匹配?我已经尝试删除数组并将值存储在常规单元格中,但这没有任何区别.
哦,我应该提一下,我正在尝试检索的数据是在另一个工作簿中(虽然应该从上面的代码中清楚)并且该工作簿已经打开.
谢谢!麦克风
刚刚意识到我不知道答案,也没有关于SO的问题,所以在这里:
Function当没有指定VBA时,VBA中的例程的默认返回类型是什么?
编辑:Sub dump_range下面显示地址没有完全定义一个Range(就其内容而言操作而言),我发现令人惊讶的事情,并且在MS文档中没有明确说明.还有别的东西,一个"子类型".似乎人们不能查询"子类型",而只能间接地通过Count.这一点的实际意义在于,如果一个人定义一个Sub(或Function)将一个Range参数作为一个参数,那么我们应该记住这一点来编写代码Sub(我本人没有做的事情)以避免潜在的错误.
对此问题予以引发这样的回答来遍历`Cells`在`Range`
在代码中
Dim rng As Range, rng2 As Range, rng3 As Range
Set rng = Selection
Set rng2 = rng.Cells
Set rng3 = rng.Rows
Run Code Online (Sandbox Code Playgroud)
(问题1)什么是对象之间的差异rng,rng2等等?
我并不是说只用文字解释它,而是在规范哪些方法/属性和结果可用于每个,并弥补"子类型"之间的差异.应该有一些,因为VBA对它们的工作方式不同.但我没有找到规范.实际上,Range.Cells属性的Excel帮助让我很困惑:" 返回一个Range对象,它表示指定范围内的单元格. "它在我看来它应该返回与调用者相同的对象.权威文档的链接将支持解释.
通过使用可以看出对象之间存在一些差异
Call dump_range(rng) ' -> Range $A$1:$B$6, count = 12
Call dump_range(rng2) ' -> Range $A$1:$B$6, count = 12
Call dump_range(rng3) …Run Code Online (Sandbox Code Playgroud) vba ×7
excel ×6
excel-vba ×4
function ×2
arrays ×1
cells ×1
comparison ×1
evaluate ×1
return-type ×1