[CDR 2024] Автоматическое переименование файлов

Ну драчуйте дальше... '))'
 
  • Смешно
Реакции: zollinger
If fileIndex = 0 Then fullFileName = folderPath & baseFileName & fileExt Else fullFileName = folderPath & baseFileName & fileIndex & fileExt End If
Избавились от одной строки, а взамен написали целых пять. Такая себе оптимизация. '%)'
Весь цикл можно проще написать:
Do
fullFileName = folderPath & baseFileName & IIf(fileIndex = 0, "", fileIndex) & fileExt
fileIndex = fileIndex + 1
Loop Until Dir(fullFileName) = ""
 
Потому что оплата сдельная. Чем больше написал, тем больше получил. ;)
 
Потому что оплата сдельная. Чем больше написал, тем больше получил. ;)
Судя по экспоненциальному росту размеров современных приложений, индусам риса выдают пропорционально логарифму того что накодили за день '))'
 
  • Спасибо
Реакции: zollinger
Чем драчувать лишние строки в цикле, лучше скажите - а нормальную валидацию ввода числовых целых и дробных полей ввода в VBA еще не придумали? А то, понимаешь, космические корабли бороздят просторы исскуственного интеллекта, а чтобы нормально ввести число 0.5 чтобы в соседнем поле ввелось число 2*0.5=1.0 (и наоборот) с фильтром - приходится колхозить какой то бином Ньютона... :(
 
бином Ньютона...
В VBA (Visual Basic for Applications) можно использовать событие KeyPress или KeyDown для фильтрации вводимых символов в TextBox. Это позволяет контролировать, какие символы могут быть введены пользователем.

Если нужно разрешить ввод только определенных символов (например, цифр, точек и запятых), можно использовать следующий код:

Код:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    ' Разрешаем только цифры, точку, запятую и Backspace
    If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 46 Or KeyAscii = 44) And KeyAscii <> 8 Then
        KeyAscii = 0 ' Отменяем ввод символа
    End If
End Sub
В этом примере:

KeyAscii = 46 соответствует точке (.).

KeyAscii = 44 соответствует запятой (,).

Эти примеры помогут вам настроить фильтрацию ввода в TextBox в зависимости от ваших требований.
 
Да как символы фильтровать понятно - это вообще без KeyPress реализовать просто в OnChange. Я вообще про реализацию вменяемого числового поля ввода, связанного с другими, с механизмами превалидации, поствалидации и т.д. Неужели никто до сих пор такого готового не реализовал за многие десятилетия существования Майкрософтовского VBA?
 
Последнее редактирование модератором:
Похожая задача сейчас. Нужно экспортировать из корел множество объектов в JPG. Пользуюсь макросом "ExportToJPG", который я когда-то и нашёл на этом замечательном форуме. Но очень не хватает функции, чтобы к каждому имени файла добавлялось "_1", "_2", "_3" и так далее. Но в связи с тем, что подобные задачи появляются не каждый день, а от случая к случаю - за два года в коде не продвинулся. Пользуюсь тем, что есть.
 

Вложения

  • Screenshot_4.jpg
    Screenshot_4.jpg
    17.1 КБ · Просм.: 19
Да как символы фильтровать понятно - это вообще без KeyPress реализовать просто в OnChange. Я вообще про реализацию вменяемого числового поля ввода, связанного с другими, с механизмами превалидации, поствалидации и т.д. Неужели никто до сих пор такого готового не реализовал за многие десятилетия существования Майкрософтовского VBA?
Как вариант, при каждом вводе символа можно проверять получившуюся строку на IsNumeric. Можно, конечно, возиться с Keypress, но тогда надо проверять, а была ли уже введена точка для дробного числа или пользователь вводит вторую точку. Опять же, введенную точку-разделитель для дробных частей нужно конвертировать в запятую для правильного перевода строки в число.
 
Как вариант, при каждом вводе символа можно проверять получившуюся строку на IsNumeric. Можно, конечно, возиться с Keypress, но тогда надо проверять, а была ли уже введена точка для дробного числа или пользователь вводит вторую точку. Опять же, введенную точку-разделитель для дробных частей нужно конвертировать в запятую для правильного перевода строки в число.
Да можно, конечно, и я такое делал, вопрос в том, что в итоге все равно получается костыльная дичь, где нибудь вообще есть нормально реализованные числовые поля ввода на VBA или это какое то нетривиальное действие? Я уж не спрашиваю про готовые библиотеки, которых, как я понимаю, тоже в природе нету... :(
 
Но очень не хватает функции

приглашаем в кабинет оригинальный файл (Sancho позволил над ним издеваться), аккуратно вскрываем, накладываем пластырь от zollinger
... теперь только при эскпорте выделенного к имени JPG будет автоматом добавляться счётчик - без потверждения - _1, _2 ... и далее
при экспорте целиком страниц функционал без изменений.
...
и, кстати, Sancho предусмотрел ручное управление такими ситуациями
вот в это поле вполне можно руками вбивать свои "добавки"
1742377310818.png
 

Вложения

приглашаем в кабинет оригинальный файл (Sancho позволил над ним издеваться), аккуратно вскрываем, накладываем пластырь от zollinger
... теперь только при эскпорте выделенного к имени JPG будет автоматом добавляться счётчик - без потверждения - _1, _2 ... и далее
при экспорте целиком страниц функционал без изменений.
...
и, кстати, Sancho предусмотрел ручное управление такими ситуациями
вот в это поле вполне можно руками вбивать свои "добавки"
Посмотреть вложение 171801
Идея интересная. Попробую покопаться.
Подскажите, а в архиве Вы загрузили уже видоизменённый макрос? У меня корел (версия Х6, если что) не даёт загрузить именно эту версию. А тот, что я выше показывал, работает без проблем.
 
(версия Х6, если что
VBA7 ... если у вас распоследний Х6 со всеми заплатами ( а их там около 6-7 - насколько я помню) - то должен. На этой версии как раз VBA обновлялось с 6 на 7.
Иначе придется "разбирать на атомы" и далее собирать обратно.
 
  • Спасибо
Реакции: stickfolder
хотя не станем затягивать ... вот оно
... окропить и дать настояться
 

Вложения

  • Спасибо
Реакции: stickfolder
VBA7 ... если у вас распоследний Х6 со всеми заплатами ( а их там около 6-7 - насколько я помню) - то должен. На этой версии как раз VBA обновлялось с 6 на 7.
Иначе придется "разбирать на атомы" и далее собирать обратно.
Ну не на атомы, а на формы с bas модулями
 
  • Спасибо
Реакции: stickfolder
где нибудь вообще есть нормально реализованные числовые поля ввода на VBA
Всё зависит от того, что вы понимаете под словом "нормально". Кто-то ограничится проверкой "а число ли это вообще?" при выходе из текстбокса, а кто-то захочет контролировать ввод посимвольно, не разрешая вводить буквы и прочее, непохожее на цифры. В идеале можно сделать унаследованный от текстбокса класс, который будет отсеивать лишние символы, разрешая только то, что задано битами флагов.
 
В идеале можно сделать
В идеале можно сделать все что угодно, но где они эти реализации? Я ни в одном макросе VBA не видел вменяемой реализации ввода числа с плавающей точкой, чтобы хотя б как в винапишном окне было :(
 
реализации ввода числа с плавающей точкой, чтобы хотя б как в винапишном окне было
И как там в винапишном окне это всё происходит? Пользователь набирает цифры, набирает точку, набирает цифры после запятой и нажимает Ентер?