Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Зависание цифры - у правой границы диапазона. - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зависание цифры - у правой границы диапазона. (Макросы/Sub)
Зависание цифры - у правой границы диапазона.
radioamator Дата: Понедельник, 18.02.2019, 21:46 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Добрый вечер.

Помогите решить вопрос.
У меня есть макрос, суть которого в том, чтобы определенные числа двигались по диапазону - при щелчке по кнопке.

Вроде бы все ничего - но есть проблема.
Если долго щелкать по кнопке - то какая-либо из цифр - достигает правой границы диапазона и останавливается.
То есть не двигается, хотя по идее цифра должна продолжать движение.

Причем это почему-то происходит только для цифры "22" и ровно на 87 щелчке.
Для всех остальных цифр - подобного явления не наблюдается.

Скажите - как предотвратить такое зависание цифры у правой границы диапазона ?
К сообщению приложен файл: 2817200.xls(56.0 Kb)
 
Ответить
СообщениеДобрый вечер.

Помогите решить вопрос.
У меня есть макрос, суть которого в том, чтобы определенные числа двигались по диапазону - при щелчке по кнопке.

Вроде бы все ничего - но есть проблема.
Если долго щелкать по кнопке - то какая-либо из цифр - достигает правой границы диапазона и останавливается.
То есть не двигается, хотя по идее цифра должна продолжать движение.

Причем это почему-то происходит только для цифры "22" и ровно на 87 щелчке.
Для всех остальных цифр - подобного явления не наблюдается.

Скажите - как предотвратить такое зависание цифры у правой границы диапазона ?

Автор - radioamator
Дата добавления - 18.02.2019 в 21:46
Glen Дата: Вторник, 19.02.2019, 15:21 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 40
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010
Проверяем.

[vba]
Код
Sub Макрос2()

[AF12] = [AF12] + 1

Static Pred(1 To 100) As Range
Dim target As Range, c88 As Range, Rn As Range
Dim c As Range, cc As Integer, cr As Integer
Dim Nr As Integer, Nc As Integer, Dr, Dc, i As Integer, Ist As Integer
i = 5
Do While Range("AC" & i) <> ""
  Set Rn = Range(Range("ac" & i).Text)
  Set target = Range(Range("ae" & i).Text)
  Set c88 = Range(Range("ag" & i))
  If Pred(i - 4) Is Nothing And c88 = Rn Then
    Set Pred(i - 4) = Rn
    If Rn = "" Then Rn = Range("af" & i): GoTo NextI
  End If
  Nr = Rn.Row - target.Row + 1: Nc = Rn.Column - target.Column + 1
  Dr = Rn.Top + Rn.Height / 2 - (target.Top + target.Height / 2)
  Dc = Rn.Left + Rn.Width / 2 - (target.Left + target.Width / 2)
  If Abs(Nc) >= Abs(Nr) Then
    'If c88.Column = target.Column Then GoTo NextI
    If Dc <> 0 Then a = Dr / Dc * c88.Width / c88.Height
    If c88.Column >= target.Column Then cc = c88.Column - 1 Else cc = c88.Column + 1
    cr = Round(a * (cc - target.Column) + target.Row, 0)
  Else
    'If c88.Row = target.Row Then GoTo NextI
    If Dr <> 0 Then a = Dc / Dr * c88.Height / c88.Width
    If c88.Row >= target.Row Then cr = c88.Row - 1 Else cr = c88.Row + 1
    cc = Round(a * (cr - target.Row) + target.Column, 0)
  End If
  If Not Pred(i - 4) Is Nothing Then Pred(i - 4).ClearContents
  If Range("ag" & i) = Range("ac" & i) Then Range(Range("ag" & i)).ClearContents
  Set c = Cells(cr, cc)
  Set Pred(i - 4) = c
  Range("ag" & i) = c.Address(RowAbsolute:=False, ColumnAbsolute:=False)
  c.Formula = Range("af" & i).Text
NextI:
  i = i + 1
Loop
[/vba]


Самурай без меча подобен самураю с мечом, но только без меча.
 
Ответить
СообщениеПроверяем.

[vba]
Код
Sub Макрос2()

[AF12] = [AF12] + 1

Static Pred(1 To 100) As Range
Dim target As Range, c88 As Range, Rn As Range
Dim c As Range, cc As Integer, cr As Integer
Dim Nr As Integer, Nc As Integer, Dr, Dc, i As Integer, Ist As Integer
i = 5
Do While Range("AC" & i) <> ""
  Set Rn = Range(Range("ac" & i).Text)
  Set target = Range(Range("ae" & i).Text)
  Set c88 = Range(Range("ag" & i))
  If Pred(i - 4) Is Nothing And c88 = Rn Then
    Set Pred(i - 4) = Rn
    If Rn = "" Then Rn = Range("af" & i): GoTo NextI
  End If
  Nr = Rn.Row - target.Row + 1: Nc = Rn.Column - target.Column + 1
  Dr = Rn.Top + Rn.Height / 2 - (target.Top + target.Height / 2)
  Dc = Rn.Left + Rn.Width / 2 - (target.Left + target.Width / 2)
  If Abs(Nc) >= Abs(Nr) Then
    'If c88.Column = target.Column Then GoTo NextI
    If Dc <> 0 Then a = Dr / Dc * c88.Width / c88.Height
    If c88.Column >= target.Column Then cc = c88.Column - 1 Else cc = c88.Column + 1
    cr = Round(a * (cc - target.Column) + target.Row, 0)
  Else
    'If c88.Row = target.Row Then GoTo NextI
    If Dr <> 0 Then a = Dc / Dr * c88.Height / c88.Width
    If c88.Row >= target.Row Then cr = c88.Row - 1 Else cr = c88.Row + 1
    cc = Round(a * (cr - target.Row) + target.Column, 0)
  End If
  If Not Pred(i - 4) Is Nothing Then Pred(i - 4).ClearContents
  If Range("ag" & i) = Range("ac" & i) Then Range(Range("ag" & i)).ClearContents
  Set c = Cells(cr, cc)
  Set Pred(i - 4) = c
  Range("ag" & i) = c.Address(RowAbsolute:=False, ColumnAbsolute:=False)
  c.Formula = Range("af" & i).Text
NextI:
  i = i + 1
Loop
[/vba]

Автор - Glen
Дата добавления - 19.02.2019 в 15:21
radioamator Дата: Вторник, 19.02.2019, 15:45 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Glen, спасибо.
Теперь цифры работают как надо.

Скажите - а в чем была ошибка ?
 
Ответить
СообщениеGlen, спасибо.
Теперь цифры работают как надо.

Скажите - а в чем была ошибка ?

Автор - radioamator
Дата добавления - 19.02.2019 в 15:45
vikttur Дата: Вторник, 19.02.2019, 15:50 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2921
Репутация: 525 ±
Замечаний: 0% ±

Первая ошибка то, что 22 не цифра - число :)


Сообщение отредактировал vikttur - Вторник, 19.02.2019, 16:14
 
Ответить
СообщениеПервая ошибка то, что 22 не цифра - число :)

Автор - vikttur
Дата добавления - 19.02.2019 в 15:50
Glen Дата: Вторник, 19.02.2019, 16:08 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 40
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010
Деление на 0 было. Иногда
[vba]
Код
  Dr = Rn.Top + Rn.Height / 2 - (target.Top + target.Height / 2)
  Dc = Rn.Left + Rn.Width / 2 - (target.Left + target.Width / 2)
[/vba]
уходили в 0


Самурай без меча подобен самураю с мечом, но только без меча.
 
Ответить
СообщениеДеление на 0 было. Иногда
[vba]
Код
  Dr = Rn.Top + Rn.Height / 2 - (target.Top + target.Height / 2)
  Dc = Rn.Left + Rn.Width / 2 - (target.Left + target.Width / 2)
[/vba]
уходили в 0

Автор - Glen
Дата добавления - 19.02.2019 в 16:08
radioamator Дата: Вторник, 19.02.2019, 17:45 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Glen, понятно.
Спасибо за ответ.
 
Ответить
СообщениеGlen, понятно.
Спасибо за ответ.

Автор - radioamator
Дата добавления - 19.02.2019 в 17:45
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зависание цифры - у правой границы диапазона. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!