Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как получать данные из ячейки во время их ввода в неё? / 25 сообщений из 26, страница 1 из 2
22.01.2012, 17:44
    #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
22.01.2012, 19:18
    #37626018
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получать данные из ячейки во время их ввода в неё?
TёMochkiN,

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

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

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

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

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

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

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

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

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

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

Пока можно только так, но правила проверки можно обойти копированием в проверяемую ячейку из другой ячейки
...
Рейтинг: 0 / 0
23.01.2012, 00:49
    #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
23.01.2012, 11:36
    #37626526
MX-9
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получать данные из ячейки во время их ввода в неё?
TёMochkiN,

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

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

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

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

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

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

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


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