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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2018, 08:50   #1
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию Заполнить ШАБЛОН по отгрузкам

Доброго времени суток, уважаемые пользователи!

Обращаюсь к Вам за помощью в создании макроса для заполнения ШАБЛОНА по отгрузкам товара клиентам, т.е. маршрутный лист.
Есть лист "ШАБЛОН" в котором в ячейке "А1" ставится дата плановой отгрузки, и как сделать так, чтобы нажав кнопку "Заполнить", выдавалось окно с выбором листа из которого были бы взяты данные и перенеслись по порядку (для примера номера по порядку указал в графе "Н"), причем только за указанную дату (дату из ячейки "А1", сравнить с датой в указанном листе и заполнить за эту дату строки в ШАБЛОН).

Рекордером написать не получается никак.
Изображения
Тип файла: jpg ШАБЛОН.jpg (113.6 Кб, 109 просмотров)
Вложения
Тип файла: xls отборка-отгрузка.xls (252.0 Кб, 21 просмотров)
amadeus017 вне форума Ответить с цитированием
Старый 03.04.2018, 10:34   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

используйте:
Код:
  Dim rg As Range
  Set rg = Application.InputBox("Выберите ячейку", "На нужном листе", Type:=8)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.04.2018, 10:38   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Sub DoWork()
    Dim Name As String
    Dim shN As Worksheet
    Dim data
    Dim rCount As Integer
    Dim r As Integer, rF As Integer
    Name = InputBox("Назва листа", , "Апрель")
    On Error GoTo lblNoSheet
    Set shN = Sheets(Name)
    On Error GoTo 0
    With Sheets("ШАБЛОН")
        rCount = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        data = .[a1]
        r = 2
        rF = 0
        Do While shN.Cells(r, "C") <> ""
            Debug.Print Format(shN.Cells(r, "H"), "YYYYMMDD")
            Debug.Print Format(data, "YYYYMMDD")
            
            If Format(shN.Cells(r, "H"), "YYYYMMDD") = Format(data, "YYYYMMDD") Then
                .Cells(rCount, "A") = shN.Cells(r, "C")
                .Cells(rCount, "B") = shN.Cells(r, "D")
                .Cells(rCount, "C") = shN.Cells(r, "E")
                .Cells(rCount, "D") = shN.Cells(r, "F")
                .Cells(rCount, "E") = shN.Cells(r, "G")
                .Cells(rCount, "F") = shN.Cells(r, "H")
                .Cells(rCount, "G") = shN.Cells(r, "K")
                rF = rF + 1
                .Cells(rCount, "H") = rF
                rCount = rCount + 1
            End If
            r = r + 1
        Loop
    End With
    Exit Sub
    
lblNoSheet:
    MsgBox "No " & UCase(Name) & " worksheet"
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 03.04.2018, 12:16   #4
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
Sub DoWork()
********
код
********
End Sub
Не совсем так как хотелось. К примеру на листе "Апрель" в строке убрал цифру "2" в графе "J", а эта строка перенеслась, это ошибка. И еще заметил, что просто копирует строки по порядку, а смысл был в том, чтобы:
1 - сличить дату с листа "ШАБЛОН" с ячейки "А1", с датами на листе к примеру "Апрель" с графой "H" и следующий шаг
2 - перенести строки по порядку указанные на листе "Апрель"

Т.е. на листе "Апрель", в течении дня заполняются строки и перед формированием МАРШРУТНОГО листа, в графе "J" проставляем вручную очередность. Если поле не заполнено (пустое) и не смотря на то, что дата может совпадать, эта строка НЕ должна переноситься на лист "ШАБЛОН".

Вручную я бы это сделал так:
Скопировал все строки, из листа "Апрель" на лист "ШАБЛОН" и на листе "ШАБЛОН" в графу "Н", перенес бы строки с листа "Апрель", после чего по графе "Н" на листе "ШАБЛОН", отсортировал по номеру в сторону уменьшения.

А можно в окне не писать имя листа, хотя это не сложно, а просто мышкой "ткнуть", тем самым подразумевая с какого листа нужно брать данные?

Последний раз редактировалось amadeus017; 03.04.2018 в 12:35.
amadeus017 вне форума Ответить с цитированием
Старый 03.04.2018, 13:15   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
а смысл был в том, чтобы: ...
пока смысл того, что должно происходить не написан в сообщении, а содержиться только в Вашей голове - никто Вам ничем не поможет.

учитесь излагать задачу, лаконочно, но достаточно для того, чтобы ее можно было решить.
если описывать задачу облом - пишите сразу на форум экстрасенсов, там все решат и без Вашего описания, а тут простые люди, имеющие некоторые навыки программирования, им нужно прочитать суть задачи, сравнить написанное с файлом-примером и когда все понятно - точгда можно и решать. а когда Вам облом описать задачу откуда уверенность, что кто-то станет париться чтобы ее решить, особенно когда и решать-то нечего.
лично мне гораздо интереснее решить реальную задачу, чем писать то, что пишу сейчас
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 03.04.2018, 13:35   #6
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
пока смысл того, что должно происходить не написан в сообщении, а содержиться только в Вашей голове - никто Вам ничем не поможет.

учитесь излагать задачу, лаконочно, но достаточно для того, чтобы ее можно было решить.
****
лично мне гораздо интереснее решить реальную задачу, чем писать то, что пишу сейчас
Верное замечание, я понял, что все очевидно, но видимо ошибался.
Виноват!
amadeus017 вне форума Ответить с цитированием
Старый 03.04.2018, 13:38   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

amadeus017, так и делайте как хотели, хотя бы несколько строк кода привели что сделали.

Код:
Sub DoWork()
    Dim rg As Range
    Dim Name As String
    Dim shN As Worksheet
    Dim data
    Dim myOffset As Integer
    Dim rCount As Integer
    Dim r As Integer, rF As Integer
    Set rg = Application.InputBox("Выберите ячейку", "На нужном листе", Type:=8)
    Name = rg.Worksheet.Name
    On Error GoTo lblNoSheet
    Set shN = Sheets(Name)
    On Error GoTo 0
    With Sheets("ШАБЛОН")
        rCount = .Cells(.Rows.Count, "A").End(xlUp).Row + 3
        data = .[a1]
        r = 2
        rF = 0
        Do While shN.Cells(r, "C") <> ""
            
            If Format(shN.Cells(r, "H"), "YYYYMMDD") = Format(data, "YYYYMMDD") And _
                CInt(shN.Cells(r, "J") <> 0) Then
                myOffset = CInt(shN.Cells(r, "J")) - 1
                .Cells(rCount, "A").Offset(myOffset, 0) = shN.Cells(r, "C")
                .Cells(rCount, "B").Offset(myOffset, 0) = shN.Cells(r, "D")
                .Cells(rCount, "C").Offset(myOffset, 0) = shN.Cells(r, "E")
                .Cells(rCount, "D").Offset(myOffset, 0) = shN.Cells(r, "F")
                .Cells(rCount, "E").Offset(myOffset, 0) = shN.Cells(r, "G")
                .Cells(rCount, "F").Offset(myOffset, 0) = shN.Cells(r, "H")
                .Cells(rCount, "G").Offset(myOffset, 0) = shN.Cells(r, "K")
                .Cells(rCount, "H").Offset(myOffset, 0) = myOffset + 1
            End If
            r = r + 1
        Loop
    End With
    Exit Sub
    
lblNoSheet:
    MsgBox "No " & UCase(Name) & " worksheet"
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 04.04.2018, 04:42   #8
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Aleksandr H.

Все круто!!!

Огромное спасибо!
amadeus017 вне форума Ответить с цитированием
Старый 10.04.2018, 14:00   #9
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Aleksandr H.

С датой ошибка, либо я что-то не так делаю.
Заполняется шаблон, только если дата в шаблоне стоит 03-04-2018, другие не заполняются (
amadeus017 вне форума Ответить с цитированием
Старый 10.04.2018, 14:54   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от amadeus017 Посмотреть сообщение
Заполняется шаблон, только если дата в шаблоне стоит 03-04-2018, другие не заполняются (
я не проверял, что там и как происходит, но, насколько я понимаю,
в коде по строкам (по заполненному столбцу А) проверяется дата в ячейке в столбце H, если она совпадает с датой в ячейке A1 и при этом ячейка в этой строке в столбце J не пустая, тогда выполняется код ...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблон в С++ 25LioN52 Помощь студентам 2 14.12.2011 23:18
Дано: таблица в Exel (3 столбца, 4000 строк) и шаблон документа. Задача: Распечатать один и тот-же шаблон документа, под Evgenya040305 Помощь студентам 2 24.11.2011 22:21
шаблон jen Общие вопросы C/C++ 4 04.12.2010 03:21
шаблон duden2010 Помощь студентам 0 28.04.2010 22:56