Добрый день, пытался разобраться, но мой мозг явно не соображает. Есть две таблицы конкретных в них нужно реализовать переход из одной ячейки в следующую, чтоб не нажимать постоянно ентер ентер ентер ентер ентер итд. Есть файл который по всему интернету развешан как пример того что так сделать можно. Есть примеры кода который вроде должен работать, но я так и не смог его никак применить ибо вообще не программист ни в одном глазу Пример также сюда пишу: Помощь оплачивается, аппетиты за помощь устанавливаете Вы. Заранее благодарен
Код
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
По количеству введенных символов в ячейку, как я понимаю. В данном случае 1 символ - автоматический переход в следующую (или заданную) Также для большего понимания моей странной речи прикрепил файл в котором это реализовано. То есть перед глазами пример того что это возможно, и это работает. Но в силу своей глупости я не понимаю как это сделать в моем случае. Однако возможность реализации решения этой задачи очевидна.
Игорь написал: бесплатный макрос, - но требует доработки под ваш файл. можно взять как идею реализации
Вот этот вариант очень хорошо выглядит
Цитата
Игорь написал: извиняюсь, сразу не посмотрел файлы, - не понял о чем речь сейчас поглядел, - и исправил свой ответ
Да извиняться не за что, я сам иногда не очень понятно объясняю
А конкретно Вы можете переделать под эти таблицы тот бесплатный макрос? Просто у меня плещутся в моей голове сомнения, по отношению к моим способностям. Естественно не бесплатно и даже не только за "спасибо"
Не, я тот макрос бесплатный дорабатывать не возьмусь Тут много форумчан, желающих подзаработать, - они это смогут сделать (или написать что-то аналогичное) потому что макрос тот предназначен для полей типа «телефон», «email» и т.п. (где много клеточек) а вам, похоже, надо и с одиночными клетками что-то делать
humoristtt, здравствуйте. Честно говоря, муторная работёнка. IMHO, тут нужно каждую форму отдельно программировать (универсального макроса не сделаю) + от Вас нужно ТЗ по каждой форме, т.к. не все области это просто текст, например, где-то даты, то какие ограничения по ним? И таких вопросов будет не мало. Могу попробовать взяться. Отпишусь в ЛС.
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
Sub OffsetRight()
ActiveCell.Offset(0, 1).Select
End Sub
Вешаем на сочетание клавиш, кидаем в Personal, и - вправо по строке, по любому активному листу! Эге-гей-е-е-ей! По дороге можем наследить в ячейках всякими-разными символами/словами/предложениями. Но - без ручного ввода. При попытке ручного вмешательства Excel будет ждать выхода из ячейки и "Эге-гей-е-е-ей!" откладывается до Enter
Как я понял, нужно быстро перемещаться вправо, при этом вписывать в ячейки по одному символу... И в чем стрелки навигации провинились?
Да ну не я один такое спрашивал, если вбить подобный вопрос в поисковике то найдется около 50 идентичных топиков на разных форумах и нигде по сути нет понятного и доходчивого ответа. Но я лично уже, надеюсь, решил вопрос. А вопрос и вправду насущный для всяких анкет где есть потребность вбивать по одному символу в ячейку, при всем при этом есть пример где это реализовано и он нехило дразнит. И при этом в 90% случаев все знатоки excel в один голос утверждают что это невозможно, а когда им показываешь, вот мол вот тут работает, значит это возможно, все сразу знают как это сделать, но не говорят, ибо "это же и так понятно" Ну в принципе как и всегда.
vikttur написал: Подразните и меня. Где оно? Я не знаю, как такое реализовать. Поучусь.
В первом сообщении данной темы, коим автором я являюсь, есть приложенные файлы среди них затесался файл "пример", вот там это работает и вполне успешно.
vikttur написал: Поделитесь с 49-ю такими же страждальцами, заслужите почти 50 спасибов
Не люблю отступать от традиций, я так понимаю здесь их чтут)))) И если честно, мне интуевина подсказывает что 49 людей уже решили вопрос точно также как и я. Вполне разумный поступок, можно сказать))
Код из примера не будет работать в 64-битных системах. Надо править. Я могу предложить решение перемещения так, что по нажатии Enter будете перемещаться по строго заданному диапазону ячеек по кругу. Изменили ячейку А1, нажали Enter, попали сразу в Е9(к примеру). И так далее. При этом порядок перехода так же задается просто порядком ячеек.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
А вообще, Вам что надо? Внедрить код в таблицы? Или научить пользоваться? Под Ваши таблицы подстроить можно без проблем, если Вам надо только забивать данные на клавиатуре. Правда, не знаю как Вы тогда в одну ячейку вобьете "г."(есть у Вас такое)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Витя, в любом случае бланк необходимо будет настраивать, как ни крути. Дело хоть и несложное, но муторное. Диапазоны-то разные. Плюс надо понять: нужно ли все же как-то в определенные ячейки вставлять крестик независимо от того, что туда попытались вбить. Ведь есть в бланке и такие моменты.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Так и я об этом. Я понял задачу так (возможно, желание из параллельной темы сбило) - работа одним кодом на любом бланке с "огороженными" ячейками. В код не заглядывал, думал, там действительно отслеживание ячеек какое-то.
vikttur написал: одним кодом на любом бланке с "огороженными" ячейками
Это тоже возможно. Чуть помучиться - и нет проблем При условии, что всегда надо отслеживать исключительно ячейки с границами. Но ведь и границы должны быть правильно установлены. Подождем автора - может прояснит ради интереса(т.к. для себя-то он вопрос вроде уже решил).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
humoristtt написал: Есть две таблицы конкретных в них нужно реализовать переход из одной ячейки в следующую,... итд. Есть файл который по всему интернету развешан как пример и т.д. ...
Разница еще и в том, что в примере - ячейки, в которые вводятся буквы, не объединенные, а в "двух конкретных таблицах" - объединенные
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
Работа выполнена и сдана в полном объёме. Половина оплаты получена. Заказчик пропал на неделю. Появился и сообщил, что были проблемы из-за пропажи телефона (он необходим для оплаты через киви) - это понятно. Обещал оплатить остаток. Прошла ещё неделя. Оплаты нет. Мне больше нечего сказать, т.к. я не знаю, что с человеком произошло. --- Да, забыл сказать. Заказчик обнаружил какую-то ошибку, но забыл какую. На предложение исправить ответа не последовало.