Реакция на изменение значения ячейки!

Программирование на Visual Basic for Applications
Илья
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 03.04.2003 (Чт) 17:44

Реакция на изменение значения ячейки!

Сообщение Илья » 07.04.2003 (Пн) 13:40

Добрый день!
Скажите пожалуйста, как сделать так, чтобы Excel реагировал на изменение ячейки.
Конкретная задача: при изменении значения в ячейке, файл должен сохраняться в формате *.txt
У меня есть программа, которая экспортирует данные в Excel в реальном времени. В реальном же времени они пересчитываются и результаты выводятся в другой файл (уже текстовой, но открытый в Excel). Это необходимо, ибо программа экспортирует только в экселевские файлы.
Необходимо: при изменении значения в текстовом файле (где стоит ссылка на файл экселевский, в который скачиваются данные), сохранять этот текстовый файл.
Помогите пожалуйста. Я уже пробовал использовать worksheet_change, но он на такие вещи почему-то не реагирует.

С уважением,
Илья.

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 07.04.2003 (Пн) 16:15

Может стоит попробовать событие Workbook_SheetChange
Код: Выделить всё
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
        ByVal Source As Range)
..............   
End Sub

Илья
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 03.04.2003 (Чт) 17:44

Сообщение Илья » 11.04.2003 (Пт) 13:57

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Source As Range)
..............
End Sub

Так я пробовал, не работает...

Неужели никак нельзя решить эту проблему?

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 11.04.2003 (Пт) 14:10

Перейдите в модуль листа и воспользуйтесь его событийной процедурой:
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

Причина почему может не работать в следующем моем ответе
Последний раз редактировалось Vitaly1 11.04.2003 (Пт) 15:25, всего редактировалось 2 раз(а).

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 11.04.2003 (Пт) 14:11

2 Vitaly1



Автор в первом постинге уже отмечает, что это событие ему не помогает.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 11.04.2003 (Пт) 14:30

Илья:Может книгу вы загрузили в режиме защиты от макровирусов?
Попробуйте снизить уровень защиты, на самом низком уровне событие должно срабатывать.

RayShade :oops: :oops: :oops: :oops: :cry:

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 11.04.2003 (Пт) 17:43

2 Илья Попробуй еще событие SelectionChange
Код: Выделить всё
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    ...........
End Sub


ЗЫ: ....а вообще странно, чего у тебя эти события не "работают", может ошибка не в событии (мы ж тут все кода не видим :wink: )

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.04.2003 (Пн) 9:16

Может ты не то подразумеваешь под "изменение ячейки"? Событие Change наступает, когда содержимое ячейки меняется, а не редактируется, т.е. когда пользователь подтвердит (нажмет Enter) изменение. А до тех пор Change и не наступит.
Lasciate ogni speranza, voi ch'entrate.

Илья
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 03.04.2003 (Чт) 17:44

Сообщение Илья » 16.04.2003 (Ср) 10:25

Алибек, наверное Вы правы.

Изменение в содержимом ячейки не является изменением Change.

Можно, конечно проверять каждую секунду... Но от этого немного остальные программы тормозят...

Так что для меня этот вопрос остаётся открытым :)

С уважением.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.04.2003 (Ср) 11:12

В инете обычно используют обращение на "ты" и никто не обижается... Но это я так, к слову :)

Даже если проверять содержимое ячейки каждую секунду, это все-равно не поможет -- до тех пор, пока пользователь не подтвердит изменения (например, нажатием Enter), ячейка не изменяется. Изменяется буфер редактирования ячейки, а к нему доступа из VBA нет.

Возможно, эту задачу следует решать по другому, т.е. написать свою программу на VB, которая будет открывать excel'евские файлы (как базу данных через ODBC или работая с объектом Excel.Application), а уже в этой программе предусмотреть изменение требуемых полей с моментальной выгрузкой в текстовый файл.
Каркас программы будет примерно таков:
Код: Выделить всё
'Имеется форма frmData, на ней массив TextBox'ов txtData(), в которых
'записаны значения, которые следует изменять.

...

Private Sub Form_Load()
Dim xl As Object
Set xl = CreateObject("Excel.Application")
With obj
  With .Workbooks.Open("C:\data.xls", ...)
    txtData(0).Text = .Sheets("Data").Cells(1,1)
    txtData(1).Text = .Sheets("Data").Cells(2,1)
    .........
    .........
  End With
End With
End Sub

Private Sub txtData_Change(Index As Long)
Dim FN As Integer
FN = FreeFile()
Open "C:\DATA.TXT" For Output As #FN
Print #FN, txtData(0).Text
Print #FN, txtData(1).Text
.........
.........
Close #FN
End Sub
Lasciate ogni speranza, voi ch'entrate.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 69

    TopList  
cron