VBA触发器input或更新查找值

我有以下代码:

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")更改与此代码?

只是供参考 – 不要这样声明:

 Dim i,e as long 

因为对于这个声明,只有“e”被声明为long,而“i”被声明为变体。 这可能会在稍后的某个地方引起问题 在这里输入图像说明

正确的方法是:

 Dim i as long Dim e as long 

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

在这里你得到了一个错误,因为itypes是未定义的。 这应该用Option Explicit来修复 – 如果我们是纯vb的话 。

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

 Dim i,e as long 

 Dim i as long Dim e as long ... 

不幸的是,它不。 这很奇怪,因为它不同于它在vb中的工作方式

声明多个variables

您可以在一个声明语句中声明多个variables,为每个variables声明variables名称,并在每个数组名称之后加上括号。 多个variables用逗号分隔。

 Dim lastTime, nextTime, allTimes() As Date 

在VBA中,为了确定types ,我们可以用TypeName检查variables的types:

 Sub getTypes() Dim i, e As Long MsgBox "i: " & TypeName(i) MsgBox "e: " & TypeName(e) End Sub 

给:

 i: Empty e: Long