RAN, ну если я не понимаю эти коды (((. ПРОСТИТЕ МЕНЯ КОНЕЧНО. 600 сообщений это не 600 часов обучения вы не согласны!? Если бы я прошел обучение и после этого набрал бы столько сообщений я бы тогда сам бы себя убил бы или руководство убило бы за то что потратив деньги на мое обучение НИ ЧЕРТА НЕ СООБРАЖАЮ (((((
RAN, ну если я не понимаю эти коды (((. ПРОСТИТЕ МЕНЯ КОНЕЧНО. 600 сообщений это не 600 часов обучения вы не согласны!? Если бы я прошел обучение и после этого набрал бы столько сообщений я бы тогда сам бы себя убил бы или руководство убило бы за то что потратив деньги на мое обучение НИ ЧЕРТА НЕ СООБРАЖАЮ (((((lebensvoll
Manyasha, все скопировал как нужно без повторений (((( но как сделать так чтоб если в таблице от куда копируется имеются пустые ячейки в другую таблицу копировал без #Н/Д ((((( [img][/img]
Manyasha, все скопировал как нужно без повторений (((( но как сделать так чтоб если в таблице от куда копируется имеются пустые ячейки в другую таблицу копировал без #Н/Д ((((( [img][/img]lebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Понедельник, 19.09.2016, 18:18
на другие листы другие столбцы должны будут копироваться
убирайте цикл, для каждого листа, на который копировать будете, вставляете такой блок: [vba]
Код
'Для листа "План Факт по заявке" With Worksheets("План Факт по заявке") 'вычисляем последнюю строку на листе +1 s2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'копируем... .Range("A" & s2).Resize(s1, 5) = sh1.Range("A8:E" & s).Value .Range("G" & s2).Resize(s1) = sh1.Range("F8:F" & s).Value .Range("J" & s2).Resize(s1) = sh1.Range("I8:I" & s).Value End With
[/vba] в первой строчке пишете нужный лист, в последних 3-х строчках перед End with ставите нужные диапазоны. Для этого Вам понадобится: 1. Погуглить, что такое Worksheets 2. Погуглить, что такое resize (если нужно, то и про Range) 3. Разобрать строчку вычисления s2 (читаете справку по каждому непонятному для Вас слову).
Искать информацию нужно в любом удобном поисковике, а не переводить код VBA в переводчике.
на другие листы другие столбцы должны будут копироваться
убирайте цикл, для каждого листа, на который копировать будете, вставляете такой блок: [vba]
Код
'Для листа "План Факт по заявке" With Worksheets("План Факт по заявке") 'вычисляем последнюю строку на листе +1 s2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'копируем... .Range("A" & s2).Resize(s1, 5) = sh1.Range("A8:E" & s).Value .Range("G" & s2).Resize(s1) = sh1.Range("F8:F" & s).Value .Range("J" & s2).Resize(s1) = sh1.Range("I8:I" & s).Value End With
[/vba] в первой строчке пишете нужный лист, в последних 3-х строчках перед End with ставите нужные диапазоны. Для этого Вам понадобится: 1. Погуглить, что такое Worksheets 2. Погуглить, что такое resize (если нужно, то и про Range) 3. Разобрать строчку вычисления s2 (читаете справку по каждому непонятному для Вас слову).
Искать информацию нужно в любом удобном поисковике, а не переводить код VBA в переводчике.
600 сообщений это не 600 часов обучения вы не согласны!?
Согласен - 600 сообщений с вопросами, на которые были даны ответы - это БОЛЬШЕ, чем 600 часов обучения - это не мёртвые примеры из книжки, а решение своих, живых задач оптимальным образом с онлайн поддержкой. А по поводу
Цитата
ну если я не понимаю эти коды
уже на протяжении года - можно читать "я не хочу в этом разбираться". Поддержу Андрея
[offtop]
Цитата
600 сообщений это не 600 часов обучения вы не согласны!?
Согласен - 600 сообщений с вопросами, на которые были даны ответы - это БОЛЬШЕ, чем 600 часов обучения - это не мёртвые примеры из книжки, а решение своих, живых задач оптимальным образом с онлайн поддержкой. А по поводу
Цитата
ну если я не понимаю эти коды
уже на протяжении года - можно читать "я не хочу в этом разбираться". Поддержу Андрея buchlotnik
Сообщение отредактировал buchlotnik - Понедельник, 19.09.2016, 19:46
buchlotnik, Добрый вечер!!! Можно в ответ многое сказать на ваше сообщение. Но хотелось бы сказать лишь одно. Не каждому дано познать материал (новый для себя) из учебников и на примерах (пусть они даже: не мёртвые примеры из книжки). Я понимаю коды которые мы разобрали (и были созданы не без вашей помощи а также не без помощи других) НО если в данном коде нужно дополнить что то либо или скорректировать его правильно и грамотно. Я лично просто не в силах. ПРОШУ ПРОЩЕНИЕ У ВСЕХ если я докучаю вас своими просьбами о помощи!!! То что я не могу разобраться не значится что я не хочу в них разбираться (((( и то что я ТУПЛЮ (я не спорю, но я стараюсь хотя это не всегда получается) но мое мнение (я так думаю) что если сложно хоть как то направить вытянуть человека на нужный ему лад, то уж лучше не отвечать на эти сообщение ((( а тыкнуть человека в то что он ЛЕНТЯЙ И НЕ ХОЧУХА наверное каждый сможет (когда в этой области ГУРУ) ((((. И 600 сообщений не везде же я проявляю тупизм (((( есть и положительные результативные сообщения. И Manyasha, права иной раз в связи с тем что торопишься данный материал я черпаю не из истинных источников а не перевожу код VBA в переводчике ((((. Понять как данный код работает и что он делает (что от куда и куда) я понять в силах а вот его свойства а также чтоб сразу его написать я не могу (((( Manyasha, да я понял я обязательно ознакомлюсь с данным материалом My WebPageMy WebPage ПРОШУ МЕНЯ ЕЩЕ РАЗ ПРОСТИТЬ ЕСЛИ ВДРУГ КОГО ТО ОГОРЧИЛ ИЛИ ЗАДЕЛ... СПАСИБО ВАМ ОГРОМНЕЙШЕЕ ЗА ПОМОЩЬ И ПОДДЕРЖКУ!!!
buchlotnik, Добрый вечер!!! Можно в ответ многое сказать на ваше сообщение. Но хотелось бы сказать лишь одно. Не каждому дано познать материал (новый для себя) из учебников и на примерах (пусть они даже: не мёртвые примеры из книжки). Я понимаю коды которые мы разобрали (и были созданы не без вашей помощи а также не без помощи других) НО если в данном коде нужно дополнить что то либо или скорректировать его правильно и грамотно. Я лично просто не в силах. ПРОШУ ПРОЩЕНИЕ У ВСЕХ если я докучаю вас своими просьбами о помощи!!! То что я не могу разобраться не значится что я не хочу в них разбираться (((( и то что я ТУПЛЮ (я не спорю, но я стараюсь хотя это не всегда получается) но мое мнение (я так думаю) что если сложно хоть как то направить вытянуть человека на нужный ему лад, то уж лучше не отвечать на эти сообщение ((( а тыкнуть человека в то что он ЛЕНТЯЙ И НЕ ХОЧУХА наверное каждый сможет (когда в этой области ГУРУ) ((((. И 600 сообщений не везде же я проявляю тупизм (((( есть и положительные результативные сообщения. И Manyasha, права иной раз в связи с тем что торопишься данный материал я черпаю не из истинных источников а не перевожу код VBA в переводчике ((((. Понять как данный код работает и что он делает (что от куда и куда) я понять в силах а вот его свойства а также чтоб сразу его написать я не могу (((( Manyasha, да я понял я обязательно ознакомлюсь с данным материалом My WebPageMy WebPage ПРОШУ МЕНЯ ЕЩЕ РАЗ ПРОСТИТЬ ЕСЛИ ВДРУГ КОГО ТО ОГОРЧИЛ ИЛИ ЗАДЕЛ... СПАСИБО ВАМ ОГРОМНЕЙШЕЕ ЗА ПОМОЩЬ И ПОДДЕРЖКУ!!!lebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Вторник, 20.09.2016, 00:47
Manyasha, Добрый день!!! СПАСИБО ВАМ ОГРОМНЕЙШЕЕ... Сначала прочитал что такое
Цитата
убирайте цикл,
чтоб понять что удалять после посидел немного с ругающим кодом (((( на
Цитата
End With
(((( потом ругался на окончание всего кода на
Цитата
End Sub
Сидел сидел и все получилось вот так вот получился код и все работает
[vba]
Код
Private Sub CommandButton4_Click() 'Код для сохранения данных на лист Общий журнал заявок для УПТК q = MsgBox("Вы уверены что хотите сохранить данные в журнал заявок???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
Dim sh1 As Worksheet, sh 'код копирования нужных данных в нужные нам листы Dim s As Long, s2 As Long Set sh1 = Worksheets("Подтверждение заявок для УПТК") s = sh1.Cells(Rows.Count, 1).End(xlUp).Row
'Для листа "План Факт по заявке" With Worksheets("План Факт по заявке") 'вычисляем последнюю строку на листе +1 s2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'копируем... .Range("A8:E67" & s2).Resize(s, 5) = sh1.Range("A8:E67" & s).Value .Range("G8:G67" & s2).Resize(s) = sh1.Range("F8:F67" & s).Value .Range("J8:J67" & s2).Resize(s) = sh1.Range("I8:I67" & s).Value .Range("A8:L67").Replace "#N/A", ""
'Для листа "Отказы от поставок" With Worksheets("Отказы от поставок") 'вычисляем последнюю строку на листе +1 s2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'копируем... .Range("A8:E67" & s2).Resize(s, 5) = sh1.Range("A8:E67" & s).Value .Range("G8:G67" & s2).Resize(s) = sh1.Range("F8:F67" & s).Value .Range("H8:H67" & s2).Resize(s) = sh1.Range("G8:G67" & s).Value .Range("A8:L67").Replace "#N/A", "" End With
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Подтверждение заявок для УПТК") As Long, lEndSheet_("Подтверждение заявок для УПТК") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Подтверждение заявок для УПТК")" и "shSheet_("Общий журнал заявок для УПТК")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Подтверждение заявок для УПТК") Set shSheett = Worksheets("Общий журнал заявок для УПТК") lStartSheet = 8 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 2).Value = Empty Then 'Переносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 1 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(8, 1), Cells(lEndSheet, 67)).ClearContents MsgBox "ДАННЫЕ ПЕРЕНЕСЕНЫ НА ЛИСТ ЖУРНАЛА ЗАЯВОК..."
End With End Sub
[/vba]
Единственное теперь он стал не так шустр (((( примерное время копирования и сохранения в общий журнал занимает примерно от 1,5 до 2 мин Я думал что если я вот тут пропишу лучше диапазоны
Хотя с другой стороны все равно быстрее чем оператор бы забивал эти три таблицы в ручную. СПАСИБО ВАМ ОГРОМНЕЙШЕЕ...
Manyasha, Добрый день!!! СПАСИБО ВАМ ОГРОМНЕЙШЕЕ... Сначала прочитал что такое
Цитата
убирайте цикл,
чтоб понять что удалять после посидел немного с ругающим кодом (((( на
Цитата
End With
(((( потом ругался на окончание всего кода на
Цитата
End Sub
Сидел сидел и все получилось вот так вот получился код и все работает
[vba]
Код
Private Sub CommandButton4_Click() 'Код для сохранения данных на лист Общий журнал заявок для УПТК q = MsgBox("Вы уверены что хотите сохранить данные в журнал заявок???", vbOKCancel) If q = vbCancel Then Exit Sub 'Сообщения для утверждения ваших действий
Dim sh1 As Worksheet, sh 'код копирования нужных данных в нужные нам листы Dim s As Long, s2 As Long Set sh1 = Worksheets("Подтверждение заявок для УПТК") s = sh1.Cells(Rows.Count, 1).End(xlUp).Row
'Для листа "План Факт по заявке" With Worksheets("План Факт по заявке") 'вычисляем последнюю строку на листе +1 s2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'копируем... .Range("A8:E67" & s2).Resize(s, 5) = sh1.Range("A8:E67" & s).Value .Range("G8:G67" & s2).Resize(s) = sh1.Range("F8:F67" & s).Value .Range("J8:J67" & s2).Resize(s) = sh1.Range("I8:I67" & s).Value .Range("A8:L67").Replace "#N/A", ""
'Для листа "Отказы от поставок" With Worksheets("Отказы от поставок") 'вычисляем последнюю строку на листе +1 s2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'копируем... .Range("A8:E67" & s2).Resize(s, 5) = sh1.Range("A8:E67" & s).Value .Range("G8:G67" & s2).Resize(s) = sh1.Range("F8:F67" & s).Value .Range("H8:H67" & s2).Resize(s) = sh1.Range("G8:G67" & s).Value .Range("A8:L67").Replace "#N/A", "" End With
'Код для сохранения данных в общий журнал реестра Dim shSheetf As Worksheet Dim shSheett As Worksheet ' Dim lStartSheet_("Подтверждение заявок для УПТК") As Long, lEndSheet_("Подтверждение заявок для УПТК") As Long Dim lLastRow As Long Dim i As Long 'Даём листам имена "("Подтверждение заявок для УПТК")" и "shSheet_("Общий журнал заявок для УПТК")", 'чтобы было удобнее писать код. Set shSheetf = Worksheets("Подтверждение заявок для УПТК") Set shSheett = Worksheets("Общий журнал заявок для УПТК") lStartSheet = 8 lEndSheet = shSheetf.Cells(Rows.Count, 1).End(xlUp).Row 'Указываем, с какой строки начать вставлять данные на второй лист. lLastRow = shSheett.Cells(Rows.Count, 2).End(xlUp).Row + 1 'Двигаем по первому листу по столбцу "A". For i = lStartSheet To lEndSheet If Not shSheetf.Cells(i, 2).Value = Empty Then 'Переносим данные на второй лист. shSheett.Cells(lLastRow, 2).Value = shSheetf.Cells(i, 1).Value For X = 1 To 12 shSheett.Cells(lLastRow, X + 1).Value = shSheetf.Cells(i, X).Value Next X 'Изменяем переменную "lLastRow", 'чтобы данные уже вставлять в следующую строку. lLastRow = lLastRow + 1 End If Next i Range(Cells(8, 1), Cells(lEndSheet, 67)).ClearContents MsgBox "ДАННЫЕ ПЕРЕНЕСЕНЫ НА ЛИСТ ЖУРНАЛА ЗАЯВОК..."
End With End Sub
[/vba]
Единственное теперь он стал не так шустр (((( примерное время копирования и сохранения в общий журнал занимает примерно от 1,5 до 2 мин Я думал что если я вот тут пропишу лучше диапазоны
Private Sub CommandButton4_Click() 'Код для сохранения данных на лист Общий журнал заявок для УПТК q = MsgBox("Вы уверены что хотите сохранить данные в журнал заявок???", vbOKCancel) If q = vbCancel Then Exit Sub Application.ScreenUpdating = False Application.Calculation = xlCalculationManual
' Ваш код
Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End sub
[/vba]
Цитата
стал не так шустр
попробуйте добавить: [vba]
Код
Private Sub CommandButton4_Click() 'Код для сохранения данных на лист Общий журнал заявок для УПТК q = MsgBox("Вы уверены что хотите сохранить данные в журнал заявок???", vbOKCancel) If q = vbCancel Then Exit Sub Application.ScreenUpdating = False Application.Calculation = xlCalculationManual
' Ваш код
Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End sub
Если перевести код в действия и описать это словами, то Вы написали, что к ячейке Е67 Вы приклеиваете справа значение s2. Ну а потом туда пытаетесь перенести данные из sh1.Range("A8:E67" & s), где такая же фигня Допустим, S2 у нас 100, тогда получается, что Вы переносите в диапазон А8:Е67100
Иправьте все так, как Марина написала и будет Вам счастье
Если перевести код в действия и описать это словами, то Вы написали, что к ячейке Е67 Вы приклеиваете справа значение s2. Ну а потом туда пытаетесь перенести данные из sh1.Range("A8:E67" & s), где такая же фигня Допустим, S2 у нас 100, тогда получается, что Вы переносите в диапазон А8:Е67100
Иправьте все так, как Марина написала и будет Вам счастье_Boroda_
buchlotnik, Да вставил совсем другое дело прям таки молния!!! СПАСИБО ОГРОМНЕЙШЕЕ... _Boroda_, я понял сейчас все исправлю (((.... Тяжек же труд программирования (((( ой как тяжек...
buchlotnik, Да вставил совсем другое дело прям таки молния!!! СПАСИБО ОГРОМНЕЙШЕЕ... _Boroda_, я понял сейчас все исправлю (((.... Тяжек же труд программирования (((( ой как тяжек...lebensvoll
_Boroda_, buchlotnik, Manyasha, вот смотрите что получается прошу вас подскажите что же я сделал не так (((( и почему он так скопировал данные ((( Я приблизил таблицы как и в исходники и все проверил но почему то он как бы дополняет данные сверх того что нужно (((( См.файл А также я не могу сделать так чтоб в таблицу реестр на отгрузку перенеслись данные (((( потому как в эту таблицу нужно внести данные со второй строки ((((( помогите пожалуйста
_Boroda_, buchlotnik, Manyasha, вот смотрите что получается прошу вас подскажите что же я сделал не так (((( и почему он так скопировал данные ((( Я приблизил таблицы как и в исходники и все проверил но почему то он как бы дополняет данные сверх того что нужно (((( См.файл А также я не могу сделать так чтоб в таблицу реестр на отгрузку перенеслись данные (((( потому как в эту таблицу нужно внести данные со второй строки ((((( помогите пожалуйстаlebensvoll
Прошу вас теперь подскажите пожалуйста, почему вы прописали -7, если должно было быть вот так вот: [vba]
Код
'Для листа "План ФАКТ по отгрузке" With Worksheets("План ФАКТ по отгрузке") 'вычисляем последнюю строку на листе +1 s2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'копируем... .Range("A" & s2).Resize(s, 9) = sh1.Range("A8:I" & s).Value .Range("K" & s2).Resize(s) = sh1.Range("J8:J" & s).Value .Range("L" & s2).Resize(s) = sh1.Range("L8:L" & s).Value .Range("M" & s2).Resize(s) = sh1.Range("K8:K" & s).Value .Range("N" & s2).Resize(s) = sh1.Range("M8:M" & s).Value .Range("A8:L67").Replace "#N/A", "" End With
[/vba] [img][/img] как я понял 9 это столбец "I" и тем самым копирование происходит от столбца А до 9-го столбца I (т.е диапазона А8:I), но причем тут -7 (((( не могу понять
RAN, добрый вечер!!! Да сработал на ура для листа
Цитата
'Для листа "План ФАКТ по отгрузке"
Прошу вас теперь подскажите пожалуйста, почему вы прописали -7, если должно было быть вот так вот: [vba]
Код
'Для листа "План ФАКТ по отгрузке" With Worksheets("План ФАКТ по отгрузке") 'вычисляем последнюю строку на листе +1 s2 = .Cells(Rows.Count, 1).End(xlUp).Row + 1 'копируем... .Range("A" & s2).Resize(s, 9) = sh1.Range("A8:I" & s).Value .Range("K" & s2).Resize(s) = sh1.Range("J8:J" & s).Value .Range("L" & s2).Resize(s) = sh1.Range("L8:L" & s).Value .Range("M" & s2).Resize(s) = sh1.Range("K8:K" & s).Value .Range("N" & s2).Resize(s) = sh1.Range("M8:M" & s).Value .Range("A8:L67").Replace "#N/A", "" End With
[/vba] [img][/img] как я понял 9 это столбец "I" и тем самым копирование происходит от столбца А до 9-го столбца I (т.е диапазона А8:I), но причем тут -7 (((( не могу понятьlebensvoll
Кто бы ты ни был, мир в твоих руках
Сообщение отредактировал lebensvoll - Вторник, 20.09.2016, 20:40
Если как должно быть не работает, а как быть не должно, работает, то где-же великая сермяжная правда? Почему -7, догадаться не сложно, нужно только чуть подумать.
Если как должно быть не работает, а как быть не должно, работает, то где-же великая сермяжная правда? Почему -7, догадаться не сложно, нужно только чуть подумать.RAN
Resize это (Изменение размеров) — позволяет изменять текущее выделение диапазона.
Честно сказать я просто теряюсь в своих думалках ((( у нас есть 9 столбцов идентичны другой таблицы которые мы должны скопировать (A8:I) и вставить в такой же диапазон (A8:I). Но также имеются не которые столбцы которые мы должны вставить иначе (J8:J в столбец K) но даже эти столбцы и последующие имеют разные нумерацию (10-й в 11-й) Но причем тут (7) потому как и последующие даже столбцы имеют нумерацию не (7) (((((( я наверное далек от этого
RAN,
Цитата
Resize это (Изменение размеров) — позволяет изменять текущее выделение диапазона.
Честно сказать я просто теряюсь в своих думалках ((( у нас есть 9 столбцов идентичны другой таблицы которые мы должны скопировать (A8:I) и вставить в такой же диапазон (A8:I). Но также имеются не которые столбцы которые мы должны вставить иначе (J8:J в столбец K) но даже эти столбцы и последующие имеют разные нумерацию (10-й в 11-й) Но причем тут (7) потому как и последующие даже столбцы имеют нумерацию не (7) (((((( я наверное далек от этого lebensvoll
RAN, да вы правы на моем примере получается что при нажатии кнопки данные сохраняются но сохраняются с (7-ю #Н/Д) Т.е. получается что тем самым мы возвращаем на свое место наши данные без учета этих самых #Н/Д т.е вот так вот:
Цитата
Количество строк в новом диапазоне. Если этот аргумент опущен, количество строк в диапазоне остается неизменным
buchlotnik, да читал я это и понимание этой формулировки мне стала лишь понятна после намека RAN, (пока можно сказать НОСОМ НЕ ТКНУЛИ. А дотумкать не понятное мне (ЗАВУАЛИРОВАННОЕ ФОРМУЛИРОВКУ) простите я не в силах ((((( Спасибо вам огромное...
RAN, да вы правы на моем примере получается что при нажатии кнопки данные сохраняются но сохраняются с (7-ю #Н/Д) Т.е. получается что тем самым мы возвращаем на свое место наши данные без учета этих самых #Н/Д т.е вот так вот:
Цитата
Количество строк в новом диапазоне. Если этот аргумент опущен, количество строк в диапазоне остается неизменным
buchlotnik, да читал я это и понимание этой формулировки мне стала лишь понятна после намека RAN, (пока можно сказать НОСОМ НЕ ТКНУЛИ. А дотумкать не понятное мне (ЗАВУАЛИРОВАННОЕ ФОРМУЛИРОВКУ) простите я не в силах ((((( Спасибо вам огромное...lebensvoll