0 / 0 / 0
Регистрация: 28.08.2013
Сообщений: 8
1

Добавление данных через UserForm

28.11.2013, 18:05. Показов 9019. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья,
Есть UserForm , в которую сотрудники вносят свои командировки. Но у меня получалось в коде, только вставлять всегда в одни и те же ячейки, а мне надо что бы:
Сотрудник внес данные и они добавились на второй лист.
Уехал-приехал внес данные и они добавились на строчку ниже, а не вместо раннее введенных данных.
Вот как сейчас выглядит во вложении
Вложения
Тип файла: rar Книга1.rar (20.2 Кб, 119 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2013, 18:05
Ответы с готовыми решениями:

Добавление пользователей (UserForm)
Доброе товарищи. Помогите реализовать. Есть UserForm идея в том что бы из выпадающего списка...

Добавление столбцов с использованием UserForm
подскажите пожалуйста как с помощью макроса и userform добавить определенное количество столбцов...

Заполнение таблицы через userform
Скиньте пожалуйста у кого есть простенький пример как в userform заполнив поля и нажав кнопку...

Работа с массивами через UserForm
Здравствуйте, мне нужен пример. Главное что бы макрос работал с массивом(и) и имел форму. Если есть...

14
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,086
28.11.2013, 18:14 2
Попробуйте так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CommandButton1_Click()
    Dim kz&
    kz = Sheets("Êîìàíäèðîâêà").UsedRange.Rows.Count + 1
    Range("Êîìàíäèðîâêà!A" & kz).Value = TextBox1.Value
    Range("Êîìàíäèðîâêà!B" & kz).Value = TextBox2.Value
    Range("Êîìàíäèðîâêà!C" & kz).Value = TextBox3.Value
    Range("Êîìàíäèðîâêà!D" & kz).Value = TextBox4.Value
    Range("Êîìàíäèðîâêà!E" & kz).Value = TextBox5.Value
    Range("Êîìàíäèðîâêà!F" & kz).Value = TextBox6.Value
    Range("Êîìàíäèðîâêà!G" & kz).Value = TextBox7.Value
    Range("Êîìàíäèðîâêà!H" & kz).Value = TextBox8.Value
    Range("Êîìàíäèðîâêà!I" & kz).Value = TextBox9.Value
    Range("Êîìàíäèðîâêà!J" & kz).Value = TextBox10.Value
    Me.Hide
End Sub
1
0 / 0 / 0
Регистрация: 28.08.2013
Сообщений: 8
28.11.2013, 18:20  [ТС] 3
Спасибо огромное, все работает. А может еще подскажите:
Я когда начинаю новые данные вносить, в UserForm остаются данные от предыдущего ввода, как прописать, что бы они очищались
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,086
28.11.2013, 18:27 4
После внесения данных на лист добавить код:
Visual Basic
1
TextBoxN.Value=""
Кол-во строк равно количеству TextBox только N заменить на соответсвующие номера
1
Эксперт NIX
3195 / 850 / 194
Регистрация: 14.01.2013
Сообщений: 4,068
29.11.2013, 18:06 5
Если полей на форме много, то можно так:

Visual Basic
1
2
3
  For Each Ctrl In UserForm3.Controls
    If TypeOf Ctrl Is TextBox Then Ctrl.Value = ""
  Next
1
0 / 0 / 0
Регистрация: 28.08.2013
Сообщений: 8
02.12.2013, 18:30  [ТС] 6
toiai, Помогите пожалуйста еще один раз.
Данные которые попадают в ячеки на другом листе, я хочу защитить от редактирования, соответственно нужен код, согласно которому, при вводе через форму, будет автоматически вводиться код, а потом опять ставиться защита листа от редактирования.
Заранее спасибо
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,086
02.12.2013, 18:45 7
Попробуй так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub CommandButton1_Click()
    Dim kz&
    Sheets("Командировка").Unprotect "123" 'параметр это пароль снятия защиты листа
    kz = Sheets("Командировка").UsedRange.Rows.Count + 1
    Range("Командировка!A" & kz).Value = TextBox1.Value
    Range("Командировка!B" & kz).Value = TextBox2.Value
    Range("Командировка!C" & kz).Value = TextBox3.Value
    Range("Командировка!D" & kz).Value = TextBox4.Value
    Range("Командировка!E" & kz).Value = TextBox5.Value
    Range("Командировка!F" & kz).Value = TextBox6.Value
    Range("Командировка!G" & kz).Value = TextBox7.Value
    Range("Командировка!H" & kz).Value = TextBox8.Value
    Range("Командировка!I" & kz).Value = TextBox9.Value
    Range("Командировка!J" & kz).Value = TextBox10.Value
    Sheets("Командировка").Protect "123" 'параметр это пароль защиты листа
    Me.Hide
End Sub
Только перед запуском установи защиту листа с вышеуказанным паролем (или используй свой, заменив в коде тоже)
1
Эксперт NIX
3195 / 850 / 194
Регистрация: 14.01.2013
Сообщений: 4,068
02.12.2013, 20:01 8
Можете вообще скрыть лист с данными.

И вопрос в тему, у Вас сотрудники пользуются одним файлом? Или кто-то один вбивает данные всех сотрудников? Почему спрашиваю, можно организовать одновременную работу нескольких пользователей и при этом не задумываться о защите данных.
0
0 / 0 / 0
Регистрация: 28.08.2013
Сообщений: 8
03.12.2013, 18:04  [ТС] 9
Цитата Сообщение от Kubuntovod Посмотреть сообщение
Можете вообще скрыть лист с данными.

И вопрос в тему, у Вас сотрудники пользуются одним файлом? Или кто-то один вбивает данные всех сотрудников? Почему спрашиваю, можно организовать одновременную работу нескольких пользователей и при этом не задумываться о защите данных.
Как раз пользуются несколько сотрудников, поэтому и нужна защита, так как они могут что нибудь натворить с файлом.
Поэтому нужна защита.

Добавлено через 40 секунд
Спасибо Вам огромное за помощь, все работает.

Добавлено через 8 часов 51 минуту
Цитата Сообщение от toiai Посмотреть сообщение
Попробуй так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub CommandButton1_Click()
    Dim kz&
    Sheets("Командировка").Unprotect "123" 'параметр это пароль снятия защиты листа
    kz = Sheets("Командировка").UsedRange.Rows.Count + 1
    Range("Командировка!A" & kz).Value = TextBox1.Value
    Range("Командировка!B" & kz).Value = TextBox2.Value
    Range("Командировка!C" & kz).Value = TextBox3.Value
    Range("Командировка!D" & kz).Value = TextBox4.Value
    Range("Командировка!E" & kz).Value = TextBox5.Value
    Range("Командировка!F" & kz).Value = TextBox6.Value
    Range("Командировка!G" & kz).Value = TextBox7.Value
    Range("Командировка!H" & kz).Value = TextBox8.Value
    Range("Командировка!I" & kz).Value = TextBox9.Value
    Range("Командировка!J" & kz).Value = TextBox10.Value
    Sheets("Командировка").Protect "123" 'параметр это пароль защиты листа
    Me.Hide
End Sub
Только перед запуском установи защиту листа с вышеуказанным паролем (или используй свой, заменив в коде тоже)
Я Вам наверно надоел, НО вопрос вот в чем:
1 сотрудник заполнял свои командировки в поля (A,B,C) и заполнил до строки допусти 15,
2 сотрудник начал заполнять свои командировки в поля (D,E,F,) и первое заполнение началось не с первой пустой строки DEF полей, а с первой пустой строки ABC(то есть с 16-ой строки) в поля D,E,F.
Как сделать что бы он считал пустые строки только в своем диапазоне?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
03.12.2013, 18:16 10
Хм, а почему Эксель? Это ведь задача для Access, тем более если нужна безпроблемная одновременная работа нескольких пользователей.
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,086
03.12.2013, 18:29 11
Предложу вариант такой:
1. Перед выводом формы устанавливать курсор:
- при добавлении в пустую строку
- при корректировке в необходимую строку.
2. При инициализации формы считывать в TextBoxs значения ячеек текущей строки.
3. При записи № записи определять так:
Visual Basic
1
kz=ActiveCells.Row
4. И выход из формы.
0
0 / 0 / 0
Регистрация: 28.08.2013
Сообщений: 8
03.12.2013, 18:39  [ТС] 12
Цитата Сообщение от Hugo121 Посмотреть сообщение
Хм, а почему Эксель? Это ведь задача для Access, тем более если нужна безпроблемная одновременная работа нескольких пользователей.
Они заходят по очереди. и потому что как ресурс есть только Excel
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
03.12.2013, 20:53 13
Если по очереди - то это можно считать не многопользовательский режим.
Тогда можно и на Экселе сделать надёжно.
0
Эксперт NIX
3195 / 850 / 194
Регистрация: 14.01.2013
Сообщений: 4,068
04.12.2013, 09:03 14
Цитата Сообщение от AleksG Посмотреть сообщение
1 сотрудник заполнял свои командировки в поля (A,B,C) и заполнил до строки допусти 15,
2 сотрудник начал заполнять свои командировки в поля (D,E,F,) и первое заполнение началось не с первой пустой строки DEF полей, а с первой пустой строки ABC(то есть с 16-ой строки) в поля D,E,F.
Как сделать что бы он считал пустые строки только в своем диапазоне?
Вариантов несколько.
1. Обязать сотрудников (или внести изменения в макрос, чтобы в пустые поля тоже что-то умолчальное садилось. Можно, к примеру, в первый столбец ставить * или красить текст каким-нибудь цветом) заполнять все поля.
2. Перед внесением новых данных выяснять, какая строка последняя, как-нибудь так: lLastRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count
3. Сохранять номер последней заполняемой строки где-то на листе.

Ну и т.д.
0
0 / 0 / 0
Регистрация: 28.08.2013
Сообщений: 8
04.12.2013, 12:44  [ТС] 15
Цитата Сообщение от Hugo121 Посмотреть сообщение
Хм, а почему Эксель? Это ведь задача для Access, тем более если нужна безпроблемная одновременная работа нескольких пользователей.
Работают все по очереди.
0
04.12.2013, 12:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2013, 12:44
Помогаю со студенческими работами здесь

Добавление уникальных данных в словарь через запятую
Добрый день! Прошу помощи в исправлении кода - у меня чего-то не получается. Суть макроса: если в...

Редактирование ячеек в Excel через UserForm
Всем доброго времени суток. Помогите в решении такой проблемы. Планирую сделать отчет в Excel,...

Как добавить строку в таблице через userform?
помогите с примером не могу добавить данные с таблицу с новой строки... может кто тыкнет носом на...

Ввод дат только текущего года через userform
Здравствуйте, подскажите, как можно заблокировать или выводить сообщение, если на лист вводят дату...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru