2014-12-18 5 views
0

У меня есть данные, поступающие в Excel из приложения DDE с макросом. Мне удалось запрограммировать макрос, чтобы все данные хранились в следующей строке. Проблема: я хочу иметь возможность прокручивать данные, например. для просмотра значений 5 минут назад, но я не могу, потому что макрос блокирует книгу. Я пытался экспортировать данные в файл csv и просматривать его там, но у меня есть проблема с циклом, который говорит, что файл уже открыт. У любого есть решение? Я настоящий новичок в VBA или программировании. Спасибо. Вот что я пытался бежать:Реализация задержки экспорта данных из Excel в файл csv

Sub DDEread() 

' Opens a DDE conversation with the Windmill DDE 
' Panel using the Service Name "Windmill" and the 
' Topic Name "data" 
Dim i As Integer, g As Integer 
For i = 2 To 15 
' Loop to get 5 values, 1 every second 
For g = 0 To 4 
ddechan = Excel.DDEInitiate("Windmill", "data") 
Cells(g + 1, 4).Value = Excel.DDERequest(ddechan, "Ch0") 
Cells(g + 1, 5).Value = Excel.DDERequest(ddechan, "00001") 
Application.Wait Now + TimeValue("00:00:01") 
Next g 

'put the calculated average of 5 cells into other cells to get allways 5 second averaged values 
Cells(i, 2).Value = Cells(6, 4) 
Cells(i, 3).Value = Cells(6, 5) 
Cells(i, 1).Show 
Cells(i, 1).Value = Format(Time, "hh:mm:ss") 
Cells(i, 1).NumberFormat = "hh:mm:ss" 
' Closes the DDE conversation. 
Excel.DDETerminate (ddechan) 

'Data export to csv file: 
Dim myFile As String, cellValue As Variant 
myFile = Application.DefaultFilePath & "\PG350data.csv" 
Open myFile For Output As #1 

cellValue = Cells(i, 2).Value + Cells(i, 3).Value 
Write #1, cellValue 


Next i 
Close #1 
End Sub 
+0

В этом фрагменте кода вы хотите вставить 5-минутную задержку? –

+0

Я хочу иметь возможность прокручивать строки (зарегистрированные значения) во время работы макроса. –

ответ

0

Обратитесь к следующему примеру использования DoEvents демонстрирует, как добавить отзывчивость к программе во время выполнения длинного цикла:

Open "com1" For Input As #1 
    Input #1, x 
    Do Until x = Chr(13) 
    DoEvents 
    '... 
    '... 
    Input #1, x 
    Loop 

Другой пример:

X = Timer() 
    Do While X + 10 > Timer() 

     DoEvents 

    Loop 

Подробное описание здесь: http://support.microsoft.com/kb/118468

Надеюсь, это поможет.

+0

Решил мою проблему! Благодарю. –

+0

@ KristofMertens: Добро пожаловать! Удачи вам в вашем проекте. Если вы удовлетворены решением, не могли бы вы отметить ответ? Спасибо и приветствую, –