Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 60

Организация очередности вводимых данных

06.11.2011, 22:26. Показов 1484. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Необходима помощь по Microsoft Visual Basic.
Имеется таблица данных (database) в Microsoft Office Excel. Необходимо сделать так, чтобы ввести тип данной можно было в том случае, если не введён подтип этой данной. Например, имеется Месяц и Дата. Надо сделать так, чтобы вводит Месяц можно было тогда, когда поле Дата не заполнено. То есть заполнить сначала Месяц, а потом Дата, а не наоборот. И чтобы если Дата уже введена, а Вы заполняете Месяц, надо выдавать ошибку и не разрешать ввод Месяца.
Надеюсь объяснил понятно. Сейчас имею следующее: если заполнена дата и заполнен месяц, то выдает ошибку и предлагает удалить месяц. Естественно, если заполнить вначале месяц, а потом Дата, но будет тоже ошибка.
С VB не знаком, поэтому спрашиваю, если такая функция/процедура/???, которая позволит мне правильно выполнить задание.
Спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.11.2011, 22:26
Ответы с готовыми решениями:

Не видно данных, вводимых в таблицу в режиме ввода данных
Добрый день! Ввожу данные в ячейку таблицы в режиме ввода данных. Проблема в том, что когда их ввожу, то данные не видны. Они...

Сравнение Данных файла и вводимых данных
package register; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; ...

Проверка вводимых данных
#include <iostream> using namespace std; int main() { double a, b, c; cout << "Enter the first side of the...

13
 Аватар для Kogb
367 / 128 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
10.11.2011, 02:42
Используй событие Validate, для текстового поля, или напиши собственную процедуру проверки введенных данных.
Visual Basic
1
2
3
4
5
6
Private Sub Text1_Validate(Cancel As Boolean)
    If Not (IsDate(Text1.Text)) Then
         MsgBox "Введите в текстовое поле корректную дату"
         Cancel = True
     End If
End Sub
0
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 60
10.11.2011, 21:46  [ТС]
Спасибо, сейчас попробую использовать Validate, но мне не надо проверять данные на корректность, мне надо не разрешить ввод одной данной, если уже заполнена другая данная(подтип первой данной).

P.S: Данные в таблице Excel, где одна колонка месяц, а другая -- дата.
0
 Аватар для Kogb
367 / 128 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
10.11.2011, 22:09
Проверяй на заполненность, в чем загвоздка?
Visual Basic
1
If Text1.Text = vbNullString Then
Если надо с ячейками Экселя манипулировать, может тогда лучше VBA использовать?
0
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 60
10.11.2011, 23:05  [ТС]
не, мне надо на Microsoft Visual Basic

Добавлено через 1 минуту
Visual Basic
1
2
3
4
5
6
Private Sub Text1_Validate(Cancel As Boolean)
    If Text1.Text = vbNullString Then
         MsgBox "Введите в текстовое поле корректную дату"
         Cancel = True
     End If
End Sub
не работает
0
 Аватар для Kogb
367 / 128 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
11.11.2011, 02:09
Нерабочий код не пощу.
0
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 60
13.11.2011, 18:38  [ТС]
Снова всем здравствуйте!
Теперь пробую так:
Создал рядом с подтипом ещё одну колонку. В ней прописал в Data Validation:
=IF(G3<>"";TRUE;FALSE) - чтобы типа когда подтип был не заполнен, эта клетка получала значение ТРУ и разрешало ввод в этой строчке, где работает Validation. Но у меня это не получается. В чём проблема?
Наверно что-то неправильно делаю.
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
13.11.2011, 22:20
В чём проблема?
Необходима помощь по Microsoft Visual Basic.
Имеется таблица данных (database) в Microsoft Office Excel.
Проблема в корректности вопроса.
VB или VBA всё таки?
Типы данных:
Тип данных определяет способ хранения и представления данных в системе VB. Переменная может иметь следующие типы:
– Byte – короткое неотрицательное целое число. Значение переменной занимает 1Б памяти;
– Integer – целое число. Значение переменной занимает 2Б памяти;
– Long - длинное целое число. Значение переменной занимает 4Б памяти;
– Boolean – логический тип переменной. Значение переменной занимает 2Б памяти (TRUE или FALSE);
– Single – десятичное число обычной точности. Значение переменной занимает 4Б памяти;
– Double – десятичное число двойной точности. Значение переменной занимает 8Б памяти;
– String – строка переменной и постоянной длины. Занимаемая память зависит от количества символов, представляющих строковую переменную;
О каких подтипах речь?
Создал рядом с подтипом ещё одну колонку
??
По ходу это всё-таки VBA. Но даже там нет подтипов...
Если делаешь в VBA - проверяй содержание ячеек в событии изменения листа
0
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 60
13.11.2011, 23:39  [ТС]
мне нужно то что в Excel -> Alt+F11 - вот это мне надо. VB это или VBA, я не понимать.
Подтип - имеется ввиду в таблице подтип типа. тоже самое что "Дата", "Количество", "Услуга", "Дебет", "Кредет", только как зависимость между ними.
Пример:
Тип Подтип
Месяц Январь
Дата 21
Еда Сало
Процессор Intel
OS Windows
И надо натворить так, если я ввёл уже "сало", я вводить уже в "Тип" еда, процессор или одежда уже вводить не могу.
По этому, что я описал выше, надо написать макрос в Alt+F11, а вот как, я затрудняюсь это сделать.

Цитата Сообщение от Alex77755 Посмотреть сообщение
Если делаешь в VBA - проверяй содержание ячеек в событии изменения листа
Как это сделать? Нужен макрос.

P.S: Спасибо
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
14.11.2011, 09:02
С третий столбец можно ввести данные только при заполненном втором.
При удалении значения во втором стобце третий очищается.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
    If Cells(Target.Row, Target.Column - 1).Value = "" Then
    Target.Value = ""
    End If
End If
If Target.Column = 2 Then
    If Target.Value = "" Then
    Cells(Target.Row, Target.Column + 1).Value = ""
    Target.Value = ""
    End If
End If
End Sub
Что бы проверять что сало это не мебель надо создавать списки соответствия и белать проверки
0
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 60
14.11.2011, 22:40  [ТС]
Большое спасибо. Только оказалось, что мне нужна не процедура, а функция. Так что буду переделывать.
0
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 60
19.11.2011, 21:33  [ТС]
Снова всем здравствуйте!
Я исправил свою работу, но всё равно она плохо работает. Можете пожалуйста посмотреть и сказать, в чём ошибки? Буду очень благодарен!
Задание: Создать функцию, которая:

1. Разрешить ввод значений, которые только принадлежат "Type". В моём случае, это "Income", "Meal", "Transport" и "Education".
2. Разрешить ввод тип "Income", только если заполнен столбик "Income".
3. Разрешить тип Расходов(Meal, transport,education), только если заполнен столбик Expense(расходы).
4. Разрешить ввод "Type", только если не задано "Subtype".
5. Вывести сообщение о несоответствии дат.

В столбик "М" записал функцию. Клетке F3 придал Data -> Data Validation = M3

Функция зацикливается на 2 или на 3 валидации, но вроде всё написал правильно.
Функция не работает верно, в чем может быть проблема? может в структуре самой? или...?

P.S: это сделал из предыдущей работы, в которые были аналогичные процедуры. Может поэтому?
Спасибо!
Вложения
Тип файла: xls EXCEL_fix2.xls (75.5 Кб, 11 просмотров)
0
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 60
20.11.2011, 15:05  [ТС]
Ладно, попробуем по другому: почему у меня неправильно работает данный код? Всё время он зацикливается, почему не происходит изменение значения "х" в InputBox'e?
Visual Basic
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
40
41
42
43
44
45
46
47
48
49
Public Function Macro1(x)
 
Macro1 = False
Range("f3").Select
r = ActiveCell.Row
c = ActiveCell.Column
 
Do Until Macro1 = True
' 1. validation
If x <> "Income" And x <> "Meal" And x <> "Transport" And x <> "Education" Then
        Do Until x = "Income" Or x = "Meal" Or x = "Transport" Or x = "Education"
            x = InputBox(" Income or Meal or Transport or Education?")
        Loop
      Else
       
' 2. validation
If x <> "Income" And Cells(r, c - 2) <> "" Then
    MsgBox "If Income is filled then Type must be Income", vbExclamation
    Do Until x = "Income"
    x = InputBox(" Type must be Income", "Entry Form", "Income")
    Loop
Else
 
' 3. validation
If x <> "Meal" And x <> "Transport" And x <> "Education" And Cells(r, c - 3) <> "" Then
    Do Until x = "Meal" Or x = "Transport" Or x = "Education"
    x = InputBox(" If Expense is filled then Type must be Meal or Transport or Education!")
    Loop
Else
 
' 4. validation
If Cells(r, c + 1) <> "" Then
MsgBox "Subtype is already filled, you can't chose type", vbExclamation
Do Until Cells(r, c + 1) = ""
 Msg = "To enter Type, you must delete Subtype. Do you wat to delete Subtype?"
    If MsgBox(Msg, vbQuestion + vbYesNo, "Warning!") = vbYes Then
        Cells(r, c + 1).Select
        Selection.ClearContents
        Range("a1").Select
    Else
        MsgBox "You cant choose Type right now!"
    End If
    Loop
    Else
           Macro1 = True
End If
End If
End If 
End If
0
1 / 1 / 0
Регистрация: 03.10.2011
Сообщений: 60
21.11.2011, 18:32  [ТС]
Я вот подумал, может функции вообще не нужны эти циклы и Inputbox? Пусть будет просто:
Visual Basic
1
2
3
4
5
6
Public Function Macro1(x)
Macro1=TRue
If (условие) then
 Msg "Error!"
 Macro1=False
End If
Останется просто ждать пока не будут выполняться условия и значение Макро1 не будет меняться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2011, 18:32
Помогаю со студенческими работами здесь

Проверка вводимых данных
Доброго времени суток, уважаемые форумчане. Прошу помощи, разобраться со следующим моментом. Имеется часть кода: repeat clrscr; ...

Фильтрация вводимых данных
как запретить всё для ввода кроме String , которая содержит буквы и пробелы (для ввода фразы)

Проверка вводимых данных
Добрый день, уважаемые форумчане. Помогите, пожалуйста, со следующим вопросом. Есть ячейки E-L в которые вбивается время. Необходимо...

Проверка вводимых данных
Доброго времени суток, форумчане. Я столкнулся с такой проблемой: при введении еденицы измерения, если та инициализирована ранее то все...

Проверка вводимых данных
Вот часть программы int main(void) { int vop; setlocale(LC_ALL, &quot;Russian&quot;); int mas1, mas2, mas3, outmas; int ke1, ke2,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru