我有以下代码:
Sub PrintToCSV()
Dim i As Long, e As Long
i = Worksheets("STATEMENT (2)").Range("$G$6").Value
e = Worksheets("STATEMENT (2)").Range("$G$7").Value
Do While i <= e
Range("K6") = i
Application.Wait (Now + #12:00:01 AM#)
If Range("$X$10").Value > 0 Then
Cells(1, 1).Value = i
End If
i = i + 1
Loop
End Sub
它按预期循环并更改Range("K6")
的值。但是,当我手动执行此操作时,Range("K6")
的值会更新其他单元格值(vlookup),但不会使用此代码。如何使用此代码确保其他单元格的值取决于Range("K6")
?
答案 0 :(得分:7)
仅供参考 - 不要声明如下:
Dim i,e as long
因为只有这个声明&#34; e&#34;声明为长,&#34; i&#34;作为变种。这可能会在以后的某个地方引发问题。
正确的方法是:
Dim i as long
Dim e as long
答案 1 :(得分:6)
问题在于类型不匹配。 Range("K6")
值是一个长整数,而查找表将帐号存储为文本。将文本转换为数字解决了问题。
答案 2 :(得分:1)
您的代码中存在错误,因为i
类型未定义。这应该通过Option Explicit
修复 - 如果我们处于纯vb。
这是一个常见的声明问题, 我们假设vba 会读取
Dim i,e as long
as
Dim i as long
Dim e as long
...
不幸的是,它没有。这很奇怪,因为它与vb 中的工作方式不同:
声明多个变量
您可以在一个声明语句中声明多个变量,为每个变量指定变量名称,并在每个数组名称后面加括号。多个变量用逗号分隔。
Dim lastTime, nextTime, allTimes() As Date
在VBA中,为确保类型,我们可以使用TypeName
检查变量的类型:
Sub getTypes()
Dim i, e As Long
MsgBox "i: " & TypeName(i)
MsgBox "e: " & TypeName(e)
End Sub
给:
i: Empty
e: Long