Vba excel массив textbox

AndreA SN

1014 / 118 / 2

Регистрация: 26.08.2011

Сообщений: 1,113

Записей в блоге: 2

1

Как грамотно создать массив из текстбоксов

22.08.2012, 02:09. Показов 3162. Ответов 5

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Создаю массив текстбоксов типа

Visual Basic
1
2
3
4
5
6
  Dim tbDetal() As MSForms.TextBox     
 ReDim tbDetal(4)
        tbDetal(0) = tb8
        tbDetal(1) = tb9
        tbDetal(2) = tb10
        tbDetal(3) = tb11

как сделать это правильно?

Добавлено через 27 минут
Сделал… нужно добавить к каждому элементу Set

Visual Basic
1
2
3
4
5
6
Dim tbDetal() As MSForms.TextBox     
 ReDim tbDetal(4)
        set tbDetal(0) = tb8
        set tbDetal(1) = tb9
        set tbDetal(2) = tb10
        set tbDetal(3) = tb11

наверное всё таки пора спать…



1



all_angarsk

761 / 268 / 57

Регистрация: 13.12.2009

Сообщений: 1,067

27.08.2012, 18:56

2

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
Private Sub CommandButton1_Click()
Dim s As TextBox
Dim lbl(10) As Control
   For i = 0 To 10
    Set lbl(i) = Me.Controls.Add("Forms.Label.1")
   With lbl(i)
      .Top = 10 + 20 * i
      .Left = 5
      .Height = 20
      .Width = 40
      .Caption = i & " число"
      .ForeColor = RGB(225, 0, 0)
      .BackColor = RGB(255, 255, 225)
   End With
   Set oTextBox = Me.Controls.Add("Forms.TextBox.1")
With oTextBox
      .Top = 10 + 20 * i
      .Left = 45
      .Height = 20
      .Width = 40
      .Text = i & 1 & i
End With
Next
End Sub

такой код может подайдет?



1



Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

27.08.2012, 21:39

3

А вот законченный проект, в котором на форме создается любое разумное к-во текстбоксов:

Миниатюры

Как грамотно создать массив из текстбоксов
 



2



761 / 268 / 57

Регистрация: 13.12.2009

Сообщений: 1,067

28.08.2012, 18:19

4

Только автор не проверил????
обычно TextBox на форме больше используют.



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

28.08.2012, 18:22

5

Цитата
Сообщение от all_angarsk
Посмотреть сообщение

Только автор не проверил????

— это Вы мне? Я же картинку приложил…



1



761 / 268 / 57

Регистрация: 13.12.2009

Сообщений: 1,067

28.08.2012, 18:29

6

Да, должно быть реальнее
Хотя, применение регулярных выражений мне нравится…. и написано очень грамматно



0



Значения TextBox(UserForm) в массив и проверить совпадения

EvgenyD

Дата: Среда, 01.10.2014, 00:28 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 74


Репутация:

19

±

Замечаний:
0% ±


Excel 2013

Здравствуйте, уважаемые форумчане!
Помогите, пожалуйста, решить 2 задачи:
1. Поместить в массив значения из TextBox (находятся на UserForm)
2. Проверить уникальность каждого значения массива относительно остальных

Первое пытался сделать, но выводятся только имена Текстбоксов, второе для меня пока загадка. Всего второй месяц изучаю VBA в Excel, заклинило что-то %)

 

Ответить

wild_pig

Дата: Среда, 01.10.2014, 08:52 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 516


Репутация:

97

±

Замечаний:
0% ±


2003, 2013

Проверить уникальность каждого значения массива относительно остальных

2 текстбокса, что тут проверять? А может это упрощённый пример и текстбоксов гораздо больше?

 

Ответить

EvgenyD

Дата: Среда, 01.10.2014, 14:23 |
Сообщение № 3

Группа: Пользователи

Ранг: Участник

Сообщений: 74


Репутация:

19

±

Замечаний:
0% ±


Excel 2013

Понятное дело упрощенный yes . Иначе вопрос не имеет смысла. Я обычно так «изобретаю велосипед» чтобы не в итоговом файле, сделаю, проверю, а потом уже в общий файл прилепляю. Там форма с переменным количеством текстбоксов, тестбоксы создаются при выполнении макроса.
Может по этому никто не отвечает, т.к. не поняли что это упрощенный вариант (тогда страшно представить что обо мне подумали).

 

Ответить

wild_pig

Дата: Среда, 01.10.2014, 15:05 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 516


Репутация:

97

±

Замечаний:
0% ±


2003, 2013

 

Ответить

EvgenyD

Дата: Среда, 01.10.2014, 16:57 |
Сообщение № 5

Группа: Пользователи

Ранг: Участник

Сообщений: 74


Репутация:

19

±

Замечаний:
0% ±


Excel 2013

wild_pig, спасибо за ссылку, я ее читал, пробовал но не получалось, а сегодня вдруг заработало. Получилось для занесения в массив значений TextBox использую
[vba]

Код

     For i = 1 To 3
     MyArray(i) = Controls(«TextBox» & i).Value
     Next i

[/vba]

Кстати, почему-то при указании UserForm1.Controls… работает не корректно, а так Controls(«TextBox» & i).Value работает.

Для выявления повторений в массиве сделал так:
[vba]

Код

  

     Z = 0
     For y = 1 To 3
     Fd = MyArray(y)
     Arr = MyArray()
     x = WorksheetFunction.Match(Fd, Arr, 0)
     If x <> y Then
     Z = Z + 1
     End If
     Next y
     MsgBox Z

[/vba]
Если Z выдает >0 то есть повторы. Для моих потребностей этого достаточно.
Имеет право на жизнь такая конструкция или как-то по другому можно, не подскажите?

 

Ответить

wild_pig

Дата: Среда, 01.10.2014, 18:04 |
Сообщение № 6

Группа: Проверенные

Ранг: Обитатель

Сообщений: 516


Репутация:

97

±

Замечаний:
0% ±


2003, 2013

Судя по коду в примере хотелось проверить заполненность полей?
[vba]

Код

Private Sub CommandButton1_Click()
     Dim tBox As Control
     For Each tBox In UserForm1.Controls
         If TypeOf tBox Is MSForms.TextBox Then
             If tBox.Value = «» Then
                 MsgBox «Не тупи, заполни поле «»» & tBox.Name & «»»»
                 tBox.SetFocus
                 Exit For
             End If
         End If
     Next
End Sub

[/vba]

 

Ответить

EvgenyD

Дата: Среда, 01.10.2014, 18:46 |
Сообщение № 7

Группа: Пользователи

Ранг: Участник

Сообщений: 74


Репутация:

19

±

Замечаний:
0% ±


Excel 2013

Да, у меня поприметивнее написано, но работает ), вот SetFocus искал, т.к. при незаполненом перескакивал на следующее, а хотелось, чтобы курсор вставал в незаполненый Textbox. Сейчас как раз доделал файл для которого выяснял ответ в данной теме. Будет понятно что я хотел сделать. Код там написан топорно, пока только так могу, буду со временем (и с опытом) «вылизывать». Первой доработкой будет замена моего кода проверки на пустоту на Ваш. Т.к. у меня для каждого TextBox своя процедура, хоть и написана циклом. Но вроде все работает как хотел.

Там не обработано событие отмены и проверка значений Inputbox (можно например букву ввести), т.к. это будет доделано в составе другого файла. (эта форма тоже часть моего учебного файла).

К сообщению приложен файл:

8330871.xlsm
(45.3 Kb)

 

Ответить

VictorM

Дата: Среда, 12.08.2015, 20:22 |
Сообщение № 8

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 161


Репутация:

27

±

Замечаний:
0% ±


Цитата

Судя по коду в примере хотелось проверить заполненность полей?

Здравствуйте, Уважаемые!
Применил этот код из Сообщения № 6 — все отлично!
Но вот такой вопрос у меня.
Как можно игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?

 

Ответить

nilem

Дата: Среда, 12.08.2015, 20:32 |
Сообщение № 9

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

VictorM, привет
можно, например, установить св-во Tag = «eee» (в окне свойств) для полей, обязательных для заполнения. И тогда так
[vba]

Код

Private Sub CommandButton1_Click()
Dim tBox As Control
For Each tBox In Me.Controls
     If TypeOf tBox Is MSForms.TextBox Then
         If tBox.Tag = «eee» Then
             If tBox.Value = «» Then
                 MsgBox «Не тупи, заполни поле «»» & tBox.Name & «»»»
                 tBox.SetFocus
                 Exit For
             End If
         End If
     End If
Next
End Sub

[/vba]


Яндекс.Деньги 4100159601573

 

Ответить

Serge_007

Дата: Среда, 12.08.2015, 20:40 |
Сообщение № 10

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

игнорировать проверку заполненности некоторых полей, т.к. они необязательны к заполнению?

Привет, Виктор:
Более простой вариант (обязательны к заполнению только TextBox1 и TextBox2):
[vba]

Код

Private Sub CommandButton1_Click()
     If Me.TextBox1 = «» Or Me.TextBox2 = «» Then
         MsgBox «Не тупи, заполни обязательные поля!»
         TextBox1.SetFocus
         End If
End Sub

[/vba]


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

AndreTM

Дата: Среда, 12.08.2015, 20:46 |
Сообщение № 11

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Serge_007, вариант хоть и имеет право на существование :) но не удовлетворяет условиям задачи никак…
Первое, там динамически формируемые текстбоксы, так что и код твоей процедуры придется тоже динамически реформировать, но это ладно… Или — а зачем при незаполненном TextBox2 (и заполненном TextBox1) ставить фокус на TextBox1? :D

Она вообще осталась от макроса в посте №6

Ты от ответа не уходи — нету в том посте никаких TextBox1.SetFocus :)


Skype: andre.tm.007
Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTMСреда, 12.08.2015, 21:36

 

Ответить

VictorM

Дата: Среда, 12.08.2015, 20:53 |
Сообщение № 12

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 161


Репутация:

27

±

Замечаний:
0% ±


nilem, да, код интересный, буду пробовать, спасибо.
Serge_007, такой вариант у меня был задуман с самого начала, НО проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные.
Получается, что нужно прописывать проверку всех обязательных?
муторно это.

Сообщение отредактировал VictorMСреда, 12.08.2015, 20:56

 

Ответить

Serge_007

Дата: Среда, 12.08.2015, 20:53 |
Сообщение № 13

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

там динамически формируемые текстбоксы

Каюсь — не читал…

Главное — а нафига при незаполненном TextBox2 ставить фокус на TextBox1?

Андрей, в чем тут «Главное«?! Убери эту строку. Ну или поменяй по-другому. Она вообще осталась от макроса в посте №6

проверять нужно, допустим, 15-18 текстбоксов и только 2-3 из них необязательные

Тогда вариант Николая предпочтительнее, конечно :)


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

VictorM

Дата: Среда, 12.08.2015, 20:57 |
Сообщение № 14

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 161


Репутация:

27

±

Замечаний:
0% ±


Тогда вариант Николая предпочтительнее, конечно

Да, вот и я решил остановиться на этом варианте.
Спасибо всем за помощь!

 

Ответить

 

Mpel

Пользователь

Сообщений: 8
Регистрация: 03.11.2014

Добрый день. Ввожу в Форму TextBox вручную две колонки
1 Текст Текст
2 Пример2 Пример 3
3 Пример Пример Пример

Как записать это в двумерный массив? Мне нужно , чтобы в первой «колонке» массива было
1
2
3
во второй
Текст Текст
Пример2 Пример 3
Пример Пример Пример

Кто знает, прошу помочь.

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

#2

24.02.2016 12:11:49

Цитата
Mpel написал: Ввожу в Форму TextBox вручную две колонки

Как это происходит физически? Я про новую строку.  

 

Mpel

Пользователь

Сообщений: 8
Регистрация: 03.11.2014

Прикрепил пример

Прикрепленные файлы

  • Тест.xlsm (17.57 КБ)

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Пример — это очень хорошо, но Вы не ответили на мой вопрос: как Вы производите запись в следующую строку?

 

Mpel

Пользователь

Сообщений: 8
Регистрация: 03.11.2014

Я не понимаю вопроса(. Я вручную ввожу в поле TextBox ( в пример который я прислал) две колонки. Чтобы вбить вторую строчку я нажимаю Enter

 

Mpel, массив строк можно получить как Split(TextBox1.Text, vbCrLf) . Далее каждую строку тоже разделять по символу, который Вы выберете разделителем колонок, или по позиции.

 

Апострофф

Пользователь

Сообщений: 720
Регистрация: 06.04.2015

#7

24.02.2016 13:07:45

Например так —

Код
Private Sub UserForm_Click()
Dim a$()
a = Split(TextBox1, vbCrLf)
Dim aa$()
ReDim aa(1, UBound(a))
Dim i&
For i = 0 To UBound(a)
  aa(0, i) = VBA.Left$(a(i), InStr(1, a(i), " ") - 1)
  aa(1, i) = VBA.Mid$(a(i), InStr(1, a(i), " ") + 1)
Next
End Sub
 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

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

 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Апострофф, проверьте свой код )

 

Mpel

Пользователь

Сообщений: 8
Регистрация: 03.11.2014

Юрий М

, спасибо большое. То что нужно.

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#11

24.02.2016 14:49:39

Котяра, опять сам себя перехитрил?  :)

Код
arr2(x, 1) = Split(Arr(i),2)(0)
arr2(x, 2) = Split(Arr(i),2)(1)
 

Юрий М

Модератор

Сообщений: 60575
Регистрация: 14.09.2012

Контакты см. в профиле

Котяра, привет! Не срабатывает — я с этого и начал )
Другое дело, что можно было не правые символы показывать, а использовать Replace для «удаления» первого значения.

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#13

24.02.2016 15:15:58

И то верно

Код
arr2(x, 1) = Split(Arr(i),,2)(0)
arr2(x, 2) = Split(Arr(i),,2)(1)

I have 5 textbox and in each I have to write the values, and all the value I want to store in to and array.
this what i did

Dim arrayNames() As String = {CDec(txtName1.Text), CDec(txtName2.Text), CDec(txtName3.Text), CDec(txtName4.Text), CDec(txtName5.Text)}

asked Nov 21, 2016 at 18:28

Julian Andres F M's user avatar

2

Use the Array function with a known set of items, as Victor notes in the comments:

Dim myArray() As String
myArray = Array(TextBox1.Value, TextBox2.Value, TextBox3.Value)

If you need to add dynamically to the array, then you can use ReDim Preserve statement, which resizes the array and preserves existing values:

Dim myArray() As String
myArray = Array(TextBox1.Value, TextBox2.Value, TextBox3.Value)

'later, add another element to the array:
ReDim Preserve myArray(Ubound(myArray)+1)
myArray(UBound(myArray)) = TextBox4.Value

answered Nov 21, 2016 at 19:20

David Zemens's user avatar

David ZemensDavid Zemens

52.8k11 gold badges79 silver badges129 bronze badges

I am trying to get the value of a textbox and save it to a string array by clicking a button. I am getting a syntax error on the name(0) = TextBox1.Text line. I will be making it a dynamic array once I figure out how to do it (that’s why I have a num variable as well because the button can be clicked multiple times).

Am I doing something wrong here?

Private Sub CommandButton1_Click()
   Dim name(10) As String
   Dim num As Integer

   ' Debug.Print TextBox1.Text

   name(0) = TextBox1.Text
End Sub

Marcin Skórzewski's user avatar

asked Sep 18, 2014 at 8:12

zyrae's user avatar

‘Name’ is a built in name for excel.

Try:

Private Sub CommandButton1_Click()
   Dim testArray(1 to 11) As String
   Dim num As Integer

   ' Debug.Print TextBox1.Text

   testArray(1) = TextBox1.Text
End Sub

EDIT: Changed the name of the array.

answered Sep 18, 2014 at 8:17

Goos van den Bekerom's user avatar

3

Понравилась статья? Поделить с друзьями:
  • Vba excel количество файлов в папке
  • Vba excel массив as range
  • Vba excel количество строк диапазоне
  • Vba excel максимальный столбец
  • Vba excel количество строк диапазона