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

Вход

Регистрация

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

 

= Мир MS Excel/Прошу помочь разобраться в макросе с Target и Intersect - Страница 3 - Мир MS Excel

Старая форма входа
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Прошу помочь разобраться в макросе с Target и Intersect (Новое детище.. ну хорошо, не детище, так, детеныш ))
Прошу помочь разобраться в макросе с Target и Intersect
Саня Дата: Суббота, 28.04.2012, 11:01 | Сообщение № 41
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
вот где я это видел
 
Ответить
Сообщениевот где я это видел

Автор - Саня
Дата добавления - 28.04.2012 в 11:01
Саня Дата: Суббота, 28.04.2012, 11:07 | Сообщение № 42
Группа: Друзья
Ранг: Ветеран
Сообщений: 1068
Репутация: 560 ±
Замечаний: 0% ±

XL 2016
Quote (Alex_ST)
Саш, у массива/словаря/коллекции тоже есть свойства Item
А попробуй-ка ты обратись к Item, номер которого больше чем есть в объекте? Ошибочка будет! Что в общем-то вполне логично.
Вот и с диапазоном, я был уверен и даже проверять не стал пока здесь не наткнулся... Если задаётся Range("A1:B2"), то это должно быть как массив 2х2 ячейки. И обращение к элементу за пределами объекта должно было вызвать ошибку!

согласен.
там вообще с синтаксисом весело - пиши, что хочешь, ошибки не возникнет, но результат почти стихийный... biggrin
 
Ответить
Сообщение
Quote (Alex_ST)
Саш, у массива/словаря/коллекции тоже есть свойства Item
А попробуй-ка ты обратись к Item, номер которого больше чем есть в объекте? Ошибочка будет! Что в общем-то вполне логично.
Вот и с диапазоном, я был уверен и даже проверять не стал пока здесь не наткнулся... Если задаётся Range("A1:B2"), то это должно быть как массив 2х2 ячейки. И обращение к элементу за пределами объекта должно было вызвать ошибку!

согласен.
там вообще с синтаксисом весело - пиши, что хочешь, ошибки не возникнет, но результат почти стихийный... biggrin

Автор - Саня
Дата добавления - 28.04.2012 в 11:07
nerv Дата: Суббота, 28.04.2012, 12:10 | Сообщение № 43
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Я, наверное, привередничаю, но считаю такое комментирование не со всем правильным. Читайте все буквально, вам же будет проще.

код
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Cells.Count > 1 Then Exit Sub

      If Target.Column = 1 Then
          Application.EnableEvents = False
          With Target
              With .Offset(, 4)
                  .Value = Time
                  .NumberFormat = "[$-F400]h:mm:ss AM/PM"
                  .EntireColumn.AutoFit
              End With
                    
              With .Offset(, 5)
                  .Value = Date
                  .NumberFormat = "d/m/yyyy"
                  .EntireColumn.AutoFit
              End With
          End With
          Application.EnableEvents = True
      End If
End Sub
[/vba]

псевдо-код
[vba]
Code
Приватная Процедура [Рабочий]Лист_[Cобытие]Изменение([Параметр передается]ПоЗначению [Имя_переменной]Цель [Объявить]Как [Тип_данных]Диапазон)
      Если Цель.Ячейки.Считать > 1 Тогда ВыйтиИз Процедуры
        
      Если Цель.Столбец = 1 Тогда
          Приложение.РазрешитьСобытия = Ложь
          С Цель
              С .Смещение([строки], [столбцы] 4)
                  .Значение = Время
                  .Номер[Тип?]Формата = "[$-F400]h:mm:ss AM/PM"
                  .ВесьСтолбец.Автоподбр [Ширины]
              Конец С
                
              С .Смещение([строки], [столбцы] 5)
                  .Значение = Дата
                  .Номер[Тип?]Формата = "d/m/yyyy"
                  .ВесьСтолбец.Автоподбр [Ширины]
              Конец С
          Конец С
          Приложение.РазрешитьСобытия = Истина
      Конец Если
Конец Процедуры
[/vba]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Суббота, 28.04.2012, 12:11
 
Ответить
СообщениеЯ, наверное, привередничаю, но считаю такое комментирование не со всем правильным. Читайте все буквально, вам же будет проще.

код
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Cells.Count > 1 Then Exit Sub

      If Target.Column = 1 Then
          Application.EnableEvents = False
          With Target
              With .Offset(, 4)
                  .Value = Time
                  .NumberFormat = "[$-F400]h:mm:ss AM/PM"
                  .EntireColumn.AutoFit
              End With
                    
              With .Offset(, 5)
                  .Value = Date
                  .NumberFormat = "d/m/yyyy"
                  .EntireColumn.AutoFit
              End With
          End With
          Application.EnableEvents = True
      End If
End Sub
[/vba]

псевдо-код
[vba]
Code
Приватная Процедура [Рабочий]Лист_[Cобытие]Изменение([Параметр передается]ПоЗначению [Имя_переменной]Цель [Объявить]Как [Тип_данных]Диапазон)
      Если Цель.Ячейки.Считать > 1 Тогда ВыйтиИз Процедуры
        
      Если Цель.Столбец = 1 Тогда
          Приложение.РазрешитьСобытия = Ложь
          С Цель
              С .Смещение([строки], [столбцы] 4)
                  .Значение = Время
                  .Номер[Тип?]Формата = "[$-F400]h:mm:ss AM/PM"
                  .ВесьСтолбец.Автоподбр [Ширины]
              Конец С
                
              С .Смещение([строки], [столбцы] 5)
                  .Значение = Дата
                  .Номер[Тип?]Формата = "d/m/yyyy"
                  .ВесьСтолбец.Автоподбр [Ширины]
              Конец С
          Конец С
          Приложение.РазрешитьСобытия = Истина
      Конец Если
Конец Процедуры
[/vba]

Автор - nerv
Дата добавления - 28.04.2012 в 12:10
Alex_ST Дата: Суббота, 28.04.2012, 12:34 | Сообщение № 44
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
nerv,
если это шутка, то смайлик можно было бы поставить. smile
А если нет, то Вы первый, кто считает не правильным мой стиль программирования и комментирования angry



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщениеnerv,
если это шутка, то смайлик можно было бы поставить. smile
А если нет, то Вы первый, кто считает не правильным мой стиль программирования и комментирования angry

Автор - Alex_ST
Дата добавления - 28.04.2012 в 12:34
Serge_007 Дата: Суббота, 28.04.2012, 12:45 | Сообщение № 45
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Alex_ST)
если это шутка, то смайлик можно было бы поставить.

Алекс, неужели ты на планете не привык к шуткам Юры М? Он тоже смайлы редко ставит smile

Quote (nerv)
псевдо-код

Прикольно smile
Вот так:
Code
Процедура усВыгрузитьОстаткиТоваров () Экспорт

   РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.усВыгрузкаОстатков);
    МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("РегламентноеЗадание, Состояние", РегламентноеЗадание, СостояниеФоновогоЗадания.Активно));
    Если МассивЗаданий.Количество() > 1  Тогда
     Возврат;
    КонецЕсли;
  усВыполнитьВыгрузкуОстатков();

Конецпроцедуры

выглядит реально действующий код для 1С.
Похоже?


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Alex_ST)
если это шутка, то смайлик можно было бы поставить.

Алекс, неужели ты на планете не привык к шуткам Юры М? Он тоже смайлы редко ставит smile

Quote (nerv)
псевдо-код

Прикольно smile
Вот так:
Code
Процедура усВыгрузитьОстаткиТоваров () Экспорт

   РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.усВыгрузкаОстатков);
    МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("РегламентноеЗадание, Состояние", РегламентноеЗадание, СостояниеФоновогоЗадания.Активно));
    Если МассивЗаданий.Количество() > 1  Тогда
     Возврат;
    КонецЕсли;
  усВыполнитьВыгрузкуОстатков();

Конецпроцедуры

выглядит реально действующий код для 1С.
Похоже?

Автор - Serge_007
Дата добавления - 28.04.2012 в 12:45
Alex_ST Дата: Суббота, 28.04.2012, 13:34 | Сообщение № 46
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Да, Серёга … Код из 1С прикольный. Никогда даже не пробовал посмотреть. Думал, что там какой-то свой язык. А оказывается в 1С тот же VBA, но только с переведёнными на великий, могучий и терпеливый операторами!

Наверное и к Ёкселю эти же люди подбирались, но им вовремя по рукам дали и они только формулы перевести успели biggrin



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеДа, Серёга … Код из 1С прикольный. Никогда даже не пробовал посмотреть. Думал, что там какой-то свой язык. А оказывается в 1С тот же VBA, но только с переведёнными на великий, могучий и терпеливый операторами!

Наверное и к Ёкселю эти же люди подбирались, но им вовремя по рукам дали и они только формулы перевести успели biggrin

Автор - Alex_ST
Дата добавления - 28.04.2012 в 13:34
Serge_007 Дата: Суббота, 28.04.2012, 13:55 | Сообщение № 47
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Alex_ST)
Код из 1С прикольный. Никогда даже не пробовал посмотреть. Думал, что там какой-то свой язык. А оказывается в 1С тот же VBA, но только с переведёнными на великий, могучий и терпеливый операторами!

А мы это уже обсуждали smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Alex_ST)
Код из 1С прикольный. Никогда даже не пробовал посмотреть. Думал, что там какой-то свой язык. А оказывается в 1С тот же VBA, но только с переведёнными на великий, могучий и терпеливый операторами!

А мы это уже обсуждали smile

Автор - Serge_007
Дата добавления - 28.04.2012 в 13:55
Alex_ST Дата: Суббота, 28.04.2012, 14:06 | Сообщение № 48
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Я начало того топика посмотрел, не заинтересовало, вот и не стал дальше читать.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеЯ начало того топика посмотрел, не заинтересовало, вот и не стал дальше читать.

Автор - Alex_ST
Дата добавления - 28.04.2012 в 14:06
nerv Дата: Суббота, 28.04.2012, 14:13 | Сообщение № 49
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Quote (Alex_ST)
Наверное и к Ёкселю эти же люди подбирались, но им вовремя по рукам дали и они только формулы перевести успели biggrin

Главное, что до Excel'я не добрались разработчики Word'а killed


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Quote (Alex_ST)
Наверное и к Ёкселю эти же люди подбирались, но им вовремя по рукам дали и они только формулы перевести успели biggrin

Главное, что до Excel'я не добрались разработчики Word'а killed

Автор - nerv
Дата добавления - 28.04.2012 в 14:13
Alex_ST Дата: Суббота, 28.04.2012, 14:17 | Сообщение № 50
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
А особенно - разработчики таблиц Ворда! fear



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА особенно - разработчики таблиц Ворда! fear

Автор - Alex_ST
Дата добавления - 28.04.2012 в 14:17
nerv Дата: Суббота, 28.04.2012, 18:13 | Сообщение № 51
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Кстати, вопрос на засыпку: "как в Word обойти таблицу с объединенными ячейками"?


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеКстати, вопрос на засыпку: "как в Word обойти таблицу с объединенными ячейками"?

Автор - nerv
Дата добавления - 28.04.2012 в 18:13
Alex_ST Дата: Суббота, 28.04.2012, 20:20 | Сообщение № 52
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
А что значит "обойти"?
Перебрать все ячейки что ли?
Но в любом случае не знаю, т.к. программирование объектной модели Ворда для меня - тёмный лес.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеА что значит "обойти"?
Перебрать все ячейки что ли?
Но в любом случае не знаю, т.к. программирование объектной модели Ворда для меня - тёмный лес.

Автор - Alex_ST
Дата добавления - 28.04.2012 в 20:20
nerv Дата: Воскресенье, 29.04.2012, 14:41 | Сообщение № 53
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Quote (Alex_ST)
Перебрать все ячейки что ли?

Ага. Только при этом мне еще нужно знать как они объединены.

Пока у меня есть этот код (ни о чем)
[vba]
Code
Sub example()
      Dim cell As cell
        
      For Each cell In ActiveDocument.Tables(1).Range.Cells
          MsgBox cell.Range.Text
          MsgBox cell.ColumnIndex
          MsgBox cell.RowIndex
      Next

End Sub
[/vba]
и эта таблица (см. файл)
Чтобы все стало уж совсем ясно: мне нужно построить html-таблицу на основе таблицы Word
К сообщению приложен файл: example_table.zip (26.4 Kb)


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Воскресенье, 29.04.2012, 14:52
 
Ответить
Сообщение
Quote (Alex_ST)
Перебрать все ячейки что ли?

Ага. Только при этом мне еще нужно знать как они объединены.

Пока у меня есть этот код (ни о чем)
[vba]
Code
Sub example()
      Dim cell As cell
        
      For Each cell In ActiveDocument.Tables(1).Range.Cells
          MsgBox cell.Range.Text
          MsgBox cell.ColumnIndex
          MsgBox cell.RowIndex
      Next

End Sub
[/vba]
и эта таблица (см. файл)
Чтобы все стало уж совсем ясно: мне нужно построить html-таблицу на основе таблицы Word

Автор - nerv
Дата добавления - 29.04.2012 в 14:41
Serge_007 Дата: Воскресенье, 29.04.2012, 17:20 | Сообщение № 54
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (nerv)
"как в Word обойти таблицу с объединенными ячейками"?

Вообще-то в этой теме это оффтоп...
Саш, у нас ведь есть ветка по "Неэксель" smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (nerv)
"как в Word обойти таблицу с объединенными ячейками"?

Вообще-то в этой теме это оффтоп...
Саш, у нас ведь есть ветка по "Неэксель" smile

Автор - Serge_007
Дата добавления - 29.04.2012 в 17:20
light26 Дата: Воскресенье, 29.04.2012, 21:02 | Сообщение № 55
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (Serge_007)
Саш, у нас ведь есть ветка по "Неэксель"

Есть личности, которым за их заслуги можно простить некоторые шалости )))
Офтоп ужо давно пошел )))


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Quote (Serge_007)
Саш, у нас ведь есть ветка по "Неэксель"

Есть личности, которым за их заслуги можно простить некоторые шалости )))
Офтоп ужо давно пошел )))

Автор - light26
Дата добавления - 29.04.2012 в 21:02
Serge_007 Дата: Воскресенье, 29.04.2012, 21:49 | Сообщение № 56
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (light26)
Есть личности, которым за их заслуги можно простить некоторые шалости )

А я никому банов и не навешивал smile
Просто можно создать новую тему и перенести оффтоп здешний туда где он оффтопом быть перестанет smile


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (light26)
Есть личности, которым за их заслуги можно простить некоторые шалости )

А я никому банов и не навешивал smile
Просто можно создать новую тему и перенести оффтоп здешний туда где он оффтопом быть перестанет smile

Автор - Serge_007
Дата добавления - 29.04.2012 в 21:49
light26 Дата: Понедельник, 30.04.2012, 08:21 | Сообщение № 57
Группа: Друзья
Ранг: Старожил
Сообщений: 1350
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Quote (Serge_007)
А я никому банов и не навешивал

А тебя никто ни в чем не упрекал smile


Я не волшебник. Я только учусь
 
Ответить
Сообщение
Quote (Serge_007)
А я никому банов и не навешивал

А тебя никто ни в чем не упрекал smile

Автор - light26
Дата добавления - 30.04.2012 в 08:21
Chelius Дата: Суббота, 16.03.2013, 03:47 | Сообщение № 58
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Может кто сказать как найти Каждое пересечение регионов? Ведь в результате получается только последнее, в форме региона!
Например
[vba]
Код

Set Rng1 = Intersect(rngBig, rngTreug)
[/vba]
Результат последний регион - пересечение. Как найти каждый?
пробывал конструкцию типа
[vba]
Код

For Each rngTreug In rngBig
     rngTreug.Interior.ColorIndex = 5 'закрасить синим
Next
[/vba]
результат отрицательній
 
Ответить
СообщениеМожет кто сказать как найти Каждое пересечение регионов? Ведь в результате получается только последнее, в форме региона!
Например
[vba]
Код

Set Rng1 = Intersect(rngBig, rngTreug)
[/vba]
Результат последний регион - пересечение. Как найти каждый?
пробывал конструкцию типа
[vba]
Код

For Each rngTreug In rngBig
     rngTreug.Interior.ColorIndex = 5 'закрасить синим
Next
[/vba]
результат отрицательній

Автор - Chelius
Дата добавления - 16.03.2013 в 03:47
nilem Дата: Суббота, 16.03.2013, 07:08 | Сообщение № 59
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Цитата (Alex_ST)
...Target(1, 5) вместо правильного Target.Offset(0, 4)...

Имхо, Target(1, 5) как раз лучше/правильнее, чем Target.Offset(0, 4). Ведь в 1-м случае мы (ну, или компилятор) просто отсчитываем индексы (1 и 5) от Target, а во 2-м - приходится считать индексы (0 и 4) и еще выполнять метод Offset. Мелочь, конечно, но все же...
Еще вот здесь

Упс, просмотрел - тема, оказывается, прошлогодняя и на 3 страницы smile


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Суббота, 16.03.2013, 07:11
 
Ответить
Сообщение
Цитата (Alex_ST)
...Target(1, 5) вместо правильного Target.Offset(0, 4)...

Имхо, Target(1, 5) как раз лучше/правильнее, чем Target.Offset(0, 4). Ведь в 1-м случае мы (ну, или компилятор) просто отсчитываем индексы (1 и 5) от Target, а во 2-м - приходится считать индексы (0 и 4) и еще выполнять метод Offset. Мелочь, конечно, но все же...
Еще вот здесь

Упс, просмотрел - тема, оказывается, прошлогодняя и на 3 страницы smile

Автор - nilem
Дата добавления - 16.03.2013 в 07:08
Alex_ST Дата: Суббота, 16.03.2013, 09:39 | Сообщение № 60
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3209
Репутация: 609 ±
Замечаний: 0% ±

2003
Упс! Не дочитал до конца и кинулся искать когда же я это говорил smile
Минут 5 потратил пока нашёл. А потом наконец-то пост Николая дочитал чтобы посетовать на то, что еле нашёл и что это было почти год назад 27.04.2012, 20:06 biggrin

Конечно, очень не удобно, что движок форума хотя бы дату поста в цитату не вставляет. Я уж даже и не мечтаю о ссылке на него, как сделано, например, на 4PDA



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеУпс! Не дочитал до конца и кинулся искать когда же я это говорил smile
Минут 5 потратил пока нашёл. А потом наконец-то пост Николая дочитал чтобы посетовать на то, что еле нашёл и что это было почти год назад 27.04.2012, 20:06 biggrin

Конечно, очень не удобно, что движок форума хотя бы дату поста в цитату не вставляет. Я уж даже и не мечтаю о ссылке на него, как сделано, например, на 4PDA

Автор - Alex_ST
Дата добавления - 16.03.2013 в 09:39
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Прошу помочь разобраться в макросе с Target и Intersect (Новое детище.. ну хорошо, не детище, так, детеныш ))
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

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