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

Вход

Регистрация

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

 

= Мир MS Excel/Макрос заполнения бланка из таблицы данных - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос заполнения бланка из таблицы данных (Макросы/Sub)
Макрос заполнения бланка из таблицы данных
Benos Дата: Четверг, 03.09.2020, 01:06 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 / 365
Добрый день всем!
Столкнулся с проблемой, которую не могу решить.
Есть куча форм, которые надо заполнять. Часть информации в формах повторяется.
Поэтому решил загнать все формы в листы Excel, а первым листом сделать базу. И при двойном клике по ячейке "С1" (например) заполнять формы по столбцу "С".
Но вот беда... если в формах есть одинаковые данные (поля), то заполняются только первые... последующие, по каким то мне неведанным причинам, не заполнятся.
Присвоить двум разным ячейкам одно имя не excel не дает, прямые ссылки вида "=MyCellName", не срабатывают.

Как быть не знаю.
Excel и VBA изучаю самостоятельно методом проб и ошибок. Информации по данному вопросу не нашел, возможно не правильно сформулировал запрос в поиске.
Одним словом, если кто подскажет как быть, буду очень благодарен!

В приложении пример файла с формами и макросом.

На всякий случай приведу код макроса.
[vba]
Код
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Target.Row = 1 And Target.Column > 2 Then
        Cancel = True 'close cell
        Debug.Print "ïîäñòàíîâêà"
        'Debug.Print Target.Column
        Call AutoWork(Target.Column)
    End If
End Sub
Sub AutoWork(Column)
    Application.ScreenUpdating = False
    Dim iColl As Long
    Dim iArr As Variant
    Dim iRow As Integer
    Dim iSh As Integer
    Dim iName As String

    For iSh = 2 To Sheets.Count
        For iRow = 2 To 32
            Sheets(iSh).Activate
            iName = Sheets("Реестр").Cells(iRow, "B")
            Debug.Print iName
            If Not Range(iName) Is Nothing Then
                Debug.Print "Нашли"
                Range(iName) = Sheets("Реестр").Cells(iRow, Column)
            Else
                Debug.Print "Не нашли"
            End If
        Next iRow
    Next iSh
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 4826434.7z(25.6 Kb)


Сообщение отредактировал Benos - Четверг, 03.09.2020, 01:14
 
Ответить
СообщениеДобрый день всем!
Столкнулся с проблемой, которую не могу решить.
Есть куча форм, которые надо заполнять. Часть информации в формах повторяется.
Поэтому решил загнать все формы в листы Excel, а первым листом сделать базу. И при двойном клике по ячейке "С1" (например) заполнять формы по столбцу "С".
Но вот беда... если в формах есть одинаковые данные (поля), то заполняются только первые... последующие, по каким то мне неведанным причинам, не заполнятся.
Присвоить двум разным ячейкам одно имя не excel не дает, прямые ссылки вида "=MyCellName", не срабатывают.

Как быть не знаю.
Excel и VBA изучаю самостоятельно методом проб и ошибок. Информации по данному вопросу не нашел, возможно не правильно сформулировал запрос в поиске.
Одним словом, если кто подскажет как быть, буду очень благодарен!

В приложении пример файла с формами и макросом.

На всякий случай приведу код макроса.
[vba]
Код
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Target.Row = 1 And Target.Column > 2 Then
        Cancel = True 'close cell
        Debug.Print "ïîäñòàíîâêà"
        'Debug.Print Target.Column
        Call AutoWork(Target.Column)
    End If
End Sub
Sub AutoWork(Column)
    Application.ScreenUpdating = False
    Dim iColl As Long
    Dim iArr As Variant
    Dim iRow As Integer
    Dim iSh As Integer
    Dim iName As String

    For iSh = 2 To Sheets.Count
        For iRow = 2 To 32
            Sheets(iSh).Activate
            iName = Sheets("Реестр").Cells(iRow, "B")
            Debug.Print iName
            If Not Range(iName) Is Nothing Then
                Debug.Print "Нашли"
                Range(iName) = Sheets("Реестр").Cells(iRow, Column)
            Else
                Debug.Print "Не нашли"
            End If
        Next iRow
    Next iSh
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Benos
Дата добавления - 03.09.2020 в 01:06
nilem Дата: Четверг, 03.09.2020, 09:15 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1581
Репутация: 546 ±
Замечаний: 0% ±

Excel 2013, 2016
прямые ссылки вида "=MyCellName", не срабатывают.

У вас там формат ячеек Текстовый.
Установите формат Общий, дважды кликните по ячейке, и формула будет работать.


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
прямые ссылки вида "=MyCellName", не срабатывают.

У вас там формат ячеек Текстовый.
Установите формат Общий, дважды кликните по ячейке, и формула будет работать.

Автор - nilem
Дата добавления - 03.09.2020 в 09:15
Benos Дата: Четверг, 03.09.2020, 10:09 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 / 365
Спасибо! Заработало!

Может еще подскажите...
Пока вчера перебирал варианты, заметил такой косяк.
Если в книге нет ячейки с искомым именем, то код падает с ошибкой в строке
[vba]
Код
If Not Range(iName) Is Nothing Then
[/vba]
не подскажите как организовать пропуск и дальнейший перебор...
пробовал вариант с
[vba]
Код
On Error GoTo Next iRow
[/vba]
Cразу после If, но все равно не работает...
 
Ответить
СообщениеСпасибо! Заработало!

Может еще подскажите...
Пока вчера перебирал варианты, заметил такой косяк.
Если в книге нет ячейки с искомым именем, то код падает с ошибкой в строке
[vba]
Код
If Not Range(iName) Is Nothing Then
[/vba]
не подскажите как организовать пропуск и дальнейший перебор...
пробовал вариант с
[vba]
Код
On Error GoTo Next iRow
[/vba]
Cразу после If, но все равно не работает...

Автор - Benos
Дата добавления - 03.09.2020 в 10:09
_Boroda_ Дата: Четверг, 03.09.2020, 12:48 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15978
Репутация: 6209 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А так если
[vba]
Код
'...
            On Error GoTo A
            If Not Range(iName) Is Nothing Then
                Debug.Print "Нашли"
                Range(iName) = Sheets("Реестр").Cells(iRow, Column)
            Else
                Debug.Print "Не нашли"
            End If
A:
        Next iRow
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА так если
[vba]
Код
'...
            On Error GoTo A
            If Not Range(iName) Is Nothing Then
                Debug.Print "Нашли"
                Range(iName) = Sheets("Реестр").Cells(iRow, Column)
            Else
                Debug.Print "Не нашли"
            End If
A:
        Next iRow
[/vba]

Автор - _Boroda_
Дата добавления - 03.09.2020 в 12:48
nilem Дата: Четверг, 03.09.2020, 13:00 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1581
Репутация: 546 ±
Замечаний: 0% ±

Excel 2013, 2016
Попробуйте как-то вот так:


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеПопробуйте как-то вот так:

Автор - nilem
Дата добавления - 03.09.2020 в 13:00
Benos Дата: Четверг, 03.09.2020, 16:00 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016 / 365
Второй вариант заработал.
nilem, _Boroda_, Спасибо!
 
Ответить
СообщениеВторой вариант заработал.
nilem, _Boroda_, Спасибо!

Автор - Benos
Дата добавления - 03.09.2020 в 16:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос заполнения бланка из таблицы данных (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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