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

Вход

Регистрация

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

 

= Мир MS Excel/Условие на 10 подряд пустых строк. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Условие на 10 подряд пустых строк. (Макросы/Sub)
Условие на 10 подряд пустых строк.
Roman777 Дата: Понедельник, 02.03.2015, 16:51 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Добрый день!
Пишу код, который будет мне из 7-ми разных книг копировать данные (таблицы) в 1 новую книгу.
Проблема лишь в том, что подсчёт заполненных строк в каждой книге я ищу путём поиска последней пустой строки. Но в некоторых книгах в таблице есть нулевые строки, но их подряд идёт не больше 5-10 пустых строк за раз. Поэтому определяющим условием конца таблички в книге я хочу определить как 10 подряд пустых строк.
И именно в этом выражении кода у меня появляется ошибка (sumCell = sumCell & ActiveWorkbook.Worksheets(t).Cells(i + 1 + s, 1).Value) Ошибка: application-defined or object-defined error. Не пойму в чём дело. Не серчайте на громоздкость и мою неграмотность).
[vba]
Код
Application.ScreenUpdating = False

  Dim i, i1, i2, t As Long
  Dim j As Long, n As Long
  Dim sheet As Worksheet
  Dim Nazvanie As String
  Dim Nm(8) As String
  Dim ShtNm(8) As String
  Dim NewWB As Workbook
  Dim s, Ssum As Long
   
   
  Ssum = 10 'Количество пустых строк определяющее конец листа
   
  Nazvanie = "Общий прайс" 'Вписать название листа, на который будет выводиться информация
    
  pathNWB = ActiveWorkbook.Path & "\" 'Общий путь
  nameNWB = "Общий прайс.xlsx"
   
           MsgBox (pathNWB)
   
Set NewWB = Workbooks.Add

NewWB.Worksheets(1).Name = "Общий прайс"

Nm(1) = pathNWB & "ABB" & "\" & "ABB.xlsx"
Nm(2) = pathNWB & "DKC" & "\" & "DKC.xls"
Nm(3) = pathNWB & "EKF" & "\" & "EKF.xlsx"
Nm(4) = pathNWB & "IEK" & "\" & "IEK.xlsx"
Nm(5) = pathNWB & "Legrand" & "\" & "Legrand.xls"
Nm(6) = pathNWB & "SE_DEKraft" & "\" & "SE_DEKraft.xlsm"
Nm(7) = pathNWB & "Rittal" & "\" & "rittal.xls"

ShtNm(1) = "НОВЫЙ"
ShtNm(2) = "Прайс ДКС"
ShtNm(3) = "Продукция EKF electrotechnica"
ShtNm(4) = "1"
ShtNm(5) = "ТАРИФ"
ShtNm(6) = "Tariff_Moscow"
ShtNm(7) = "Price_list_34_10"

For n = 1 To 7
  If n = 1 Then
  k = 1
  Else
  k = 0
  End If

Workbooks.Open Nm(n)

  For t = 1 To ActiveWorkbook.Worksheets.Count
     
  If ActiveWorkbook.Worksheets(t).Name = ShtNm(n) Then
    i = 2 - k
    Do
    i = i + 1

    If IsEmpty(ActiveWorkbook.Worksheets(t).Cells(i + 1, 1)) = True Then
     
    For s = 0 To Ssum 'ищем выражение, образованное соединением значений 10 ячеек, следующих после i-й ячейки
    sumCell = sumCell & ActiveWorkbook.Worksheets(t).Cells(i + 1 + s, 1).Value
    Next s
    End If
     
    Loop While Not sumCell = "0" 'поднимаем номер строки до тех пор, пока выражение из 10 строк не будет равно ""
    sumCell = "0"
    j = 21

    i1 = 0
    Do
    i1 = i1 + 1
     
    Loop While Not IsEmpty(NewWB.Worksheets(1).Cells(i1, 1)) = True
    ActiveWorkbook.Worksheets(t).Cells(2 - k, 1).Resize(i, 21).Copy NewWB.Worksheets(1).Cells(i1, 1)
     

  End If

  Next t

Next n

    i1 = 1
    Do
    i1 = i1 + 1
    Loop While Not IsEmpty(NewWB.Worksheets(1).Cells(i1, 1)) = True

    NewWB.Activate
    ActiveWorkbook.Worksheets(1).Cells(1, 1).Resize(i1, 21).Select
       Selection.RowHeight = 15
      With Selection.Borders(xlEdgeLeft)
         .LineStyle = xlContinuous
         .ColorIndex = 0
         .TintAndShade = 0
         .Weight = xlThin
     End With
      
Application.DisplayAlerts = False
NewWB.SaveAs Filename:=pathNB & "1_" & nameNWB
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
[/vba]


Много чего не знаю!!!!
 
Ответить
СообщениеДобрый день!
Пишу код, который будет мне из 7-ми разных книг копировать данные (таблицы) в 1 новую книгу.
Проблема лишь в том, что подсчёт заполненных строк в каждой книге я ищу путём поиска последней пустой строки. Но в некоторых книгах в таблице есть нулевые строки, но их подряд идёт не больше 5-10 пустых строк за раз. Поэтому определяющим условием конца таблички в книге я хочу определить как 10 подряд пустых строк.
И именно в этом выражении кода у меня появляется ошибка (sumCell = sumCell & ActiveWorkbook.Worksheets(t).Cells(i + 1 + s, 1).Value) Ошибка: application-defined or object-defined error. Не пойму в чём дело. Не серчайте на громоздкость и мою неграмотность).
[vba]
Код
Application.ScreenUpdating = False

  Dim i, i1, i2, t As Long
  Dim j As Long, n As Long
  Dim sheet As Worksheet
  Dim Nazvanie As String
  Dim Nm(8) As String
  Dim ShtNm(8) As String
  Dim NewWB As Workbook
  Dim s, Ssum As Long
   
   
  Ssum = 10 'Количество пустых строк определяющее конец листа
   
  Nazvanie = "Общий прайс" 'Вписать название листа, на который будет выводиться информация
    
  pathNWB = ActiveWorkbook.Path & "\" 'Общий путь
  nameNWB = "Общий прайс.xlsx"
   
           MsgBox (pathNWB)
   
Set NewWB = Workbooks.Add

NewWB.Worksheets(1).Name = "Общий прайс"

Nm(1) = pathNWB & "ABB" & "\" & "ABB.xlsx"
Nm(2) = pathNWB & "DKC" & "\" & "DKC.xls"
Nm(3) = pathNWB & "EKF" & "\" & "EKF.xlsx"
Nm(4) = pathNWB & "IEK" & "\" & "IEK.xlsx"
Nm(5) = pathNWB & "Legrand" & "\" & "Legrand.xls"
Nm(6) = pathNWB & "SE_DEKraft" & "\" & "SE_DEKraft.xlsm"
Nm(7) = pathNWB & "Rittal" & "\" & "rittal.xls"

ShtNm(1) = "НОВЫЙ"
ShtNm(2) = "Прайс ДКС"
ShtNm(3) = "Продукция EKF electrotechnica"
ShtNm(4) = "1"
ShtNm(5) = "ТАРИФ"
ShtNm(6) = "Tariff_Moscow"
ShtNm(7) = "Price_list_34_10"

For n = 1 To 7
  If n = 1 Then
  k = 1
  Else
  k = 0
  End If

Workbooks.Open Nm(n)

  For t = 1 To ActiveWorkbook.Worksheets.Count
     
  If ActiveWorkbook.Worksheets(t).Name = ShtNm(n) Then
    i = 2 - k
    Do
    i = i + 1

    If IsEmpty(ActiveWorkbook.Worksheets(t).Cells(i + 1, 1)) = True Then
     
    For s = 0 To Ssum 'ищем выражение, образованное соединением значений 10 ячеек, следующих после i-й ячейки
    sumCell = sumCell & ActiveWorkbook.Worksheets(t).Cells(i + 1 + s, 1).Value
    Next s
    End If
     
    Loop While Not sumCell = "0" 'поднимаем номер строки до тех пор, пока выражение из 10 строк не будет равно ""
    sumCell = "0"
    j = 21

    i1 = 0
    Do
    i1 = i1 + 1
     
    Loop While Not IsEmpty(NewWB.Worksheets(1).Cells(i1, 1)) = True
    ActiveWorkbook.Worksheets(t).Cells(2 - k, 1).Resize(i, 21).Copy NewWB.Worksheets(1).Cells(i1, 1)
     

  End If

  Next t

Next n

    i1 = 1
    Do
    i1 = i1 + 1
    Loop While Not IsEmpty(NewWB.Worksheets(1).Cells(i1, 1)) = True

    NewWB.Activate
    ActiveWorkbook.Worksheets(1).Cells(1, 1).Resize(i1, 21).Select
       Selection.RowHeight = 15
      With Selection.Borders(xlEdgeLeft)
         .LineStyle = xlContinuous
         .ColorIndex = 0
         .TintAndShade = 0
         .Weight = xlThin
     End With
      
Application.DisplayAlerts = False
NewWB.SaveAs Filename:=pathNB & "1_" & nameNWB
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Roman777
Дата добавления - 02.03.2015 в 16:51
_Boroda_ Дата: Понедельник, 02.03.2015, 16:53 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ищите не сверху вниз, а снизу (от последней строки) вверх
[vba]
Код
r_=range("A" & rows.Count).end(xlUp).row
[/vba]
Это аналогично тому, как если бы Вы встали в полследнюю ячейку столбца А и нажали бы Контрл + Стрелка_вверх. Номер строки той ячейки, в которой Вы оказались бы, и будет r_


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеИщите не сверху вниз, а снизу (от последней строки) вверх
[vba]
Код
r_=range("A" & rows.Count).end(xlUp).row
[/vba]
Это аналогично тому, как если бы Вы встали в полследнюю ячейку столбца А и нажали бы Контрл + Стрелка_вверх. Номер строки той ячейки, в которой Вы оказались бы, и будет r_

Автор - _Boroda_
Дата добавления - 02.03.2015 в 16:53
Roman777 Дата: Понедельник, 02.03.2015, 16:57 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
_Boroda_, Плин, точно! Но в моём случае непонятно всё-таки, чем вызвана ошибка. И можно ли делать так:
[vba]
Код
For s = 0 To Ssum 'ищем выражение, образованное соединением значений 10 ячеек, следующих после i-й ячейки
sumCell = sumCell & ActiveWorkbook.Worksheets(t).Cells(i + 1 + s, 1).Value
Next s
[/vba]


Много чего не знаю!!!!
 
Ответить
Сообщение_Boroda_, Плин, точно! Но в моём случае непонятно всё-таки, чем вызвана ошибка. И можно ли делать так:
[vba]
Код
For s = 0 To Ssum 'ищем выражение, образованное соединением значений 10 ячеек, следующих после i-й ячейки
sumCell = sumCell & ActiveWorkbook.Worksheets(t).Cells(i + 1 + s, 1).Value
Next s
[/vba]

Автор - Roman777
Дата добавления - 02.03.2015 в 16:57
krosav4ig Дата: Вторник, 03.03.2015, 02:43 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
И можно ли делать так:
низяяяя!!! :p
[vba]
Код
sumCell = Join(Application.Transpose(ActiveWorkbook.Worksheets(1).Cells(i + 1, 1).Resize(10)), "")
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщение
И можно ли делать так:
низяяяя!!! :p
[vba]
Код
sumCell = Join(Application.Transpose(ActiveWorkbook.Worksheets(1).Cells(i + 1, 1).Resize(10)), "")
[/vba]

Автор - krosav4ig
Дата добавления - 03.03.2015 в 02:43
Roman777 Дата: Вторник, 03.03.2015, 09:40 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
krosav4ig, Спасибо. Ваш вариант попробую. А почему нельзя? что именно является ошибкой?


Много чего не знаю!!!!
 
Ответить
Сообщениеkrosav4ig, Спасибо. Ваш вариант попробую. А почему нельзя? что именно является ошибкой?

Автор - Roman777
Дата добавления - 03.03.2015 в 09:40
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Условие на 10 подряд пустых строк. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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