Страницы: 1
RSS
Очень нужно решить вопрос с автопереходом, Нужно реализовать автопереход с одной ячейки в следующую при наборе 1 символа в двух конкретных таблицах
 
Добрый день, пытался разобраться, но мой мозг явно не соображает.
Есть две таблицы конкретных в них нужно реализовать переход из одной ячейки в следующую, чтоб не нажимать постоянно ентер ентер ентер ентер ентер итд.
Есть файл который по всему интернету развешан как пример того что так сделать можно.
Есть примеры кода который вроде должен работать, но я так и не смог его никак применить ибо вообще не программист ни в одном глазу
Пример также сюда пишу:
Помощь оплачивается, аппетиты за помощь устанавливаете Вы. Заранее благодарен
Код
Private Declare Function GetKeyboardLayoutName Lib "user32" Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As LongDim KeybLayoutName As String
 
Const HOOKED_KEYS As String = "f,dult`;pbqrkvyjghcnea[wxio]sm'.z 0123456789@-_\/"
 
Function InRange(Target As range, RangeIn As range) As Boolean
    InRange = Not Intersect(Target, RangeIn) Is Nothing
End Function
 
Function CaseRanges(strkey As String) As String
    If (InRange(ActiveCell, range("A32:AP34"))) Then
        CaseRanges = strkey
        Exit Function
    End If
    If (InRange(ActiveCell, range("38:46, 55:66")) And strkey <> " ") Then
        CaseRanges = "X"
        Exit Function
    End If
    CaseRanges = UCase(strkey)
End Function
 
Function ChangeLang(strkey As String) As String
    Const KEYB_RUS As String = "00000419"
    Const KEYB_ENG As String = "00000409"
    Dim CharsRus As String, CharsEng As String
    CharsRus = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
    CharsEng = "F<DULT~:PBQRKVYJGHCNEA{WXIO}SM"">Zf,dult`;pbqrkvyjghcnea[wxio]sm'.z"
    
    KeybLayoutName = String(9, 0)
    GetKeyboardLayoutName KeybLayoutName
    
    Dim i As Integer
    Dim LangRus As Boolean
    LangRus = (StrComp(KeybLayoutName, KEYB_RUS, vbTextCompare) = 0)
    If LangRus Then
        i = InStr(CharsEng, strkey)
    Else
        i = InStr(CharsRus, strkey)
    End If
    If i = 0 Then
        ChangeLang = strkey
        Exit Function
    End If
    If LangRus Then
        ChangeLang = Mid(CharsRus, i, 1)
    Else
        ChangeLang = Mid(CharsEng, i, 1)
    End If
End Function
 
Sub CellEnterFinish(keycode As Integer)
'    On Error Resume Next
   strkey = CaseRanges(ChangeLang(Chr(keycode)))
    If Not ActiveCell.AllowEdit Then ActiveCell.Next.Activate
    ActiveCell.Value = strkey
    ActiveCell.Next.Activate
End Sub
 
Sub HookKeys(Str As String, FuncName As String)
'   On Error Resume Next
   For i = 1 To Len(Str)
        s = Mid(Str, 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(Str As String)
'    On Error Resume Next
   For i = 1 To Len(Str)
        s = Mid(Str, 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
 
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
 
Sub НВР_ХРУЩ_ОднаБукваВКаждойЯчейке()
'    On Error Resume Next
   HookKeys HOOKED_KEYS, "CellEnterFinish"
    Application.OnKey "{BACKSPACE}", "RemovePrev"
    Application.OnKey "{TAB}"
End Sub
 
Private Sub Auto_Close()
    UnHookKeys HOOKED_KEYS
    Application.OnKey "{BACKSPACE}"
End Sub
Изменено: humoristtt - 31.01.2016 18:18:43
 
посмотрите такой вариант
http://excelvba.ru/programmes/TaxBlanks
(бесплатный макрос, - но требует доработки под ваш файл. можно взять как идею реализации)

или можно настроить заполнение таких форм из «нормальной» таблицы Excel нажатием одной кнопки
http://excelvba.ru/programmes/FillDocuments/SeparateLetters
(платный макрос, 1600 руб)

PS: извиняюсь, сразу не посмотрел файлы, - не понял о чем речь
сейчас поглядел, - и исправил свой ответ
Изменено: Игорь - 31.01.2016 18:17:17
 
По количеству введенных символов в ячейку, как я понимаю. В данном случае 1 символ - автоматический переход в следующую (или заданную)
Также для большего понимания моей странной речи прикрепил файл в котором это реализовано. То есть перед глазами пример того что это возможно, и это работает. Но в силу своей глупости я не понимаю как это сделать в моем случае. Однако возможность реализации решения этой задачи очевидна.
 
humoristtt, код следует оформлять соответствующим тегом. Ищите такую кнопку и исправьте своё сообщение. Спасибо!
 
Цитата
Юрий М написал:
humoristtt, код следует оформлять соответствующим тегом. Ищите такую кнопку и исправьте своё сообщение. Спасибо!
Сделано
 
Цитата
Игорь написал:
бесплатный макрос, - но требует доработки под ваш файл. можно взять как идею реализации
Вот этот вариант очень хорошо выглядит
Цитата
Игорь написал:
извиняюсь, сразу не посмотрел файлы, - не понял о чем речь
сейчас поглядел, - и исправил свой ответ
Да извиняться не за что, я сам иногда не очень понятно объясняю


А конкретно Вы можете переделать под эти таблицы тот бесплатный макрос? Просто у меня плещутся в моей голове сомнения, по отношению к моим способностям.
Естественно не бесплатно и даже не только за "спасибо"
 
Не, я тот макрос бесплатный дорабатывать не возьмусь
Тут много форумчан, желающих подзаработать, - они это смогут сделать (или написать что-то аналогичное)
потому что макрос тот предназначен для полей типа «телефон», «email» и т.п. (где много клеточек)
а вам, похоже, надо и с одиночными клетками что-то делать
 
Цитата
Игорь написал:
Тут много форумчан, желающих подзаработать
Ну что-то пока никто не объявился.
А если с нуля попробовать написать что-то подходящее это тоже не охота?
 
humoristtt, здравствуйте. Честно говоря, муторная работёнка. IMHO, тут нужно каждую форму отдельно программировать (универсального макроса не сделаю) + от Вас  нужно ТЗ по каждой форме, т.к. не все области это просто текст, например, где-то даты, то какие ограничения по ним? И таких вопросов будет не мало. Могу попробовать взяться. Отпишусь в ЛС.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Код
Sub OffsetRight()
    ActiveCell.Offset(0, 1).Select
End Sub

Вешаем на сочетание клавиш, кидаем в Personal, и - вправо по строке, по любому активному листу! Эге-гей-е-е-ей! :)
По дороге можем наследить в ячейках всякими-разными символами/словами/предложениями. Но - без ручного ввода.
При попытке ручного вмешательства Excel будет ждать выхода из ячейки и "Эге-гей-е-е-ей!" откладывается до Enter

Как я понял, нужно быстро перемещаться вправо, при этом вписывать в ячейки по одному символу...
И в чем стрелки навигации провинились?

Сговорились? :)
 
Цитата
vikttur написал: Сговорились?
Да ну не я один такое спрашивал, если вбить подобный вопрос в поисковике то найдется около 50 идентичных топиков на разных форумах и нигде по сути нет понятного и доходчивого ответа. Но я лично уже, надеюсь, решил вопрос. А вопрос и вправду насущный для всяких анкет где есть потребность вбивать по одному символу в ячейку, при всем при этом есть пример где это реализовано и он нехило дразнит. И при этом в 90% случаев все знатоки excel в один голос утверждают что это невозможно, а когда им показываешь, вот мол вот тут работает, значит это возможно, все сразу знают как это сделать, но не говорят, ибо "это же и так понятно"
Ну в принципе как и всегда.
Изменено: humoristtt - 01.02.2016 00:11:58
 
Цитата
при всем при этом есть пример где это реализовано и он нехило дразнит
Подразните и меня. Где оно?  Я не знаю, как такое реализовать. Поучусь.

Цитата
Но я лично уже, надеюсь, решил вопрос
Поделитесь с 49-ю такими же страждальцами, заслужите почти 50 спасибов :)
 
Цитата
vikttur написал:
Подразните и меня. Где оно?  Я не знаю, как такое реализовать. Поучусь.
В первом сообщении данной темы, коим автором я являюсь, есть приложенные файлы среди них затесался файл "пример", вот там это работает и вполне успешно.  
 
Цитата
vikttur написал:
Поделитесь с 49-ю такими же страждальцами, заслужите почти 50 спасибов
Не люблю отступать от традиций, я так понимаю здесь их чтут))))
И если честно, мне интуевина подсказывает что 49 людей уже решили вопрос точно также как и я. Вполне разумный поступок, можно сказать))
 
Спасибо. Посмотрел.
Определение ячеек с границами и выход из редактирования ячейки. Как реализовано, не знаю.
 
Код из примера не будет работать в 64-битных системах. Надо править.
Я могу предложить решение перемещения так, что по нажатии Enter будете перемещаться по строго заданному диапазону ячеек по кругу. Изменили ячейку А1, нажали Enter, попали сразу в Е9(к примеру). И так далее. При этом порядок перехода так же задается просто порядком ячеек.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А вообще, Вам что надо? Внедрить код в таблицы? Или научить пользоваться? Под Ваши таблицы подстроить можно без проблем, если Вам надо только забивать данные на клавиатуре.
Правда, не знаю как Вы тогда в одну ячейку вобьете "г."(есть у Вас такое)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Как я понимаю, нужен код, работающий на любом бланке.
 
Витя, в любом случае бланк необходимо будет настраивать, как ни крути. Дело хоть и несложное, но муторное. Диапазоны-то разные. Плюс надо понять: нужно ли все же как-то в определенные ячейки вставлять крестик независимо от того, что туда попытались вбить. Ведь есть в бланке и такие моменты.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Так и я об этом. Я понял задачу так (возможно, желание из параллельной темы сбило) - работа одним кодом на любом бланке с "огороженными" ячейками.
В код не заглядывал, думал, там действительно отслеживание ячеек какое-то.
 
Цитата
vikttur написал:
одним кодом на любом бланке с "огороженными" ячейками
Это тоже возможно. Чуть помучиться - и нет проблем :) При условии, что всегда надо отслеживать исключительно ячейки с границами. Но ведь и границы должны быть правильно установлены.
Подождем автора - может прояснит ради интереса(т.к. для себя-то он вопрос вроде уже решил).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
humoristtt написал:
Есть две таблицы конкретных в них нужно реализовать переход из одной ячейки в следующую,... итд.
Есть файл который по всему интернету развешан как пример и т.д. ...
Разница еще и в том, что в примере - ячейки, в которые вводятся буквы, не объединенные, а в "двух конкретных таблицах" - объединенные
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Господа, работа в работе. :) Решается формулами (для бланка), выпадающими списками и проверкой введенных данных (для листа с человеческим вводом данных)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Работа выполнена и сдана в полном объёме. Половина оплаты получена. Заказчик пропал на неделю. Появился и сообщил, что были проблемы из-за пропажи телефона (он необходим для оплаты через киви) - это понятно. Обещал оплатить остаток. Прошла ещё неделя. Оплаты нет. Мне больше нечего сказать, т.к. я не знаю, что с человеком произошло.
---
Да, забыл сказать. Заказчик обнаружил какую-то ошибку, но забыл какую. На предложение исправить ответа не последовало.
Изменено: JayBhagavan - 24.02.2016 11:37:50

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Читают тему
Наверх