首页 文章

VBA excel宏

提问于
浏览
1

我有一个连接到odbc,将数据带到excel和其余的数据,我在宏中手动计算我创建了一个宏,但我需要宏运行,每当我点击刷新按钮我把1宏放在workbook_open(),以便每当文件打开第一次我的宏被执行但当我点击刷新按钮只有odbc连接的数据得到更新我试图通过把它放在worksheet_changed()事件中调用我的宏,但它没有在这里工作是我试图在workheet_change事件中执行

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Target.Address = "$A$2" Or Target.Address = "$H$2" Then
   Call MyMacro
   End If
   End Sub

在这里id MyMacro Sub MyMacro()Dim i As Integer Dim j As Integer j = 1 i = 2 Dim Counter As Integer Counter = 1

Do While Not IsEmpty(cells(i, 1).Value)
If cells(i, 5).Value >= 70 Then
 cells(i, 6).Value = Counter
 SLC = (Counter / 96) * 100
 cells(i, 7).Value = SLC
 Counter = Counter + 1
Else
 cells(i, 6).Value = 0
End If
i = i + 1
Loop
End Sub

MyMacro被调用并到达我更新此单元格的行

cells(i, 6).Value = Counter
but it calls the following event its like a cycle
Private Sub Worksheet_Change(ByVal Target As Range)

再次没有值得到更新

这是excel表格的样子

TimeStamp               CA      CAAT       SL       Counter     SLC
11/24/2014 2:15         24      0         100.00    1           10.42
11/24/2014 2:30         27      0         100.00    2           11.46
11/24/2014 2:45         22      0         100.00    0           12.50
11/24/2014 3:00         21      0         100.00    3           13.54
11/24/2014 3:15         15      0         100.00    0           14.58
11/24/2014 3:30         18      1         94.44     4           15.63

A:E的范围从我的odbc connnection得到它的值我在SL计数器做什么在SL大于或等于70时我的计数器增加1谢谢你的帮助

1 回答

  • 0

    将您的私人子更改为此

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Target.Address = "$A$2" Or Target.Address = "$H$2" Then
    Application.EnableEvents = False
    Call MyMacro
    Application.EnableEvents = True
    End If
    End Sub
    

    您的 MyMacro sub正在更改单元格值,因此会再次触发Worksheet_Change事件 . 要解决此问题,您需要在调用宏之前关闭事件,然后再将其打开 .

    如果出于某种原因需要在关闭事件时触发事件,请使用 Application.DoEvents 方法 .

相关问题