Jsl*_*hem 0 excel vba excel-vba
预期的输出是正确地拉出大约2000个数据点的ID.我正在检查数据是否与用户输入日期匹配.如果是这种情况,我想在另一张纸上打印事件的ID.理想情况下,我将有一个具有数字ID的输入列表.
当我从控制台或调试器运行代码时,我会得到一系列ID,如:1,2,4,5,6,11,14,166 ......但是,当我从按钮运行时,我始终得到第一个2个数据点.无论哪个领域(日期,时间,大小),我总是得到前2个数据点.
问题出现了,因为如果我在调试器中设置了一个断点,然后按下按钮,代码就可以了.我所要做的就是保持运行(F5)并且代码完美无缺.我认为这告诉我代码编译和工作; 意味着错误不是编译或逻辑错误.
因此,我认为由于竞争条件我遇到了错误.所以,我继续运行doEvents命令.再次,我得到了相同的结果.控制台和调试器正确运行代码,但按钮没有.
Sub ThisBookSource()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Start = Now()
Dim masterRow As Integer
Dim myEvents
masterRow = 9
masterRow2 = 9
ActiveWorkbook.Worksheets("Graphs by Source").Activate
myCode = Range("D" & "2").Value
Range("C9:C2290").Clear
Range("T9:U2290").Clear
ActiveWorkbook.Worksheets("Data").Activate
For I = 3 To 2113
If Range("T" & I) = myCode Then
Worksheets("Data").Range("M" & I).Copy
Worksheets("Graphs by Source").Range("C" & masterRow).PasteSpecial xlPasteValues
masterRow = masterRow + 1
If I Mod 250 = 0 Then
DoEvents
End If
End If
Next I
ActiveWorkbook.Worksheets("Graphs by Source").Activate
Calculate
For I = 9 To 2290
If Range("I" & I).Value <> "NA" Then
Range("T" & masterRow2) = Range("G" & I).Value
Range("U" & masterRow2) = Range("I" & I).Value
masterRow2 = masterRow2 + 1
If I Mod 250 = 0 Then
DoEvents
End If
End If
Next I
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
MsgBox "Done. Started at " & Start & ", and ended at " & Now & "!"
End Sub
Run Code Online (Sandbox Code Playgroud)
如果您打算与之合作ThisWorkbook,请与之合作ThisWorkbook.执行Range("foobar")[隐式]工作ActiveSheet,可能是也可能不是工作表ThisWorkbook- 它是当前活动的任何工作簿中的工作表.它完全不同.并且每天都会导致错误.
经验法则,明确任何东西都比VBA中隐含的东西更好.语言已经在背后做了太多的事情,你需要控制.
Rubberduck(我管理的开源VBE加载项目)可以帮助您查找隐式ActiveSheet引用的所有实例......以及许多其他潜在问题.
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |