Страница: 1 |
Страница: 1 |
Вопрос: как обойтись без кнопки?
Добавлено: 13.08.05 21:41
Автор вопроса: sania
приветствую всех!
помогите чайнику!первый раз с VB
перелопатил весь форум и вот что получилось
это заполнение таблицы при нажатии кнопки и при А1 на первом листе=1,собирает данные с В2 по Вхх и записывает на лист2,каждый раз сдвигая запись по столбцам.немного коряво
так вот вопрос как сделать чтоб работало без нажатия кнопки?
А1 делает пульс с DDEserver'a : 0 или 1
Private Sub CommandButton1_Click()
Dim a As Integer
Dim b As Integer
Dim c As Integer
a = 2
Do While Not Sheets("Sheet2").Cells(1, a).Value = Empty
a = a + 1
Loop
b = a
a = 2
Do While Not Sheets("Sheet1").Cells(a, 1).Value = Empty
If Trim$(Sheets("Sheet1").Cells(1, 1).Value) = "1" Then
c = 1
Do While Not Sheets("Sheet2").Cells(2, c).Value = Empty
c = c + 1
Loop
Sheets("Sheet2").Cells(b, c).Value = Trim$(Sheets("Sheet1").Cells(a, 2).Value)
b = b + 1
End If
a = a + 1
If c > 3 Then
Sheets("Sheet2").Cells(2, c - 2).Value = "over"
End If
Sheets("Sheet2").Cells(2, 1).Value = "check"
Loop
End Sub
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #1
Добавлено: 14.08.05 14:05
Что-то корявое и непонятное. Как я узнаю, где ошибка, если не знаю, как именно должна работать программка? И что ты имел ввиду под фразой "А1 делает пульс с DDEserver'a : 0 или 1"?
Номер ответа: 2
Автор ответа:
sania
Вопросов: 1
Ответов: 6
Профиль | | #2
Добавлено: 14.08.05 14:26
то что коряво это понятно.извинился сразу.
мне надо собрать данные с В2 по Вх и записать их на другой лист в столбец В,потом С и т.д.
а вопрос как мне сделать запуск макроса каждый раз когда происходит изменение ячейки А1(лист1) с нуля на единицу
это значит,что внешняя прога пишет в А1 ноль или один
Номер ответа: 3
Автор ответа:
Дмит
Вопросов: 11
Ответов: 160
Web-сайт:
Профиль | | #3
Добавлено: 14.08.05 18:39
Поставь в модуле листа:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
'А здесь проверь правильно изменена ячейка А1 и запусти код макроса
End If
End Sub
Номер ответа: 4
Автор ответа:
sania
Вопросов: 1
Ответов: 6
Профиль | | #4
Добавлено: 14.08.05 21:12
вот что я намалевал(на большее ума не хватает):
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
'А здесь проверь правильно изменена ячейка А1 и запусти код макроса
If Sheets("Лист1".Cells(1, 1).Value = "1" Then
'вот тут вписал сам макрос
End If
End If
End Sub
спасибо огромное!!
оно работает,только есть один момент:так как А1 связан со внешним источником данных(контроллер)могут быть проблемы со связью,и если А1 останется =1,то макрос будет перезапускаться постоянно,и всё повиснет
есть ли возможность запускать макрос каждый раз на один цикл при смене А1 с 0 на 1 ,т.е отследить смену А1 с нуля на единицу,сделать макрос один раз и снова ждать смены с нуля на единицу?
но по-любому уже работает!!спасибо!!
Номер ответа: 5
Автор ответа:
Дмит
Вопросов: 11
Ответов: 160
Web-сайт:
Профиль | | #5
Добавлено: 14.08.05 21:38
Макрос будет запускатся только когда произойдёт смена 0-1
If Sheets("Лист1".Cells(1, 1).Value = "1" Then
Application.EnableEvents = False
Application.Undo
If Sheets("Лист1".Cells(1, 1).Value = "0" Then
Sheets("Лист1".Cells(1, 1).Value = "1"
'вот тут вписал сам макрос
End If
Application.EnableEvents = True
End If
Номер ответа: 6
Автор ответа:
sania
Вопросов: 1
Ответов: 6
Профиль | | #6
Добавлено: 14.08.05 21:56
всёёёё!!!
всё работает!!!
перемного-премного благодарен!!
Номер ответа: 7
Автор ответа:
sania
Вопросов: 1
Ответов: 6
Профиль | | #7
Добавлено: 15.08.05 09:54
извиняюсь за ещё один не скромный вопрос
если я изменяю А1 руками,то всё работает в лучшем виде,а если на А1 стоит какая-нибудь формула,к примеру:=IF(B1=1,1,0),то уже нет.
на самом деле у меня стоит:
=UniDDE|Items!'lblDDE(32)'
ЕКСЕЛЬ понимает эту формулу
есть ли возможность как-то прикрутить это дело?
ещё раз спасибо!
Номер ответа: 8
Автор ответа:
Дмит
Вопросов: 11
Ответов: 160
Web-сайт:
Профиль | | #8
Добавлено: 15.08.05 19:56
Используй событие Worksheet_Calculate
Посмотри похожая проблема:
http://www.developing.ru/forum/viewtopic.php?t=3097&highlight=dde
Номер ответа: 9
Автор ответа:
sania
Вопросов: 1
Ответов: 6
Профиль | | #9
Добавлено: 15.08.05 22:25
я пролазил и тот форум,но этого топика не заметил.
знаешь,что я тебе скажу?
УРААААА!!!!!
именно!! как говорится:то что доктор прописал!!!
с первого захода получилось!!!
ОООГРОМНОЕ СПАСИБОООО!!!!
заходил к тебе на сайт понравилось,но пока ничего не нужно,но в избранное занёс,есть полезные вещи.
ещё раз СПАСИБО!!!!!!!!!!!
Номер ответа: 10
Автор ответа:
sania
Вопросов: 1
Ответов: 6
Профиль | | #10
Добавлено: 15.08.05 22:49
решил дописать.может кому понадобится
если в ячейке А1 стоит какая-либо функция(не важно DDE или ЕКСЕЛевская),а не значение вводимое руками и хотите отследить изменение значения этой функции и запустить макрос,вот что у меня получилось(само-собой при помощи Дмит,который наставил на путь истинный):
Private Sub Worksheet_Calculate()
Dim Max As Long
Static XX As String
If XX <> Range("A1".Value And Len(Trim(Range("A1")) > 0 Then
'здесь должно быть,то что вы хотите сделать
End If
XX = Range("A1".Value
End Sub
ещё раз СПАСИБО!!!!!!!!!!