powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как получать данные из ячейки во время их ввода в неё?
25 сообщений из 26, страница 1 из 2
Как получать данные из ячейки во время их ввода в неё?
    #37625953
TёMochkiN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообщем такая проблемка, эксель ведь сам понимает 2 типа текст и число. Дата, например, для него тоже число 1 = 01.01.1900. Так вот, есть событие у листа Worksheet_Change, которое в параметре Target мне предоставляет ячейку с уже изменённым значением, т.е. если ячейка имеет формат даты, то при вводе в неё
01-01-01

я получаю
Target.Value : 01.01.2001
Target.Formula : "36892"

Могу ли я как то получить именно значение 01-01-01? Я знаю, что можно просто формат ячейки поменять на текстовый и всё супер, получаю Target.Value = "01-01-01" и Target.Formula = "01-01-01", но мне просто необходимо, чтоб оставался формат Датой. Есть какие-нибудь варианты?
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626018
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TёMochkiN,

поставьте формат ячейки ДД-ММ-ГГ
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626024
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kuklp,

я так понял, автору нужен "сырой ввод", то есть то, что вел пользователь, а это он привел как пример
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626060
TёMochkiN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, да, именно, как вы выразились, "сырой ввод нужен", чтобы я мог обработать текст до нажатия Enter (и прочих клавиш, позволяющие окончить редактирование в текущей ячейке). Я просто программировал на C# и при написании Win-формы иногда использовал событие Control.TextChanged. Вот я и подумал, раз C# и VB довольно-таки схожи, может тогда и что-нибудь подобное было бы в VBA.
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626074
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TёMochkiN,

Событий в Экселе маловато
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626077
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TёMochkiN,

Просто VBA наверняка нет, т.к. в режиме редактирования ячейки не работают никакие события VBA. Можно попробовать в обход через Windows API, но стоит ли овчинка выделки. Какова конечная цель данного экзерсиса?
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626093
TёMochkiN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно мне нужно это для работы. В экселевском файле большая таблица. Я готовлю шаблон, который в последствии передам пользователям. По заполнению шаблона, пользователи отдают заполненный уже шаблон другому человеку, который загружает данные в 1С. В 1Ске мы конечно сделали обработку, которая исправляет всякие недочеты пользователей, но эти гады будто назло кучу ошибок делают, т.е. в неправильном формате вводят данные, что приводит к потере загружаемых данных. Поэтому мне необходимо проверять ячейки на правильность вводимого значения в соответствии со столбцом, к которому относится ячейка. Как вы понимаете, мне нужно проверять ячейки разных форматов, а не только дату.
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626096
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда лучше форму сделать.
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626101
TёMochkiN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверно мне придется использовать тогда просто текстовый формат ячеек и путём перебора каждого символа убирать ненужное, добавлять нужное...
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626105
TёMochkiN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выводить форму для ввода значения? Пользователи убьются об стену вводить так и пошлют меня куда подальше))) В таблице 37 столбцов и до 300 строк надо вводить)))
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626109
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TёMochkiN,

Вам же Шокер посоветовал - "сделайте форму ввода".
И там для всех контролов есть бОльшее количество событий, включая нужные вам...
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626110
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TёMochkiNНаверно мне придется использовать тогда просто текстовый формат ячеек и путём перебора каждого символа убирать ненужное, добавлять нужное...главное, начал ты с того, что так нелья....
А зачем перебирать? Если выражение является датой (IsDate) можно преобразовать его в дату (CDate), а потом отформатировать (Format$) как требуется. А если не является датой - ругаться.
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626131
TёMochkiN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proглавное, начал ты с того, что так нелья....
Просто придётся ещё обработку тогда переделывать для загрузки данных в 1С.

в принципе я еще покручу CDate и т.п.
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626147
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProTёMochkiNНаверно мне придется использовать тогда просто текстовый формат ячеек и путём перебора каждого символа убирать ненужное, добавлять нужное...главное, начал ты с того, что так нелья....
А зачем перебирать? Если выражение является датой (IsDate) можно преобразовать его в дату (CDate), а потом отформатировать (Format$) как требуется. А если не является датой - ругаться.
IsDate - довольно ветренная и беспринципная дама :) Я бы держался от нее подальше.

Если пользователи производят ввод данных поячеечно и нет риска использования ими копирования данных из диапазона в диапазон, то есть еще вариант с правилами проверки.

Еще можно запретить вход в ячейку, а по клику вызывать ActiveX календарь.

Я все же сторонник уже предложенного варианта с формой.
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626175
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторМогу ли я как то получить именно значение 01-01-01? Я знаю, что можно просто формат ячейки поменять на текстовый и всё супер, получаю Target.Value = "01-01-01" и Target.Formula = "01-01-01", но мне просто необходимо, чтоб оставался формат Датой. Есть какие-нибудь варианты? На этот вопрос мой ответ ИМХО самый простой, надежный и малозатратный. В форму тоже можно Бог знает чего навводить и на ячейку можно навесить миллион проверок. Но вопрос звучал - как при правильном вводе получить правильное отображение, чтоб введенное оставалось датой :-)
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626180
kuklp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вариант.
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626216
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле можно еще эмулировать правило проверки с пом. обработчика события Worksheet_Change и проверки каждой ячейки в диапазоне Target например для дат с пом. Application.IsNumber(), применяя Application.Undo и соотв. MsgBox в случае неверного значения
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626220
TёMochkiN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а можно как то маску ввода сформировать?
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626227
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TёMochkiN,

Пока нет :(, но предложение в MS отправлено. Ждем-с
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626234
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL),

Пока можно только так, но правила проверки можно обойти копированием в проверяемую ячейку из другой ячейки
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626262
TёMochkiN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, вообщем я пришел к такому выходу:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Dim usedTarget As Integer 'переменная, с помощью которой я прекращаю зацикливание события изменения'

Private Sub Worksheet_Change(ByVal Target As Range)
    usedTarget = usedTarget + 1
    IIf usedTarget > 1, 0, 1
    EnableEvents = True
    If Target.Cells.Count > 1 Then Exit Sub
        If Not Intersect(Target, Range("Дата")) Is Nothing Then
            Call CheckДата(Target)
            GoTo PasswordOn
        End If
End Sub


Private Sub CheckДата(Target As Range)
If usedTarget <> 1 Then Exit Sub
    Dim StrVal As String, dDate As Date
    If Target.Value <> "" Then
        If IsDate(Target.Value) Then
            With Target
                StrVal = Format(.Text, "000000")
                If IsNumeric(StrVal) And Len(StrVal) = 6 Then
                    On Error GoTo DateError
                    dDate = DateValue(Left(StrVal, 2) & "/" & Mid(StrVal, 3, 2) & "/" & Right(StrVal, 2))
                    If dDate < CDate("01.01.2000") Then GoTo DateError
                        .Value = CStr(dDate)
                        Exit Sub
DateError:
                    dDate = StrVal
                    .Value = CStr(dDate)
                End If
            End With
        Else
            MsgBox "А вот такое значение: [ " & Target.Value & " ] вводить нельзя.", 48, "Фиг вам!"
            Target.Value = ""
            Target.Select
        End If
    End If
End Sub



Ну это часть кода, мож кому понадобится. При чём формат ячеек Дата.
что делает?
при вводе

121212
12,12,12
12,12,2012
12-12-12
12-12-2012
12/12/12
12/12/2012

значение ячейки поменяется на 12.12.2012
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626526
MX-9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TёMochkiN,

а что если вводить дату в ячейку с текстовым форматом ?

а затем после перехвата и всех проверок введенного текстового образа даты
если эта дата оказадась нормальная
то переводить формат этой ячейки в "ДАТА"

а если нет - то выдавать ошибку и ждать повторного ввода ?
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626791
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: TёMochkiN
> Пользователи убьются об стену вводить так и пошлют меня куда подальше))) В таблице 37 столбцов и до 300 строк
> надо вводить)))

У меня пользователи не убиваются. А переделывают. Я проверяю что и как и если что-то не совпадает с ожидаемым, просто
показываю ошибку

> при вводе
....
> значение ячейки поменяется на 12.12.2012

У меня программа _ничего_не_делает_, только показывает строку, столбец и не понравившиеся данные. И пользователь _сам_
исправляет. Я не додумываю за пользователя что он хотел мне сказать. И тебе не советую.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37626815
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносУ меня программа _ничего_не_делает_, только показывает строку, столбец и не понравившиеся данные. И пользователь _сам_
исправляет. Я не додумываю за пользователя что он хотел мне сказать. И тебе не советую.Игорь, отличный подход!
...
Рейтинг: 0 / 0
Как получать данные из ячейки во время их ввода в неё?
    #37627508
TёMochkiN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос, я не исправляю ошибки пользователя, а ограничиваю его от ввода неверных данных. Только благодаря строгой типизации данных, мы получаем правильный документ. Мы программисты должны предоставить пользователю то, что мы хотим потом получить от него. Если организация большая, вы не сможете до каждого донести, какие значения будут уместны в каком-либо столбце, а в каком нет. Тем более, когда тебе должностное лицо повыше ставит такую задачу, ты не можешь сказать "нет".
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как получать данные из ячейки во время их ввода в неё?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]