VBA触发器输入或更新查找值

时间:2016-09-16 15:56:51

标签: excel vba excel-vba loops

我有以下代码:

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")

3 个答案:

答案 0 :(得分:7)

仅供参考 - 不要声明如下:

Dim i,e as long

因为只有这个声明&#34; e&#34;声明为长,&#34; i&#34;作为变种。这可能会在以后的某个地方引发问题。enter image description here

正确的方法是:

Dim i as long
Dim e as long

答案 1 :(得分:6)

问题在于类型不匹配。 Range("K6")值是一个长整数,而查找表将帐号存储为文本。将文本转换为数字解决了问题。

答案 2 :(得分:1)

您的代码中存在错误,因为i类型未定义。这应该通过Option Explicit修复 - 如果我们处于纯

这是一个常见的声明问题, 我们假设 会读取

Dim i,e as long

as

Dim i as long
Dim e as long
...

不幸的是,它没有。这很奇怪,因为它与 中的工作方式不同:

  

声明多个变量

     

您可以在一个声明语句中声明多个变量,为每个变量指定变量名称,并在每个数组名称后面加括号。多个变量用逗号分隔。

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