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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2012, 16:42   #1
Zlodeyatel
 
Регистрация: 19.09.2012
Сообщений: 3
По умолчанию Как сделать так чтоб разграниченные ячейки не считались заполненными

Добрый день, с целью облегчения трудовых будней, да и интереса для, решил покопаться в Екселе по глубже. Там код подсмотрел, самоучители онлайн полистал. Нарисовал небольшой макрос для двусторонней печати и ведения журнала напечатанного. Но возникла проблема, если в журнале строчки и столбцы разграничить то макрос их за пустые не считает, а не разграничивать, не удобно для чтения. И если строку в середине журнала очищаешь то он туда информацию не заносит, а все равно пишет дальше.
помогите советом плз, может книжка какая умная есть, интересно мне это но пока совсем чайник
Заранее благодарен.
Вложения
Тип файла: rar Путевой лист автобуса форма № 6 спец.rar (46.1 Кб, 14 просмотров)
Zlodeyatel вне форума Ответить с цитированием
Старый 24.09.2012, 18:56   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Если встечается окно в две пустые строки,то определяется строка для вставки
Select ы не люблю, код дальше не правил
Код:
 Sub ДвусторонняяПечать()
   Sheets("стр1").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
    MsgBox "Первая страница напечатана. Переворачивайте лист", vbInformation
  Sheets("стр2").PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False  
'============================ 
  Dim XX

        Set iList = Sheets("журнал путевых листов")
        lLastRow = iList.Cells(iList.Rows.Count, 5).End(xlUp).Row
        iRow = lLastRow + 1
        XX = iList.Range(iList.Cells(1, 5), iList.Cells(lLastRow, 5))

        For n = 4 To lLastRow - 1
                If XX(n, 1) = "" And XX(n, 1) = "" Then
                        iRow = n + 1
                        Exit For
                End If
        Next
'===============================
'Дальше ваш код

    Application.Goto Reference:=Worksheets("стр1").Range("O6:T7")
    Selection.Copy
    Sheets("журнал путевых листов").Select
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 24.09.2012, 21:40   #3
Zlodeyatel
 
Регистрация: 19.09.2012
Сообщений: 3
По умолчанию

Спасибо с границами помогло, но с этим кодом возникла проблема, если удаляешь не последнюю строчку, то макрос начинает заменять следующую после удаленной строчку и удаляет все что было дальше))))

Последний раз редактировалось Zlodeyatel; 24.09.2012 в 21:45.
Zlodeyatel вне форума Ответить с цитированием
Старый 24.09.2012, 22:51   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Я допустил ошибку
Так должно быть
Код:
     For n = 4 To lLastRow - 1
                If XX(n, 1) = "" And XX(n+1, 1) = "" Then
                        iRow = n + 1
                        Exit For
                End If
        Next
Если вы четко определитесь,что между строками должна быть одна и только одна пустая строка,и данные заносятся в одну строку,тогда все будет работать как часы.
Логика определения строки вставки=если две строки пустые,значит можно данные вставлять.
Попробуйте подстраховаться и поставить условие на 3 пустых строки
Код:
    For n = 4 To lLastRow - 2
                If XX(n, 1) = "" And XX(n+1, 1) = "" And XX(n+2, 1) = ""  Then
                        iRow = n + 1
                        Exit For
                End If
        Next
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 24.09.2012, 23:25   #5
Zlodeyatel
 
Регистрация: 19.09.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Логика определения строки вставки=если две строки пустые,значит можно данные вставлять.
Можно и так, но я имел ввиду, что данные заносятся в первую попавшуюся пустую строку, не зависимо от того что дальше.
при следующей записи происходит снова проверка и запись опять же в пустую строку, она может быть как следующей так и через несколько строк, (если я что то удалил из массива)
что то такое:
Dim XX

Set iList = Sheets("журнал путевых листов")
lLastRow = iList.Cells(iList.Rows.Count, 5).End(xlUp).Row
iRow = lLastRow + 1
XX = iList.Range(iList.Cells(1, 5), iList.Cells(lLastRow, 5))

For n = 4 To lLastRow - 1
If XX(n, 1) = "" Then
iRow = n
Exit For
End If
Next

Но вот почему он стирает следующую строчку?(((
Zlodeyatel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в Dreamweaver сделать так чтоб картинка или рамка стояли на месте kesha477 HTML и CSS 3 28.08.2011 16:54
Как сделать так, чтоб когда заходит определённый друг в контакт мне приходило смс-уведомление? romantik2011 Свободное общение 7 29.07.2011 15:08
pascal, строки. Как сделать, чтоб считались пробелы? AlexGur Помощь студентам 1 27.01.2009 08:28
как сделать так чтоб моя прога при запуске о.с. стартовала steck Общие вопросы Delphi 11 03.04.2007 20:10