Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2010, 09:51   #1
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию RefEdit. Ограничение на ввод данных

Здравствуйте
Подскажите, если кто знает. Как в RefEdit'е сделать ограничение вводимых данных. Нужно что б можно было вводить только отдельные ячейки (мышкой щелкать по листу с нажтым CTRL), но не диапазоны!
maksim_serg вне форума Ответить с цитированием
Старый 31.03.2010, 10:02   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

В общем-то непосредственно при выборе запретить нельзя. Можно проверять уже после выбора значений:

Код:
If RefEdit1.Value <> "" then
if RefEdit1.Value Like "*:*" msgbox "Нельзя указывать диапазоны! Только отдельные ячейки.":Exit Sub
End If
Хотя интересно знать зачем такое. Ведь пользователь может выделить последовательно диапазон А1:А10 по одной ячейке. А ведь проще было весь диапазон сразу, а разницы в обработке никакой. Какая цель такого ограничения?
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 31.03.2010, 10:25   #3
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Хотелось бы доработать код таким образом:
Цитата:
Private Sub RefEdit1_Change()
Dim k As String
If RefEdit1.Value <> "" Then k = RefEdit1.Value
If RefEdit1.Value Like "*:*" Then RefEdit1.Value = k
End Sub
То есть после каждого выбора запоминаем текущее значение, и вслучае выбора диапозона, возвращаем последнее "правильное" значение (список ячеек, без диапозонов).
Хотелось бы, но ничего неполучается, что и неудивительно...
maksim_serg вне форума Ответить с цитированием
Старый 31.03.2010, 10:29   #4
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

А ошибка вот в чем: как получить значение RefEdit1 до добавления в нее очередной ячейки?
maksim_serg вне форума Ответить с цитированием
Старый 31.03.2010, 11:08   #5
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Хотя интересно знать зачем такое. Ведь пользователь может выделить последовательно диапазон А1:А10 по одной ячейке. А ведь проще было весь диапазон сразу, а разницы в обработке никакой. Какая цель такого ограничения?
Может быть для Вас и никакой.
Скажем, полчил я RefEdit1.Value = "Лист1!$O$9;Лист1!$A$10;Лист1!$U$11 ". Дальше создаю массив t = Split(FormMat.RefEdit1.Value, ";") и получаю значения соседних ячеек с последующей записью их в определенном порядке в другом файле:
With ThisWorkbook.Sheets(1)
For n = LBound(t) To UBound(t)
am = Mid(t(n), InStr(1, t(n), "$", 1))
.Cells(i, 22 + n * 6).Value = Sheets(1).Range(am).Offset(0, 0).Value
.Cells(i, 23 + n * 6).Value = Sheets(1).Range(am).Offset(0, -1).Value
.Cells(i, 24 + n * 6).Value = Sheets(1).Range(am).Offset(0, 1).Value
.Cells(i, 25 + n * 6).Value = Sheets(1).Range(am).Offset(0, 2).Value
.Cells(i, 26 + n * 6).Value = Sheets(1).Range(am).Offset(0, 3).Value
.Cells(i, 27 + n * 6).Value = Sheets(1).Range(am).Offset(0, 7).Value
Next n
End With

И поскольку у меня ни кокогда не было информатики и я в этом ни чего не понимаю, то по другому не знаю как...

Последний раз редактировалось maksim_serg; 31.03.2010 в 11:14.
maksim_serg вне форума Ответить с цитированием
Старый 31.03.2010, 11:11   #6
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

а если выделяю диапазон, то данные беруться только относительно первой ячейки...
maksim_serg вне форума Ответить с цитированием
Старый 31.03.2010, 11:20   #7
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Я уже писал, что при изменении нельзя сделать. Да и незачем. Сделайте так:

Код:
    Dim rRange As Range, rArea As Range, sAddrr As String
    sAddrr = Replace(Replace(RefEdit1.Value, ActiveSheet.Name & "!", ""), ";", ",")
    sAddrr = Range(sAddrr).Address
    Set rRange = Range(sAddrr)
    If rRange Is Nothing Then MsgBox "Неверно указан диапазон", vbCritical, "Ошибка": Exit Sub
    sAddrr = ""
    For Each rArea In rRange.Areas
        If rArea.Count = 1 Then sAddrr = sAddrr & IIf(sAddrr = "", "", ",") & rArea.Address
    Next rArea
    RefEdit1.Value = Replace(sAddrr, ",", ";")
Тогда конечный результат в RefEdit1 будет содержать диапазоны только с одной ячейкой.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 31.03.2010, 11:27   #8
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

"Хотя до сих пор не понимаю зачем это надо, а Вы не хотите говорить"

И поскольку у меня ни кокогда не было информатики и я в этом ни чего не понимаю, то по другому не знаю как... Я не знаю как обработать диапазон для получения значений каждой ячейки. Да и впринципе, поскольку это только для меня, лишние две страницы кода - мне не помеха
maksim_serg вне форума Ответить с цитированием
Старый 31.03.2010, 11:55   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Перебрать ячейки в диапазоне очень просто:
Код:
Sub test()
    Dim cell As Range, ra As Range
    Set ra = Range(RefEdit1.Value)
    For Each cell In ra.Cells
        MsgBox cell.Value
    Next cell
End Sub
или, что то же самое:
Код:
Sub test2()
    Dim cell As Range, ra As Range
    Set ra = Application.Evaluate(RefEdit1.Value)
    For i = 1 To ra.Cells.Count
        MsgBox ra.Cells(i).Value, vbInformation, i & "-я ячейка"
    Next i
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 31.03.2010, 12:07   #10
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

что то похожее их далека на второй код составить не трудно, просто мне казалась что это можно сделать нетолько через цикл. Ну да ладно. пойду дальше редактировать свой код методои проб и ошибок.
maksim_serg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ограничение на ввод данных в подчиненной форме. mnz2002 Microsoft Office Access 2 08.02.2010 19:17
Ограничение на ввод символов в "поле ввода" zvezda_t JavaScript, Ajax 0 07.02.2010 19:57
Ввод данных SAWER Win Api 0 25.11.2009 13:20
Ограничение ввода данных в поле pgerasimov JavaScript, Ajax 1 11.08.2009 19:01
Ограничение на ввод символов ANTI1 Общие вопросы Delphi 4 17.12.2008 16:30