Страницы: 1
RSS
Заполнение данными сразу нескольких бланков VBA, Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными
 
 Всем здоровья и благополучия!
Когда-то где-то нашел макрос , который заполняет шаблон документа данными из выбранной строки (где активная ячейка) в таблице (Лист "Реестр"). В шаблоне (Лист "Печать бланка") имеются именованные области (в примере - 10 областей), в которые циклом вставляются данные. Код работает:

Код
Option Explicit
Private Sub CommandButton1_Click()
Dim nomer_stroki As Long, massiv() As Variant, i As Integer
nomer_stroki = ActiveCell.Row
massiv = Range(Cells(nomer_stroki, 1), Cells(nomer_stroki, 10))
With sh1
    For i = 1 To 10
        .Range("yacheyka_" & i) = massiv(1, i)
    Next
End With
End Sub

Есть задача заполнить несколько шаблонов (до 12-ти) одинаковыми данными (причем не в каждом шаблоне используются все 10 полей данных). Попробовал (пока на три шаблона)организовать второй цикл (по листам) - ругается на второй Next:

Код
Option Explicit
Private Sub CommandButton1_Click()
Dim nomer_stroki As Long, massiv() As Variant, i As Integer, j As Integer
nomer_stroki = ActiveCell.Row
massiv = Range(Cells(nomer_stroki, 1), Cells(nomer_stroki, 10))

For j = 1 To 3
With Sheets("sh" & j)
    For i = 1 To 10
        .Range("yacheyka_" & i) = massiv(1, i)
    Next
'Next
End With
End Sub

Не владею VBA. Писал по логике.
Прошу исправить/подсказать/помочь.
Заранее благодарен!
Изменено: Yuri KUB - 29.09.2019 19:25:19
 
Цитата
ругается на второй Next
Поставьте его после End With
 
Kuzmich, К сожалению, не работает.
 
End With без апострофа ('),  
 
Настя_Nastya, Теперь другая ошибка.
 
Код
With Sheets(j)
 
Новая ошибка.
У меня одинаковые имена областей на каждом листе бланков. Причем на листе "Печать бланка" ОБЛАСТЬ - Книга (я не могу / не знаю как) изменить. на двух других листах Область - соотв. листы. Может здесь криминал?
 
В первом сообщении вы писали, что код работает.
Почему сейчас эта строка макроса
Код
.Range("yacheyka_" & i) = massiv(1, i)
нерабочая?
 
Kuzmich,  Код без внешнего цикла работал. Сейчас, мне кажется, проблема с именованными диапазонами (см. сообщение #7)
 
Цитата
Yuri KUB написал:
Новая ошибка.
На каком шаге цикла i и j?
Цитата
Yuri KUB написал:
ОБЛАСТЬ - Книга (я не могу / не знаю как) изменить.
Попробуйте удалить и создать заново.
 
Ошибка на шаге i
Удалил область Книга по Вашему совету.
Ошибка осталась.
 
Покажите файл, где вложенные циклы.
 
Криминал думаю в том, что на первом листе нет именованных диапазонов, вернее они относятся к книге.
Можно пробовать или переделать эти диапазоны, или на первом шаге обращаться к диапазону книги, а на 2 и 3 - к листам.
P.S.Хотя... отработало банально так:
Код
Private Sub CommandButton1_Click()
Dim nomer_stroki As Long, massiv() As Variant, i As Integer, j As Integer
nomer_stroki = ActiveCell.Row
massiv = Range(Cells(nomer_stroki, 1), Cells(nomer_stroki, 10))
With sh1
    For i = 1 To 10
        .Range("yacheyka_" & i) = massiv(1, i)
    Next
End With
With sh2
    For i = 1 To 10
        .Range("yacheyka_" & i) = massiv(1, i)
    Next
End With
With sh3
    For i = 1 To 10
        .Range("yacheyka_" & i) = massiv(1, i)
    Next
End With
End Sub

Т.е. можно просто идти циклом по листам, но не от 1, а от 2 то 4, используя индексы листов, а не кодовые имена. Или используя индексы массива с именами листов.
Изменено: Hugo - 29.09.2019 23:20:53
 
Тогда:
Код
for j = 2 to 4
 
Вот файл с двумя циклами.
 
См. #14.
 
Цитата
Юрий М написал:Тогда 1for j = 2 to 4
Ура! Сработало.
Всем огромное спасибо!
 
Hugo,

Ваш вариант также работает. Правда для 12-ти бланков код прилично разрастется. Хотя это не большая проблема.
Спасибо большое!
Страницы: 1
Наверх