VBA для MS EXCEL есть проблема с макросом
Добавлено: 06 ноя 2008, 18:32
По протоколу DDE из другого приложения импортируются котировки валют в MS Excel? Имеется таблица 7 столбцов и 5 строк в MS Excel? В ячейке С6 постоянно меняется цифра, которая выглядит как 1.2827 (например). Т.е. целая и дробная часть (4 знака после точки) и дробная часть от целой отделяется не запятой, а точкой. Я хочу, чтобы в ячейке J6 производилось вычисление =С6-0.0005 и полученный результат сразу копировался в буфер обмена. Так как число в ячейке С6 постоянно меняется, то результат в ячейке J6 тоже должен постоянно и синхронно изменяться. При каждом таком изменении:
1. БУФЕР ОБМЕНА ДОЛЖЕН ОЧИЩАТЬСЯ и
2. В буфер копировалось новое значение ячейки J6.
Написали макрос, вот он:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MyData As DataObject
Set MyData = New DataObject
Application.DecimalSeparator = "."
Application.UseSystemSeparators = False
Cells(6, 10).FormulaR1C1 = "=RC[-7]-0.0005"
MyData.SetText Cells(6, 10)
MyData.PutInClipboard
End Sub
НО!!!!
НЕ получается следующего результата:
Т.е. MS Excel свернут, а в любом приложении в Windows, где стоит курсор, нажав Ctrl+V вставилась свежая цифра С6-0.0005
А получается с этим макросом следующее:
Располагаем рядом MS Word и MS Excel на мониторе, работаем с MS Word. Активен MS Word, Нажимаем Ctrl+V, вставляется цифра из ячейки J6. Видим, что в этой ячейке не активного MS Excel значение изменилось. В надежде, что в буфере уже обновленное число содержится, нажимаем в MS Word Ctrl+V, а число вставляется точно то же, что вставилось в первый раз. Хотя должно было вставиться уже другое. Далее если тыкнуть мышью на листе MS Excel в любую ячейку, пустую или не пустую, просто совсем любую, сразу происходят изменения в буфере обмена и в буфере появляется текущее значение ячейки J6. Если не делать такого действия, буфер обмена не изменяется.
А нужно, чтобы изменения шли постоянно и непрерывно, независимо от того, активен в данный момент MS Excel или нет.
Т.е мне нужно, чтобы от числа, которое приходит по протоколу DDE из другого приложения в MS Excel вычиталась цифра 0.0005, по формуле (=С6-0.0005), динамически пересчитывалось по этой формуле, как только исходное число изменилось. Эти вычисления производились в ячейке J6. И в каждом случае, когда результат изменился, этот результат копировался в буфер обмена, и буфер обмена перед этим копированием очищался. И этот процесс шел автоматом и без остановок и скопированный результат был абсолютно всегда доступен в любом приложении Windows при нажатии клавиш Ctrl+V.
1. БУФЕР ОБМЕНА ДОЛЖЕН ОЧИЩАТЬСЯ и
2. В буфер копировалось новое значение ячейки J6.
Написали макрос, вот он:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim MyData As DataObject
Set MyData = New DataObject
Application.DecimalSeparator = "."
Application.UseSystemSeparators = False
Cells(6, 10).FormulaR1C1 = "=RC[-7]-0.0005"
MyData.SetText Cells(6, 10)
MyData.PutInClipboard
End Sub
НО!!!!
НЕ получается следующего результата:
Т.е. MS Excel свернут, а в любом приложении в Windows, где стоит курсор, нажав Ctrl+V вставилась свежая цифра С6-0.0005
А получается с этим макросом следующее:
Располагаем рядом MS Word и MS Excel на мониторе, работаем с MS Word. Активен MS Word, Нажимаем Ctrl+V, вставляется цифра из ячейки J6. Видим, что в этой ячейке не активного MS Excel значение изменилось. В надежде, что в буфере уже обновленное число содержится, нажимаем в MS Word Ctrl+V, а число вставляется точно то же, что вставилось в первый раз. Хотя должно было вставиться уже другое. Далее если тыкнуть мышью на листе MS Excel в любую ячейку, пустую или не пустую, просто совсем любую, сразу происходят изменения в буфере обмена и в буфере появляется текущее значение ячейки J6. Если не делать такого действия, буфер обмена не изменяется.
А нужно, чтобы изменения шли постоянно и непрерывно, независимо от того, активен в данный момент MS Excel или нет.
Т.е мне нужно, чтобы от числа, которое приходит по протоколу DDE из другого приложения в MS Excel вычиталась цифра 0.0005, по формуле (=С6-0.0005), динамически пересчитывалось по этой формуле, как только исходное число изменилось. Эти вычисления производились в ячейке J6. И в каждом случае, когда результат изменился, этот результат копировался в буфер обмена, и буфер обмена перед этим копированием очищался. И этот процесс шел автоматом и без остановок и скопированный результат был абсолютно всегда доступен в любом приложении Windows при нажатии клавиш Ctrl+V.