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

Вход

Регистрация

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

 

= Мир MS Excel/Добавление нужного количества строк в базу - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Добавление нужного количества строк в базу
Antilox Дата: Четверг, 01.11.2012, 17:43 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Добрый день, товарищи.
Прошу вашей помощи, так как сам не осилю.

Есть база данных оборудования (база данных) Заполнять ее в ручную очень долго и муторно. Все, что я смог - сделал.
Хотелось бы макрос, который при нажатии на кнопку, добавлял в базу нужное количество строк данных. Т.е. если заполнены все три желтые строки (это будет не всегда), то в базу нужно добавить три строки с "желтой" информацией плюс в каждую строку инфу из зелёных и синей ячеек.
Особенность в том, что один тип оборудования может быть на разных участках одной линии или в разных локациях.
Поиск по базе потом осуществляется сортировкой.

Файлик прикрепляю. Зарание благодарю.
К сообщению приложен файл: 3842880.xls (58.0 Kb)
 
Ответить
СообщениеДобрый день, товарищи.
Прошу вашей помощи, так как сам не осилю.

Есть база данных оборудования (база данных) Заполнять ее в ручную очень долго и муторно. Все, что я смог - сделал.
Хотелось бы макрос, который при нажатии на кнопку, добавлял в базу нужное количество строк данных. Т.е. если заполнены все три желтые строки (это будет не всегда), то в базу нужно добавить три строки с "желтой" информацией плюс в каждую строку инфу из зелёных и синей ячеек.
Особенность в том, что один тип оборудования может быть на разных участках одной линии или в разных локациях.
Поиск по базе потом осуществляется сортировкой.

Файлик прикрепляю. Зарание благодарю.

Автор - Antilox
Дата добавления - 01.11.2012 в 17:43
RAN Дата: Четверг, 01.11.2012, 19:32 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ну надо-же было такой ник выбрать для подобных вопросов! cool


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНу надо-же было такой ник выбрать для подобных вопросов! cool

Автор - RAN
Дата добавления - 01.11.2012 в 19:32
Antilox Дата: Вторник, 06.11.2012, 00:06 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Всем спасибо. Особенное спасибо RAN-у. Благодаря Вам я стал умнее.
Сделал все сам.
Делюсь, может кто будет искать подобное.
К сообщению приложен файл: 8438315.xlsm (37.9 Kb)
 
Ответить
СообщениеВсем спасибо. Особенное спасибо RAN-у. Благодаря Вам я стал умнее.
Сделал все сам.
Делюсь, может кто будет искать подобное.

Автор - Antilox
Дата добавления - 06.11.2012 в 00:06
Hugo Дата: Вторник, 06.11.2012, 01:08 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
Думаю можно так сократить. Но проверьте.
[vba]
Code
Sub Добавить()
'
' Добавить Макрос
'

         Dim sh As Worksheet, sb As Worksheet
         Set sh = Sheets("Добавить оборудование в базу")
         Set sb = Sheets("База")

         If IsEmpty(sh.Range("B16")) And IsEmpty(sh.Range("B17")) And IsEmpty(sh.Range("B18")) Then
             MsgBox "Нечего вносить в базу"
         Else

             Application.ScreenUpdating = False
                  
             If Not IsEmpty(sh.Range("B16")) Then
                 ins sb, sh: sh.Range("B16:D16").Copy sb.Range("A2")
             End If

             If Not IsEmpty(sh.Range("B17")) Then
                 ins sb, sh: sh.Range("B17:D17").Copy sb.Range("A2")
             End If

             If Not IsEmpty(sh.Range("B18")) Then
                 ins sb, sh: sh.Range("B18:D18").Copy sb.Range("A2")
             End If

             Application.ScreenUpdating = True
         End If

End Sub

Private Sub ins(sb, sh)
         sb.Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
         sh.Range("B14:D14").Copy sb.Range("D2")
         sh.Range("E13").Copy sb.Range("G2")
End Sub
[/vba]

Или так, те же яйца, но компактнее:
[vba]
Code
Sub Добавить()
     Dim sh As Worksheet, sb As Worksheet
     Set sb = Sheets("База")
     Set sh = Sheets("Добавить оборудование в базу"): With sh
         If IsEmpty(.[B16]) And IsEmpty(.[B17]) And IsEmpty(.[B18]) Then
             MsgBox "Нечего вносить в базу"
         Else
             If Not IsEmpty(.[B16]) Then ins sb, sh: .[B16:D16].Copy sb.[A2]
             If Not IsEmpty(.[B17]) Then ins sb, sh: .[B17:D17].Copy sb.[A2]
             If Not IsEmpty(.[B18]) Then ins sb, sh: .[B18:D18].Copy sb.[A2]
         End If: End With
End Sub

Private Sub ins(sb, sh)
     sb.Rows(2).Insert: sh.[B14:D14].Copy sb.[D2]: sh.[E13].Copy sb.[G2]
End Sub
[/vba]
Отключение обновления экрана тоже убрал - на другом листе не мешает.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеДумаю можно так сократить. Но проверьте.
[vba]
Code
Sub Добавить()
'
' Добавить Макрос
'

         Dim sh As Worksheet, sb As Worksheet
         Set sh = Sheets("Добавить оборудование в базу")
         Set sb = Sheets("База")

         If IsEmpty(sh.Range("B16")) And IsEmpty(sh.Range("B17")) And IsEmpty(sh.Range("B18")) Then
             MsgBox "Нечего вносить в базу"
         Else

             Application.ScreenUpdating = False
                  
             If Not IsEmpty(sh.Range("B16")) Then
                 ins sb, sh: sh.Range("B16:D16").Copy sb.Range("A2")
             End If

             If Not IsEmpty(sh.Range("B17")) Then
                 ins sb, sh: sh.Range("B17:D17").Copy sb.Range("A2")
             End If

             If Not IsEmpty(sh.Range("B18")) Then
                 ins sb, sh: sh.Range("B18:D18").Copy sb.Range("A2")
             End If

             Application.ScreenUpdating = True
         End If

End Sub

Private Sub ins(sb, sh)
         sb.Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
         sh.Range("B14:D14").Copy sb.Range("D2")
         sh.Range("E13").Copy sb.Range("G2")
End Sub
[/vba]

Или так, те же яйца, но компактнее:
[vba]
Code
Sub Добавить()
     Dim sh As Worksheet, sb As Worksheet
     Set sb = Sheets("База")
     Set sh = Sheets("Добавить оборудование в базу"): With sh
         If IsEmpty(.[B16]) And IsEmpty(.[B17]) And IsEmpty(.[B18]) Then
             MsgBox "Нечего вносить в базу"
         Else
             If Not IsEmpty(.[B16]) Then ins sb, sh: .[B16:D16].Copy sb.[A2]
             If Not IsEmpty(.[B17]) Then ins sb, sh: .[B17:D17].Copy sb.[A2]
             If Not IsEmpty(.[B18]) Then ins sb, sh: .[B18:D18].Copy sb.[A2]
         End If: End With
End Sub

Private Sub ins(sb, sh)
     sb.Rows(2).Insert: sh.[B14:D14].Copy sb.[D2]: sh.[E13].Copy sb.[G2]
End Sub
[/vba]
Отключение обновления экрана тоже убрал - на другом листе не мешает.

Автор - Hugo
Дата добавления - 06.11.2012 в 01:08
RAN Дата: Вторник, 06.11.2012, 02:37 | Сообщение № 5
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Code
Sub Добавить_оборудование_в_базу()
     Dim lr&, i&, arr, arr1, a$, aa$
     With Sheets("Добавить оборудование в базу")
         lr = .Cells(4, "B").End(xlDown).Row
         If lr < 5 Then Exit Sub
         arr = .Range("B5:D" & lr).Value
         arr1 = .Range("B3:D3").Value
         aa = .Range("E2").Value
         a = .Range("D3").Hyperlinks(1).Address
     End With
     With Sheets("База")
         lr = .Cells(Rows.Count, "A").End(xlUp).Row
         .Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(UBound(arr), 3) = arr
         .Range("D" & lr + 1).Resize(UBound(arr), 3) = arr1
         .Hyperlinks.Add Anchor:=.Range("F" & lr + 1).Resize(UBound(arr)), Address:=a
         .Range("G" & lr + 1).Resize(UBound(arr)) = aa
     End With
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Code
Sub Добавить_оборудование_в_базу()
     Dim lr&, i&, arr, arr1, a$, aa$
     With Sheets("Добавить оборудование в базу")
         lr = .Cells(4, "B").End(xlDown).Row
         If lr < 5 Then Exit Sub
         arr = .Range("B5:D" & lr).Value
         arr1 = .Range("B3:D3").Value
         aa = .Range("E2").Value
         a = .Range("D3").Hyperlinks(1).Address
     End With
     With Sheets("База")
         lr = .Cells(Rows.Count, "A").End(xlUp).Row
         .Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(UBound(arr), 3) = arr
         .Range("D" & lr + 1).Resize(UBound(arr), 3) = arr1
         .Hyperlinks.Add Anchor:=.Range("F" & lr + 1).Resize(UBound(arr)), Address:=a
         .Range("G" & lr + 1).Resize(UBound(arr)) = aa
     End With
End Sub
[/vba]

Автор - RAN
Дата добавления - 06.11.2012 в 02:37
Antilox Дата: Вторник, 06.11.2012, 20:56 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Воспользовался "компактными яйцами" Hugo. ))
Действительно, так гораздо лучше. По правде, это мой первый код на вба. Теперь хотя бы более менее понятно что зачем.
 
Ответить
СообщениеВоспользовался "компактными яйцами" Hugo. ))
Действительно, так гораздо лучше. По правде, это мой первый код на вба. Теперь хотя бы более менее понятно что зачем.

Автор - Antilox
Дата добавления - 06.11.2012 в 20:56
RAN Дата: Вторник, 06.11.2012, 21:07 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Для начала и запись рекордером хорошо.
Но вот обозвать себя АнтиЛохом - это что-то... biggrin surprised


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеДля начала и запись рекордером хорошо.
Но вот обозвать себя АнтиЛохом - это что-то... biggrin surprised

Автор - RAN
Дата добавления - 06.11.2012 в 21:07
Hugo Дата: Среда, 07.11.2012, 00:06 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
Ну вот и хорошо.
Я честно говоря как-то в эту тему сразу не вник, а потом уже и забыл...
Но зато теперь у Вас опыта втройне smile
Думаю если бы получили сразу готовый код - это мало что Вам дало бы, одно только решение задачи... smile


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНу вот и хорошо.
Я честно говоря как-то в эту тему сразу не вник, а потом уже и забыл...
Но зато теперь у Вас опыта втройне smile
Думаю если бы получили сразу готовый код - это мало что Вам дало бы, одно только решение задачи... smile

Автор - Hugo
Дата добавления - 07.11.2012 в 00:06
  • Страница 1 из 1
  • 1
Поиск:

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