Страницы: 1
RSS
Глючит макрос или Формула
 
Добрый день!

Помогите, пожалуйста, подправить код в макросе или может что-то своё предложить. Код взят с форума, сам я только начинаю юзать макрос:)
Не могу понять в чем проблема, при выборе линии в СПЕЦИФИКАЦИЯ колонки начинают глючить, не срывает строки и самое интересное если перейти в лист база а потом обратно всё исправляется само.

Также помогите, пожалуйста, с формулой.
После выбора линии, подсчет строк занимает какое-то время и слихка подвисает если это делать на ноутбуке боле слабым чем стационарник (в базе может быть около 50000 строк).
Может я выбрал не правильную формулу? И это утяжеляет процесс обработки информации.


Спасибо заранее всем.
 
В коде признаком изменения для срабатывая макроса указан Range("B1"), хотя меняется Range("C1"). А при активации листа макрос срабатывает, т.к. в Call Worksheet_Change(Range("B1")) принудительно указан диапазон Range("B1"), который в макросе проверяется на совпадение опять же с Range("B1").
Тормоза, конечно же, из-за кучи тяжёлых формул. Возможно, их можно как-то облегчить, но лучше рассмотреть другой путь. А именно: если в файле уже используются макросы, то и заполнение листа СПЕЦИФИКАЦИЯ можно переложить на макрос. Смотри вложение.
 
Спасибо огромное за помощь :)  
Изменено: Олег м - 08.09.2022 10:36:34
 

Добрый день всем!

Прошу ещё раз вашей помощи поправить файл для вывода на печать с функцией сохранения в формате pdf. Нашел макрос в просторах форума и пытался прикрутить к моему файлу, но, к сожалению, не совсем получилось это сделать.

Кнопка печать

Суть макроса сохранить каждую линию (файл) отдельно в pdf., в папке. Если убрать галочку макрос отправляет на печать с выбором копии документа.

Проблема в том, что макрос делает сохранения и разбивает pdf. по линиям, но сохраняет информацию только одной линии внутри документов.

Если можно попросить вас помочь добавить галочку в окне где выбирается печать чтобы можно было выбирать одностороннюю печать или двухстороннюю печать документа.

В окне при нажатии печати, где выбираешь печать документа "от – до" не получилось убрать повторяющиеся названия линии.

Ячейку А1 и А2 можно не брать во внимания, можно и удалить при желании.

Извините если что-то не так объяснил.

Я только учусь и очень прошу помощи так как таких документов много и мне это бы помогло.

Может кому-то ещё это поможет надеюсь.

Изменено: Олег м - 09.09.2022 08:04:51
 
По поставленным вопросам есть кое-какие ответы и замечания.
1. Сохраняется в pdf то, что есть на листе СПЕЦИФИКАЦИЯ, а там всегда один и тот же код СА1001-100-L1G 5 и данные по нему. Т.е. перед каждым сохранением в pdf надо менять код в ячейке B1, чтоб менялись данные на листе СПЕЦИФИКАЦИЯ.
2. С двухсторонней печатью - проблема. Насколько я знаю, в общем случае решения этой проблемы нет. Здесь на форуме обсуждалось это несколько раз. Например, общие рассуждения в Excel. Настройки принтера. Двухсторонняя печать, есть и другие темы.
3. Не совсем понятно, что значит "от - до". По-моему, выбирать надо конкретно по каждому коду, т.к. в "от - до" может попасть код, который печатать не надо.
4. По поводу повторяющихся значений - надо было смотреть макрос UniqAndSort, который как раз и отрабатывает это.

Общее.
По-моему, при беглом взгляде, макросы перегружены лишними действиями. Необходимо оптимизировать схему-алгоритм вообще, а к нему присоединять макросы по мере надобности.
Совсем непонятно использование данных листов УС и О_О. В макросах файла-примера данные с этих листов используются, но никак не описан принцип.
Поэтому пристально разбираться с предложенными макросами не стал, а сделал свой вариант для печати, см. вложение. Возможно, данный вариант устроит и он будет являться основой для дальнейшей доработки.
 
Спасибо что откликнулись.

Принцип выбора линии ОТ и линии ДО хорош тем что можно выбрать с какой по какой линии можно его сохранить, то есть можно сохранить в pdf или отправить на печать все или определённое количество файлов.

У нас например 500 линии (файлов)
Например можем сохранить или распечатать с 1 по 1, с 1 по 12, с 13 по 200 или с 1 по 500.  и тогдалее.

Также это дает возможность сохранить все линии (документы) отдельно сразу как архив.


Можно ли сделать в таком формате?
Изменено: Олег м - 09.09.2022 23:15:07
 
В файле Спецификация2.xlsm это сделано так:
1. На листе СПЕЦИФИКАЦИЯ нажать кнопку Печать. Появится форма с ЛистБокс со списком возможных кодов.
2. Если надо выбрать от-до, то нужно выделить первый код и, нажав и удерживая клавишу Shift, щёлкнуть по второму коду. Ясно, что для выделения всего списка надо щёлкнуть по самому первому коду, нажать Shift и щёлкнуть по самому последнему.
3. Если надо выделить только определённые коды, то это делается удерживая Ctrl и щёлкая по нужным строкам.

А желаемый способ, как показано на рисунке и в предыдущем примере, менее понятен и более заморочен.
 
Добрый день.

Можно сделать так чтобы при выборе линии в ЛистБокс выводилось все на печать или при выборе через Ctrl или Shift определенные линии?
На дынный момент он печатает только тот документ что открыт в excel, при выборе линии в ЛистБокс не реагирует на другой документ.


Заметил что в ЛистБокс порядок нумерации как-то странно делает.
То есть порядок такой делает.
1
10,11, 12, 13, 14, 15, 16, 17, 18, 19
2
20 т.д
3
4
5
6
60 и т.д
Изменено: Олег м - 10.09.2022 08:50:56
 
Цитата
Олег м написал:
То есть порядок такой делает.
так сортируется текст "3" больще чем "20", оно больше чем "2000000", а число 3, понятно, меньше чисел 20 и 2 млн.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
Можно сделать так чтобы при выборе линии в ЛистБокс выводилось все на печать или при выборе через Ctrl или Shift определенные линии? На дынный момент он печатает только тот документ что открыт в excel, при выборе линии в ЛистБокс не реагирует на другой документ.
Совсем ничего не понял. Нужно подробное (возможно, пошаговое) пояснение.

Коды т.н. линий - это текст (как в файле-примере) и, как указал Ігор Гончаренко, он и сортируется как текст. Если вдруг коды будут только числовые, то можно отсортировать и их. Но если в кодах будет хоть один нецифровой символ (кроме десятичного разделителя), то сортировка возможна только как текст, иначе будет глючить, т.е. давать неправильный результат. Можно, конечно, дополнительно заморочиться, если сильно надо. Например, почитать Корректная сортировка (ранжирование) чисел, смешанных с текстом.
 
Сортирует так.
СА1050
СА1001-100-L1G 5
CA1050-15-L1G
CA3501-15-L1G

Логически должно так:
СА1001-100-L1G 5
CA1050-15-L1G
СА1050
CA3501-15-L1G

Это не критично. просто любопытно если можно сделать примером ниже.
Изменено: Олег м - 10.09.2022 10:34:58
 
По поводу вывод на печать.

Можно сделать так, когда выбираешь (выделяешь) все линии из списка ЛистБокса он отправляет все на печать. То есть каждая линия печатается отдельно, или выборочно.
Просто, когда я выбираю из списка несколько линии он их не печатает, а печатает только один документ и тот документ, который открыт в excel.

Принцип такой как сохранения в PDF. Только с печатью

Изменено: Олег м - 10.09.2022 10:48:07
 
1. Логика такой сортировки сомнительна. Тем более, связанной с большими заморочками по коду с не вполне достоверным результатом. И тем более, что даже по т.н. "логике" код СА1050 должен быть перед CA1050-15-L1G, т.к. "по логике" пустота (пробел) должна идти перед дефисом (хотя в Excel это не всегда так). И главное: даже без логики и прочих умностей код СА1050 всегда будет впереди всех кодов, ибо CA в этом коде снесено латиницей, а у остальных кодов - кириллицей.

2. Файл сделан как пример или шаблон для дальнейшей корректировки для сугубо своих нужд. В том числе макрос на кнопке Печать на принтер. Советую переделать самостоятельно этот макрос по аналогии с макросом кнопки Сохранить в pdf для улучшений навыков VBA.

ЗЫ. Модераторы, не пора ли переименовать тему? Хотя сам не могу предположить, как её назвать.
 
Я только за, чтобы хотя бы немного приблизится к вашему уровню познания VBA :).
И спасибо что помогаете  +100 к вашей КАРМЕ.

Кстать, по этой теме можно предлагать свои примеры или видения для улучшения работы с документом. Так как этот файл гибкий и может другим ребятам принесет пользу.
 
Помогите, пожалуйста, с печатью добить.
Честно пытаюсь, но постоянно криво выходит и код ругается на меня.
Понимаю что уже многим помогли, но пока я еще начинающий чайник в VBA.
 
Всё, что внутри процедуры Private Sub CommandButtonPrinter_Click надо заменить на код
Код
Dim i As Integer, j As Integer
j = Val(TextBoxCopies)
If j <= 0 Then Exit Sub
With Me.ListBoxSpec
For i = 0 To .ListCount - 1
    If .Selected(i) = True Then
    Range(nNomerLinii) = .List(i)
    ActiveSheet.PrintOut Copies:=j
End If
Next
End With
 
tolikt,

Спасибо большое.
Я понял в чем проблема, я пропустил =i
И пропустил что нужно изменить =i и добавить j из-за этого на меня ругался код.

Спасибо  ;)  
 
Добрый день.

Появился такой вопрос.

Как можно решить вопрос латиницей и кириллицей.
Столкнулся с такой проблемой в названии линий или в наименовании материалов, где встречается латиница и кириллица распознать ее стразу не реально.

Пример названия линии:
CA1050-15-L1G (первые 2 буквы написаны на латинице)
СА1050-15-L1G (первые 2 буквы написаны на кириллице)
Или
CA1050T-15-L1G (первые буквы написаны на латинице)
СА1050Т-15-L1G (первые буквы написаны на кириллице)

Сразу это никак не увидеть, можно конечно это заметить при сборке спецификации, но за этим надо постоянно следить и быть на чеку что не совсем удобно так как наименования и линии пишут разные люди.

Что можно дописать в макрос и где вписать чтобы макрос мог распознать латиницу и кириллицу?

Пример в базе выделенный желтым.

Изменено: Олег м - 06.10.2022 10:45:21
 
Тогда первым делом надо определиться, какой номер будет считаться правильным и проверять его при внесении в файл.
Например, судя по уже имеющимся номерам, логично предположить, что номер может состоять только из латинских букв, цифр и ограниченного списка спецсимволов: пробел, тире и т.п. Тогда можно проверять макросом номер и менять кир. на лат. буквы при внесении. Смотри вложение: проверяется функцией при изменении любой ячейки в столбце Линии.
Если в номерах допустимы любые символы, то придётся создавать отдельную таблицу линий и при добавлении новой линии сравнивать с имеющейся таблицей с проверкой всех возможных нюансов
Цитата
Олег м,  написал:
так как наименования и линии пишут разные люди.
Не совсем понятно, кто вносит номера (линии) непосредственно в файл Спецификация: много разных людей или только один пользователь?
Если только один, то проще: можно проверять каждый новый номер на наличие кириллицы и латиницы в нём. Если вносят несколько пользователей, но принцип номера - только латиница, то тоже не так сложно: макрос проверит и поменяет кир. на лат., если такие есть. Но если доступ имеют все и вносят как попало - тут надо менять всю схему работы с файлом, т.к. любой самый хитрый макрос бессилен против изощрённых фантазий пользователей, как показывает опыт.
 

Не совсем понял, что изменилась в файле? При выборе в спецификации линии он их разделяет на кер. и лат. А не соединяет в одну линию.

Конечно, думаю, что правильно сделать вкладку в excel с библиотекой, где макрос смотрит и видя например L1G он его игнорирует а другие меняет на латиницу.

Можно сделать так чтобы макрос проверял все что находится в вкладке «БАЗА» и латиницу переделывал на кириллицу, но игнорируя текст, который указан в вкладке библиотека.

По поводу заполнения базы.
Линии конечно можно самому вносить избегая ошибки, но самая основная это «НАИМЕНОВАНИЯ МАТЕРИАЛОВ» так как их приносят в редактируемом файле и вносится в эту базу обычным способом (Ctrl+C) и (Ctrl+V) и различить кириллицу и латиницу на глаз я думаю не реально.

Почему хочется избегать это? так как дальше есть другие документы, которые на формулах собирают журнал из-за этого выскакивает много ошибок.

Все мы живые люди, и каждому из нас свойственно ошибаться. 😊

Страницы: 1
Наверх