2014-11-25 5 views
1

У меня есть соединение с ODBC, которые приносят данные отличиться и остальные данные я вычислить вручную в макро я создал макрос , но мне нужно макрос для запуска всякий раз, когда я нажимаю на кнопку обновления Я помещаю 1 макрос в workbook_open(), так что всякий раз, когда файл открывается в первый раз, мой макрос получается выполненным , но когда я нажимаю кнопку обновления, обновляются только данные из соединения odbc. Я попытался вызвать мой макрос, поместив его внутри workheet_changed (), но он не работал вот что я пытался сделать в мероприятии workheet_changeVBA Excel макросы

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 

и здесь идентификатор MyMacro Sub MyMacro() Dim я As Integer Dim J As Integer у = 1 я = 2 Dim Счетчик As Integer Счетчик = 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) 

снова значения не обновляется

здесь является бывшим, как мой первенствует лист выглядеть

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 спасибо заранее за вашу помощь

ответ

0

Измени Private Sub этого

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.

+0

спасибо ... это решило мою проблему :) – jwj

Смежные вопросы