Страницы: 1 2 След.
RSS
Превращение Excel в блокнот, заполнение бланка по букве
 
Здравствуйте уважаемые знатоки!

В общем решил "запилить" заполнялку бланка в Exele.
имеются пронумерованные ячейки. в общем нажимая буквы или цифры на клавиатуре они забиваются по оному символу в ячейку,
слева на право и потом типа перевод каретки, и снова слева на право.
все что не заполняется хочу залить синим цветом но что бы нумерация была видна
и бланк имел печатную форму без заливки
кто что подскажет?
хотел в 1с писать но решил подумать...
и еще момент: бланк на 100 букв если тут ячейки кончились, то появился лист номер 2 который заполняется в том-же алгоритме
 
Мне кажется заморочено будет отслеживать и анализировать каждое нажатие клавиш. Может писать текст в обычном блокноте, а потом считывать из .txt-файла в бланк?
Согласие есть продукт при полном непротивлении сторон
 
при заполнении могут быть ошибки и что бы найти эту ошибку, передающая сторона называет в какой группе ошибка, и в этом бланке проще искать (оперативно, быстро). а вот заполнять не удобно, так как курсор уходит вниз... а эксель перестраивать из-за одного файла не хотелось бы.  
 
Цитата
WaleryN написал:
хотел в 1с писать но решил подумать
Надо было там и писать :)
Изменено: doober - 20.11.2023 18:34:05
 
doober, увидел макрос что прикрутили, но нажимать после каждой буквы, Ентер то еще занятие.
вот как раз для скорости и задумывалось просто набирать текст, а он раскидывается по ячейка и группам (5 букв в группе).
Смысл сего действа принимать текст с эфира и забивать его в бланк,
а при проверке быстро сказать где ошибка (в какой группе).
Изменено: WaleryN - 20.11.2023 21:44:30
 
Примерно заполнил бланк, еще раз отредактировал файл
Изменено: WaleryN - 20.11.2023 21:50:15
 
WaleryN, ну это как идея, не более, если поймете то может и допилите, но в целом надо менять процедуру с обработки изменений на что-то другое , тогда будет и без ошибок и без дребезга экрана.
Изменено: БМВ - 20.11.2023 23:36:34
По вопросам из тем форума, личку не читаю.
 
чуть подкрутил. но надо фильтровать по допустимым символам ввода, возможно корректировке регистра, доделать визуализацию и активацию объекта по выборе любой ячейки доступной для ввода.
По вопросам из тем форума, личку не читаю.
 
Сейчас только добрался, что бы ответить...
почти оно, съедает буквы, почему не понял (благо на тренировочной)
понял что если сохранять, то ТХТ файл, печатная форма наверное из бланка
и наверное сделать очистку бланка
вопрос остался с пропуском, наверное пробел а вот как вернуться назад и стереть не понятно бэкспейс не работает )))

зашел в визео ни че не понял, были бы коменты на русском еще бы по угадывал, а так раньше все делал по подсказкам с этого сайта  
Изменено: WaleryN - 28.11.2023 12:24:08
 
Когда-то делал примерно такую штуку. Совсем без API, к сожалению, не получилось сделать. Хотя в теории, если допустить, что раскладка клавиатуры будет всегда русская или всегда английская - то можно и без API. Но очень сомневаюсь, что есть такие задачи, где всегда надо вводить только на одно языке.
Все в одном модуле, комментарии общие тоже проставлены:
Код
'---------------------------------------------------------------------------------------
' Author : Щербаков Дмитрий(The_Prist)
'          Профессиональная разработка приложений для MS Office любой сложности
'          Проведение тренингов по MS Excel
'          https://www.excel-vba.ru
'          info@excel-vba.ru
'          WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
' Purpose:
'---------------------------------------------------------------------------------------
Option Explicit

#If Win64 Then
    Private Declare PtrSafe Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
#Else
    Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
#End If
Dim KLayoutName As String
'отслеживаемые символы (по сути все символы клавиатуры)
Const sAUTOENTER_Symbols$ = "f,dult`;pbqrkvyjghcnea[wxio]sm'.z 0123456789@-_\/"

'ввод перехваченного символа и переход к следующей ячейке
Sub InputLetterToCell(keycode As Integer)
    Dim skey$
    On Error Resume Next
    skey = ChangeLang(Chr(keycode))
    'Диапазон, в который должны вводиться только заглавные буквы
    'если изменяемая ячейка не входит в этот диапазон - буквы остаются в нижнем регистре
    If Not Intersect(ActiveCell, Range("A1:D20")) Is Nothing Then
        skey = UCase(skey)
    End If
    
    If Not ActiveCell.AllowEdit Then
        ActiveCell.Next.Activate
    End If
    ActiveCell.Value = skey
    ActiveCell.Next.Activate
End Sub
'удаление последнего введенного символа клавишей BACKSPACE
Private Sub RemovePrev()
    On Error Resume Next
    If ActiveCell.Value <> "" And ActiveCell.Value <> " " Then
        ActiveCell.Value = ""
        Exit Sub
    End If
    ActiveCell.Previous.Activate
    ActiveCell.Value = ""
End Sub

'процедура определения текущей раскладки и изменение букв с англ на русские
'финт используется, т.к. стандартно onKey "не дружит" с кириллицей при активной английской раскладке
'поэтому у нас для OnKey применяется назначение только для англ.раскладки
Function ChangeLang(skey$) As String
    Const KEYB_RUS$ = "00000419"
    Const KEYB_ENG$ = "00000409"
    Dim CharsRus$, CharsEng$, sChars$
    Dim i&
    Dim IsLangRus As Boolean
    
    CharsRus = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
    CharsEng = "F<DULT~:PBQRKVYJGHCNEA{WXIO}SM"">Zf,dult`;pbqrkvyjghcnea[wxio]sm'.z"
    
    KLayoutName = String(9, 0)
    GetKeyboardLayoutName KLayoutName
    
    IsLangRus = (StrComp(KLayoutName, KEYB_RUS, 1) = 0)
    If IsLangRus Then
        sChars = CharsEng
    Else
        sChars = CharsRus
    End If
    i = InStr(sChars, skey)
    If i = 0 Then
        ChangeLang = skey
    Else
        If IsLangRus Then
            sChars = CharsRus
        Else
            sChars = CharsEng
        End If
        ChangeLang = Mid(sChars, i, 1)
    End If
End Function
'включаем отслеживание нажатий клавиатуры
Sub HookKeys(sChars$, FuncName$)
    Dim i&, s$, sx
    On Error Resume Next
    For i = 1 To Len(sChars)
        s = Mid(sChars, i, 1)
        If Not IsNumeric(s) Then
            Application.OnKey "{" & s & "}", "'" & FuncName & """" & Asc(s) & """'"
        Else
            sx = CInt(s) + 96
            Application.OnKey s, "'" & FuncName & """" & Asc(s) & """'"
            Application.OnKey "{" & sx & "}", "'" & FuncName & """" & Asc(s) & """'"
        End If
    Next
End Sub
'отключаем отслеживание нажатий клавиатуры
Sub UnHookKeys(sChars$)
    Dim i&, s$, sx
    On Error Resume Next
    For i = 1 To Len(sChars)
        s = Mid(sChars, i, 1)
        If Not IsNumeric(s) Then
            Application.OnKey "{" & s & "}"
        Else
            sx = CInt(s) + 96
            Application.OnKey s
            Application.OnKey "{" & sx & "}"
        End If
    Next
End Sub

'процедура создания отслеживания нажатия на клавиатуре символов
'для автоматического перехода на следующую ячейку
'   на данный момент вызывается принудительно, но может быть так же вызвана
'   из модуля ЭтаКнига(ThisWorkdbook) в процедуре Workbook_Open
Sub SDV_OneLetterOneCell()
    On Error Resume Next
    HookKeys sAUTOENTER_Symbols, "InputLetterToCell"
    Application.OnKey "{BACKSPACE}", "RemovePrev"
    Application.OnKey "{TAB}"
End Sub
'специальная процедура, запускаемая автоматически перед закрытием книги
'код так же может быть расположен в событийной процедуре модуля ЭтаКнига(ThisWorkdbook) - Workbook_BeforeClose
Private Sub Auto_Close()
    UnHookKeys sAUTOENTER_Symbols
    Application.OnKey "{BACKSPACE}"
End Sub

Важный момент: нажатия с SHIFT-ом не отслеживаются. Поэтому в процедуре InputLetterToCell есть ориентир на диапазон ячеек, в которых буквы надо делать заглавными. Это диапазон "A1:D20". Приведен для примера, может быть именованным диапазоном из несвязанных ячеек, чтобы подстроить под любой шаблон ввода.
Так же применен удобный переход к следующим заполняемым ячейкам(через свойство AllowEdit). Т.е. мы снимаем защиту с тех ячеек, в которые должен осуществляться быстрый ввод, а все остальные защищаем. Устанавливаем защиту листа. Теперь после ввода в последнюю не защищенную ячейку в строке или блоке будет сделан автоматический переход к следующей разрешенной для ввода ячейке. Как-то так...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Не глядя в файл могу сказать, что на мой взгляд отслеживать нажатия лучше в текстбоксе, если это ячейка то динамически размещать над ней текстбокс.. А потом переносить текст в ячейку.
 
Проще сделать так, как делают в налоговых декларациях - набирать обычный текст, а в ячейки переносить формулами.

Например, так. Все формулы получены копированием формулы из ячейки B7.
Изменено: sokol92 - 28.11.2023 15:27:07
Владимир
 
Круто!!!
по буквам в тексте радиограммы, там нет Ё Ъ (их нет в азбуке морзе). А заглавными что бы легче читать.
вариант как у налоговиков изящен
но когда радист набивает текст он на него смотрит, и приятнее когда это идет группами.
а нумерация групп облегчает корректировку текста. Это когда забил допустим 60 групп. А в момент приема кто то чихнул, на 32 группе, и кашлял на 48 группе, их пропустил пробелом. и потом когда та сторона перешла на прием запрашиваешь не достающие группы... а еще с той стороны стучат повтори принятое полностью. значит текст передаешь туда и они в ответ у Вас ошибка 12, 18, 34 группах и их повторно переколачиваешь (правишь)



так плавно перейдем к шифровально-дешифровальным алгоритмам методом замены с закрытым ключем в Exele ))))
Изменено: WaleryN - 28.11.2023 17:39:31
 
Цитата
WaleryN написал:
но когда радист набивает текст
Где набивает? В Excel? В Excel быстрее и надежнее набить обычный текст, тем более, что можно запустить проверку орфографии, использовать буфер обмена для  копирования и т.д.
Если речь идет о набивке с предварительно распечатанного бланка, то формулы можно поменять для перевода букв в заглавный регистр, для замены Ъ и т.п.
Изменено: sokol92 - 28.11.2023 17:49:01
Владимир
 
sokol92, приветствую. Тут явно нужно знать и понимать специфику. Даже если гворить о передаче не морзянкой , а голосом цифр шифрограммы то указанный шаблон помогает. А уж про морзянку и подавно ибо сбой сразу в группе белеберду покажет. В целом все сродни групп цифр номера карт банковских. Если ввод сразу на группы делит то проверка проще и нагляднее в противовес корсчету и подобным.
Но концептуально я согласен, что не стоит форму ввода приближать к печатной форме.
По вопросам из тем форума, личку не читаю.
 
Здравствуйте, Михаил! Мы должны разделить действия, которые производятся в Excel (подготовка бланка в левой части листа) и действия, которые не производятся в Excel (всё остальное).
Владимир
 
sokol92, Я там выше дополнил и это не противоречит последнему.
По вопросам из тем форума, личку не читаю.
 
радист обычно пишет текст руками, некоторые продвинутые в ворде или блокноте...
меня же посетила мысль из ворда его перекинуть в эксель.
ТЕКСТ радиограммы это шифровка, радист не в курсе что он передает или принимает, в иных случаях он заполнит другой бланк.
проверка производится при обратной передаче, или когда выпала часть букв.
заглавные буквы для удобства.
 
Цитата
WaleryN написал:
ТЕКСТ радиограммы это шифровка,
не ужели это еще живо?
По вопросам из тем форума, личку не читаю.
 
Цитата
написал:
не ужели это еще живо?
а как же! это надежнее Ваших компуктеров )))) , а если серьезно пример выдернут из консультанта плюс, это живо и работает на полную.

Обычно печатают уже проверенный и отредактированный вариант, а я подумал набирать вот так сразу с клавы и не парить мозг, сохранил печатную форму, и на распечатку и понес адресату
 
Цитата
testuser #11 написал:
отслеживать нажатия лучше в текстбоксе
Жмём на листе кнопку 'Кнопка':
 
Это конец бланка подумал Штирлец ))))))))))))))))
а если серьезно, нужно продолжение на странице два, три и т.д.


История:
Был случай, радист принимал радиограмму (на распечатанную таблицу) (100групп)
а заголовок про кашлял или про чихал
В общем исписал три бланка, их и было три...
в конце третьего бланка в душе матерился и планировал писать на стене на обоях

в этот раз ему повезло, было 302 группа заголовок и подпись как раз две группы
))))))))))))))))))))
Изменено: WaleryN - 29.11.2023 15:58:51
 
"... и какие-то чемоданы" ©
Цитата
WaleryN написал:
нужно продолжение на странице два, три и т.д.
Воть:
 
С.М.,
ругается на имя файла и ссылки файла
ищет файл ShFunktions.xla
Изменено: WaleryN - 30.11.2023 12:19:33
 
Цитата
WaleryN написал:
ругается
Уууу, хулиган !
 
С.М.,  все равно ругается, говорит этот файл на диске C:\VBXL\VBXL11
и продолжает искать  ShFunktions.xla
Изменено: WaleryN - 30.11.2023 13:34:43
 
Проискианглосакцев  :)  
 
Цитата
написал:
Проискианглосакцев    
Они ))))
единственное лист 1 и лист 2 бланки разные
а можно создавать новые листы письма без заголовка? (с таким же оформлением)

на фоне шифрограмм ударился в другую ветку на этом форуме...
 
WaleryN, тогда уж уточните:
что такое "листы письма без заголовка" ? без заполненых полей (полужирный шрифт) ?
(а лучше, ещё раз скинте файл с экземпляром/ми этого пустого бланка/ков)
Входящие и Исходящие в одной книге или в разных ?
В книге будут листы только с такими бланками ?
 
С.М., желтым выделил что не нужно (радистам) изменять, белое заполняется
Изменено: WaleryN - 30.11.2023 19:50:29
Страницы: 1 2 След.
Наверх