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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2016, 15:59   #11
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

потому что если посмотреть макрос - то из него не видно что есть разница между строками 3 и 4 - цикл
Код:
For r = 3 To sFT.Cells(sFT.Rows.Count, 1).End(xlUp).Row
запущен со строки 3 и потом точно также обрабатывает строку 4, 5, 6... не делая между ними НИКАКОЙ разницы
видимо нужно было написать:
Код:
For r = 3 To sFT.Cells(sFT.Rows.Count, 1).End(xlUp).Row Step 2
очевидно что к данным в строке 4 (6, 8, 10...) следует в том же цикле обращаться как
Код:
.Range("ХЗ_куда").Formula = "=" & sFT.Cells(r+1, 1).Address(external:=True)
и один вопрос а зачем нужна wb1 (да еще и таким удивительной инициализацией - сначала получить ошибку, потом обработаеть ее, присвоить wb1) - если по итогу это тоже что и wb и обе они это книга с макросом ThisWorkbook??? к чему этот цирк?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.01.2016, 16:06   #12
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я бы в начале обьявил две константы
Код:
    Const st As String = "c15 d15 g15 h15 h16 h17 h18 i15 i16 i17 i18 j16 k16 l15 l16 l17 l18 g26"
    Const sc As String = "1 23 3 4 5 6 7 8 9 10 11 16 17 12 13 14 15 27"
а потом это все:
Код:
            .Range("C15").Formula = "=" & sFT.Cells(r, 1).Address(external:=True)
            .Range("D15").Formula = "=" & sFT.Cells(r, 23).Address(external:=True)
            .Range("G15").Formula = "=" & sFT.Cells(r, 3).Address(external:=True)
            .Range("H15").Formula = "=" & sFT.Cells(r, 4).Address(external:=True)
            .Range("H16").Formula = "=" & sFT.Cells(r, 5).Address(external:=True)
            .Range("H17").Formula = "=" & sFT.Cells(r, 6).Address(external:=True)
            .Range("H18").Formula = "=" & sFT.Cells(r, 7).Address(external:=True)
            .Range("I15").Formula = "=" & sFT.Cells(r, 8).Address(external:=True)
            .Range("I16").Formula = "=" & sFT.Cells(r, 9).Address(external:=True)
            .Range("I17").Formula = "=" & sFT.Cells(r, 10).Address(external:=True)
            .Range("I18").Formula = "=" & sFT.Cells(r, 11).Address(external:=True)
            .Range("J16").Formula = "=" & sFT.Cells(r, 16).Address(external:=True)
            .Range("K16").Formula = "=" & sFT.Cells(r, 17).Address(external:=True)
            .Range("L15").Formula = "=" & sFT.Cells(r, 12).Address(external:=True)
            .Range("L16").Formula = "=" & sFT.Cells(r, 13).Address(external:=True)
            .Range("L17").Formula = "=" & sFT.Cells(r, 14).Address(external:=True)
            .Range("L18").Formula = "=" & sFT.Cells(r, 15).Address(external:=True)
            .Range("G26").Formula = "=" & sFT.Cells(r, 27).Address(external:=True)
я бы заменил на 1 строку
Код:
.Range(Split(st)(I)).Formula = "=" & sFT.Cells(r, Val(Split(sc)(I))).Address(external:=True)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.01.2016, 16:13   #13
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

и в итоге все стало бы так:
Код:
Sub my1()
  Dim r As Long, c As Long
  Dim wb As Workbook, sFT As Worksheet
  Const st As String = "c15 d15 g15 h15 h16 h17 h18 i15 i16 i17 i18 j16 k16 l15 l16 l17 l18 g26"
  Const sc As String = "1 23 3 4 5 6 7 8 9 10 11 16 17 12 13 14 15 27"
  Set wb = ThisWorkbook:  Set sFT = wb.Worksheets("FT")
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  On Error GoTo erHdl
  For r = 3 To sFT.Cells(sFT.Rows.Count, 1).End(xlUp).Row Step 2
    wb.Worksheets("Шаблон").Copy after:=wb.Worksheets(wb.Sheets.Count)
    With wb.Worksheets(wb.Sheets.Count)
      .Name = Left(sFT.Cells(r, 1), 31)
      For c = 0 To UBound(Split(st))
        .Range(Split(st)(I)).Formula = "=" & sFT.Cells(r, Val(Split(sc)(I))).Address(external:=True)
      Next
    End With
  Next r
  MsgBox "Готово"
  Application.ScreenUpdating = True
  Application.Calculation = xlCalculationAutomatic
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 17.01.2016, 18:15   #14
eemil
Пользователь
 
Регистрация: 15.01.2016
Сообщений: 24
По умолчанию

IgorGO, спасибо вам огромное! Вы очень грамотный, это видно не вооруженным взглядом. У меня такая эйфория из-за того, что я только начинаю познавать все прелести программирования ) Сам этот код я не писал, поэтому на ваши замечания ответить не могу. Попробовал ваш итоговый код, но выдает ошибку "Lable not definded", ругается на "On Error GoTo erHdl". Но я так же воспользовался вашим советом и меня устроило такое решение - "step 2" и "i+1" . Я понаглею еще тут немного и спрошу у вас, как можно применить данный макрос для Word, то есть чтобы из этой же таблицы создавался на основе шаблона (вордовского) док. в Word с множеством листов?
eemil вне форума Ответить с цитированием
Старый 17.01.2016, 19:05   #15
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в том макросе что я исправил нужно удалить или закомментировать эту строку
Код:
On Error GoTo erHdl
осталась с прошлого, недосмотрел
раз программирование только осваиваете посмотрите это пример:
http://excelvba.ru/programmes/FillDocuments
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в макросе Оксана33 Microsoft Office Excel 9 20.12.2015 16:52
Ошибка в макросе Арианна Microsoft Office Excel 15 14.10.2013 15:06
Ошибка в макросе runik Microsoft Office Excel 5 19.11.2012 17:28
ВПР в макросе (где-то ошибка) Флина Microsoft Office Excel 3 26.01.2011 04:55
Почему, ошибка в макросе valerij Microsoft Office Excel 8 27.02.2010 01:48