Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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 делает пульс с DDEserver'a : 0 или 1"?

это значит,что внешняя прога пишет в А1 ноль или один

Ответить

Номер ответа: 3
Автор ответа:
 Дмит



Вопросов: 11
Ответов: 160
 Web-сайт: dimit.pochta.ru
 Профиль | | #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-сайт: dimit.pochta.ru
 Профиль | | #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-сайт: dimit.pochta.ru
 Профиль | | #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


ещё раз СПАСИБО!!!!!!!!!!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам