Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.01.2009, 23:52   #11
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
результат операции сравнения ячейки с датой и пустой строки
загадочная фраза. Я могу подсказать, что я ячейка с датой всегда больше пустой строки, зачем сравнивать, если результат очевиден?
Цитата:
Чего-то я не пойму как работает эта формула
я уже неоднократно признавался на форуме, что сам не понимаю, как работают формулы, которые я пишу, просто я пишу до тех пор, пока не получится нужный результат.
А серьезно, готов обьяснить логику любой из тех, что написал... только дайте ее в контексте (на листе с данными).
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 13.01.2009, 23:57   #12
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
загадочная фраза. Я могу подсказать, что я ячейка с датой всегда больше пустой строки, зачем сравнивать, если результат очевиден?…
Нужно определить есть в ячейке дата или нет, т.е. если результат False, то при умножении на массу в той же строке получим ноль.

Цитата:
Сообщение от IgorGO Посмотреть сообщение
…А серьезно, готов обьяснить логику любой из тех, что написал... только дайте ее в контексте (на листе с данными).
Давай с утра, я уже не соображаю.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Старый 14.01.2009, 04:36   #13
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Получилось!!!!!
Сделал, так как и думал. IgorGO, огромное спасибо. Дякую, дядьку!
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Старый 14.01.2009, 11:49   #14
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

EducatedFool, при выполнении макроса из 8 поста происходит ошибка. Дело в том, что мы копируем лист вместе с процедурой, которая реагирует на изменение листа. Соответственно, когда делаем .UsedRange.Offset(2).Clear, то вызывается эта процедура Worksheet_Change(ByVal Target As Range) и дает ошибку.
Выхода 3:
  1. Удалить процедуру из листа сразу после копирования
  2. Копировать без процедуры
  3. Копировать только нужный диапазон ячеек
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Старый 14.01.2009, 16:16   #15
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
вызывается эта процедура Worksheet_Change(ByVal Target As Range) и дает ошибку
Так, может, подправить код как раз в этой процедуре?

Цитата:
Выхода 3:
Удалить процедуру из листа сразу после копирования
Копировать без процедуры
Копировать только нужный диапазон ячеек
Удалить процедуру из листа - не проблема.

Но зачем, если можно просто на время выполнения макроса отключить обработку событий...
Например, так:

Код:
Sub test2()
    On Error Resume Next    ' пригодится :)
    Application.ScreenUpdating = False    ' отключаем обновление экрана
    Application.EnableEvents = False    ' отключаем обработку событий
    
    For Each oWorksheet In ThisWorkbook.Worksheets
        oWorksheet.Copy ThisWorkbook.Worksheets(1)    ' копируем лист (новый лист становится активным)
        With ActiveSheet
            .UsedRange.Offset(2).Clear    ' стираем всё, начиная с 3-й строки
            .Name = "Изменения в «" & oWorksheet.Name & "»"
        End With
    Next oWorksheet
    
    Application.EnableEvents = True    ' включаем снова обработку событий
End Sub
EducatedFool вне форума
Старый 14.01.2009, 16:19   #16
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Так, может, подправить код как раз в этой процедуре?
Вот именно!
Код:
Public Sub fWriteChanges(ByVal Target As Range)
  On Error GoTo ErrorHandler
  Dim oEditedRow As Object
  Set oEditedRow = Worksheets("Изменения в «" & Target.Worksheet.Name & "»").Rows(Target.Row) ' строка для вставки на листе ИЗМЕНЕНИЯ
  Target.EntireRow.Copy oEditedRow    ' копируем строку
  oEditedRow.Cells(Target.Column).Interior.Color = vbCyan ' окрашиваем изменённую ячейку
ErrorHandler:
End Sub
Цитата:
Сообщение от EducatedFool Посмотреть сообщение
…Удалить процедуру из листа - не проблема.…
что-то типа такого будет:
Код:
ThisWorkbook.Activesheet.VBComponents.CodeModule.DeleteProc
Спасибо за помощь.
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 14.01.2009 в 16:28.
viter.alex вне форума
Старый 14.01.2009, 16:26   #17
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ну можно и эту процедуру подправить:

Код:
Public Sub fWriteChanges(ByVal Target As Range)
    On Error Resume Next
    Dim oEditedRow As Range
    Set oEditedRow = Worksheets("Изменения в «" & Target.Worksheet.Name & "»").Rows(Target.Row)    ' строка для вставки на листе ИЗМЕНЕНИЯ
    If oEditedRow Is Nothing Then Exit Sub
    Target.EntireRow.Copy oEditedRow    ' копируем строку
    oEditedRow.Cells(Target.Column).Interior.Color = vbCyan    ' окрашиваем изменённую ячейку
End Sub

Хотя я бы всё же сделал так:
Код:
Sub test2()
    Application.EnableEvents = False    ' отключаем обработку событий
' код
    Application.EnableEvents = True    ' включаем снова обработку событий
End Sub
EducatedFool вне форума
Старый 14.01.2009, 17:58   #18
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Ну можно и эту процедуру подправить:
Совершенству нет предела.

Смотри, я хочу выделить диапазон от нужной мне ячейки R9C1 до последнего непустого столбца и последней непустой строки, но что-то не работает.
Код:
Range(Cells(9, 1), _
        Cells(ActiveSheet.Range.SpecialCells(xlCellTypeLastCell).Row, _
              ActiveSheet.Range.SpecialCells(xlCellTypeLastCell).Column)).Select
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Старый 14.01.2009, 18:05   #19
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуй так:
Код:
    Range(Cells(9, 1), Cells(ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row, ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column)).Select
А лучше так:
Код:
Range(Cells(9, 1), Cells.SpecialCells(xlCellTypeLastCell)).Select
И вообще, лучше избавляться от методов Select и Activate в своём коде.
В 99 процентах случаев можно обойтись без них (и код будет быстрее работать)

Последний раз редактировалось EducatedFool; 14.01.2009 в 18:08.
EducatedFool вне форума
Старый 14.01.2009, 18:10   #20
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Попробуй так:
Код:
    Range(Cells(9, 1), Cells(ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row, ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column)).Select
А лучше так:
Код:
Range(Cells(9, 1), Cells.SpecialCells(xlCellTypeLastCell)).Select
И вообще, лучше избавляться от методов Select и Activate в своём коде.
В 99 процентах случаев можно обойтись без них (и код будет быстрее работать)
Попробовал. Почему-то выделяет и много пустых строк. Хотя там точно ничего нет. А выделять надо, т.к. я к ним применяю форматирование (рамка, заливка и т.д.)
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод данных в разных падежах с access. sashaslam БД в Delphi 3 28.05.2010 22:48
удаление значений в ячейках pirat:) Microsoft Office Excel 4 23.12.2008 20:54
Суммирование данных в ячейках запроса Kikobuster Microsoft Office Access 5 28.11.2008 14:39
Выплывающий календарь в определенных ячейках Neo007 Microsoft Office Excel 1 12.09.2008 12:50
как ограничить возможность ввода формата в ячейках? Ivo4ka Microsoft Office Excel 23 14.02.2008 09:02