Vba excel textbox в ячейку

Элемент управления пользовательской формы TextBox в VBA Excel. Использование текстового поля для ввода и вывода информации, основные свойства, примеры. Привязка текстового поля к ячейке.

UserForm.TextBox – это элемент управления пользовательской формы, предназначенный для ввода, редактирования и вывода информации в текстовом формате.

Текстовое поле на пользовательской форме

Текстовое поле незаменимо, когда необходимо заполнить пользовательскую форму новой информацией. Например, это может быть ФИО нового сотрудника и его паспортные данные, сумма выручки за день, новый электронный адрес и многое-многое другое.

Если с помощью текстового поля требуется вводить заранее известную информацию, элементы которой можно сгруппировать в список, то в этом случае удобнее вместо элемента управления TextBox использовать ListBox или ComboBox.

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

Иногда, если на пользовательской форме используется только одно текстовое поле и кнопка «OK» (или кнопки «OK» и «Отмена»), для ввода информации такую форму можно заменить функцией InputBox, а для вывода информации, когда не требуется редактирование отображаемого текста, – функцией MsgBox.

Свойства текстового поля

Свойство Описание
AutoSize* Автоподбор размера текстового поля. True – размер автоматически подстраивается под длину размещаемой строки. False – размер элемента управления определяется свойствами Width и Height.
AutoTab Включение автоматической табуляции – передачи фокуса следующему элементу управления при достижении максимального числа символов при значениях свойства MaxLenght > 0. True – автоматическая табуляция включена, False – выключена.
ControlSource Ссылка на источник данных для поля TextBox.
ControlTipText Текст всплывающей подсказки при наведении курсора на TextBox.
Enabled Возможность ввода, редактирования, копирования, вставки, удаления текста. True – все перечисленные опции включены, False – выключены (цвет текста в поле становится серым).
Font Шрифт, начертание и размер текста в поле.
Height Высота текстового поля.
Left Расстояние от левого края внутренней границы пользовательской формы до левого края текстового поля.
Locked Запрет ввода, редактирования, удаления текста. True – перечисленные опции запрещены (разрешено выделение и копирование текста), False – перечисленные опции разрешены.
MaxLenght Максимальная длина строки. По умолчанию – 0, что означает – ограничений нет.
Multiline Устанавливает многострочный (True) или однострочный (False) режим ввода-вывода текста.
PasswordChar Задает символ, который будет отображаться при вводе знаков пароля.
TabIndex Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой свойством AutoTab или нажатием клавиш «Tab», «Enter». Отсчет начинается с 0.
Text** Текстовое содержимое (значение) поля (=Value).
TextAlign Выравнивание текста: 1 (fmTextAlignLeft) – по левому краю, 2 (fmTextAlignCenter) – по центру, 3 (fmTextAlignRight) – по правому краю.
Top Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края текстового поля.
Value** Текстовое содержимое (значение) поля (=Text).
Visible Видимость текстового поля. True – TextBox отображается на пользовательской форме, False – TextBox скрыт.
Width Ширина текстового поля.
WordWrap Актуально при Multiline = True. Переход на новую строку при достижении границы текстового поля. True – переход включен, False – переход выключен.

* При использовании свойства AutoSize в значении True следует учитывать, что автоматическое изменение размеров поля при вводе текста может нарушить дизайн пользовательской формы.
** Text и Value — это два обозначения одного и того же свойства. Если в окне Properties элемента управления TextBox в поле свойства Text начать ввод строки, в поле Value ввод будет дублироваться. И наоборот, при вводе текста в поле свойства Value, дублирование произойдет в поле Text.

В таблице перечислены только основные, часто используемые свойства текстового поля. Все доступные свойства отображены в окне Properties элемента управления TextBox.

Свойства BackColor, BackStyle, BorderColor, BorderStyle отвечают за внешнее оформление текстового поля и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления TextBox на проекте пользовательской формы.

Привязка текстового поля к ячейке

Привязать элемент управления TextBox к ячейке на рабочем листе можно двумя способами.

1. В окне Properties элемента управления TextBox в поле свойства ControlSource необходимо указать адрес ячейки:

Окно Properties-TextBox

2. Присвоить свойству ControlSource адрес ячейки в коде VBA Excel:

UserForm1.TextBox1.ControlSource = «C5»

Теперь ячейка C5 активного листа будет привязана к элементу управления TextBox1. При открытии формы текстовое поле будет заполнено значением ячейки C5.

Чтобы наглядно ознакомиться с взаимозависимостью значения ячейки C5 и содержимого текстового поля, разместите на пользовательской форме еще какой-нибудь элемент управления и откройте ее в немодальном* окне:

Sub Test()

UserForm1.TextBox1.ControlSource = «C5»

UserForm1.Show 0

End Sub

Измените значение ячейки C5 и нажмите клавишу «Tab» или «Enter» – изменения будут продублированы в текстовом поле на форме. Измените содержимое поля TextBox1, нажмите клавишу «Tab» или «Enter», передав фокус другому элементу управления, – изменения продублируются в ячейке C5.

Чтобы привязать текстовое поле к ячейке неактивного листа, необходимо в адресе указать имя листа по ярлыку с разделителем «!»:

UserForm1.TextBox1.ControlSource = «Лист2!A3»

Если имя листа содержит пробел, заключите его в одинарные кавычки:

UserForm1.TextBox1.ControlSource = «‘Мой лист’!B6»

Точно также адрес ячейки конкретного листа можно указать непосредственно в окне Properties элемента управления TextBox в поле свойства ControlSource (без парных кавычек).

* Отображение пользовательской формы в немодальном окне позволяет редактировать ячейки на рабочем листе Excel, не закрывая форму.

Примеры использования TextBox

Пример 1
Обмен содержимым между текстовым полем, переменной и ячейкой на рабочем листе:

‘Присвоение текстовому полю значения

‘ячейки A2 и переменной a1

UserForm1.TextBox1.Text = Range(«A2»)

UserForm1.TextBox1.Text = a1

‘Присвоение ячейке B3 и переменной a2

‘значения текстового поля

Cells(3, 2) = UserForm1.TextBox1.Text

a2 = UserForm1.TextBox1.Value

‘Свойства Text и Value элемента

‘управления TextBox равнозначны

Пример 2
Программное создание элемента управления TextBox, размещение его по центру пользовательской формы, добавление всплывающей подсказки и текста по умолчанию.

Предположим, что текстовое поле предназначено для ввода даты, поэтому добавляем соответствующую подсказку, а в качестве текста по умолчанию – текущую дату.

Создаем новую пользовательскую форму с именем UserForm2. Если у вас другое имя формы, это не имеет значения, так как обращаться к ней будем с помощью ключевого слова «Me». Открываем модуль созданной формы и вставляем в него следующий код VBA Excel:

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

Private Sub UserForm_Initialize()

Dim myTextBox As Control

‘Создаем новый TextBox и присваиваем его переменной

Set myTextBox = Me.Controls.Add(«Forms.TextBox.1»)

‘Задаем размеры и заголовок пользовательской формы

With Me

  .Height = 100

  .Width = 220

  .Caption = «Форма №2»

End With

‘Присваиваем значения свойствам текстового поля

With myTextBox

  .Width = 100

  .Height = 20

  ‘Left и Top рассчитаны для Excel 2016*

  .Left = 60 5

  .Top = 40 15

  ‘Добавляем всплывающую подсказку

  .ControlTipText = «Введите дату подписания договора»

  ‘Вставляем в поле текущую дату

  .Text = Format(Now, «DD.MM.YYYY»)

  ‘Выравниваем текст по центру

  .TextAlign = 2

End With

End Sub

В результате выполнения кода откроется следующая форма с всплывающей подсказкой при наведении на TextBox курсора:

TextBox с всплывающей подсказкой

* Значения свойств Left и Top рассчитаны для Excel 2016. Вычитаемые числа зависят от толщины границ пользовательской формы, которые в других версиях Excel могут отличаться.

 

Deniska3

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

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

Здравствуйте. Подскажите как можно в VBA связать TextBox с ячейкой, например я вызываю форму там есть TextBox1, TextBox2 когда я ввожу в них данные они бы отображались в ячейках A1,A2. Можете дать пример?

 

Юрий М

Модератор

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

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

#2

09.03.2014 19:13:24

Например, так ( в режиме «эхо» ;) :

Код
Private Sub TextBox1_Change()
    [A1] = Me.TextBox1
End Sub

 
 

Deniska3

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

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

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

 

Юрий М

Модератор

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

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

#4

09.03.2014 19:20:06

Цитата
Deniska3 пишет:
Получается после закрытия формы данные в TextBox пропадают

А Вы изначально ЭТО просили? Перечитайте свой вопрос.
При загрузке формы теперь наоборот — забирайте данные из ячейки.

 

Юрий М

Модератор

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

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

#5

09.03.2014 19:29:16

Меняем местами))

Код
Private Sub UserForm_Initialize()
    Me.TextBox1 = [A1]
End Sub
 
 

Deniska3

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

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

Я имею ввиду, вызвал форму, внес TextBox например «23», она в неслась в ячейку A1, закрыл форму, при повторном открытие данные не должны пропадать. Вот мой вопрос.

 

Юрий М

Модератор

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

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

А я имею в виду, что нужно СРАЗУ говорить, что нужно. См. #5

 

Deniska3

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

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

А почему формула ругается (пишет ложь) =ЕСЛИ(A1=7;»+»;»-«), по моему когда цифра семь переноситься в ячейку A1, то меняется формат на текстовый, или дело в чём то другом?

 

Sanja

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

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

#9

09.03.2014 19:51:38

Цитата
Deniska3 пишет:
формула ругается

А TextBox здесь причём?

Согласие есть продукт при полном непротивлении сторон.

 

Юрий М

Модератор

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

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

Послушайте, Deniska3, а причём тут формула? Ваш вопрос о чём? — как связать ячейку и ТекстБокс. На этот вопрос ответ Вы получили.
По дополнительному вопросу: запомните — в TextBox ВСЕГДА текст. Поэтому при присвоении ячейке ЧИСЛОВОГО значение из TextBox, значение нужно конвертировать в число.

 

Deniska3

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

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

Вы имеете ввиду, что нужно не через TextBox?

 

Sanja

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

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

#12

09.03.2014 19:54:19

Цитата
Deniska3 пишет:
что нужно

ЧТО НУЖНО?

Согласие есть продукт при полном непротивлении сторон.

 

Юрий М

Модератор

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

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

Где я об этом сказал? Значение из TextBox следует преобразовать в число. См. справку по Cdbl, например.

 

Deniska3

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

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

Вроде разобрался сделал так [A1] = CDbl(Me.TextBox1). Спасибо за подсказку и помощь.

 

Юрий М

Модератор

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

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

#15

09.03.2014 20:24:16

Только я бы изменил событие Change на Exit.

Community, I’m moderately new to excel. I have a textbox called Box_One. This has been set up on my userform. All I want to do is have a cell value constantly equal whatever value is in the textbox.

I tried the following, but not quite sure how to implement properly

Home.Range("A2").Value = Box_One.Value

asked Oct 22, 2013 at 13:45

CBC_NS's user avatar

how about using the Change event of your text box to run the code you want? Something like

Private Sub TextBox1_Change()
    Range("BU1").value = TextBox1.value ' specify the destination sheet and cell here
End Sub

I tested this real quick and it worked.

answered Oct 22, 2013 at 13:53

Octavio's user avatar

OctavioOctavio

4564 silver badges22 bronze badges

2

Внесение данных в ячейку через textbox

Grimald

Дата: Среда, 03.10.2018, 14:38 |
Сообщение № 1

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

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

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


Excel 2016

Здравствуйте уважаемые форумчане. У меня к Вам такой вопрос. Как с помощью textbox’а внести информацию в ячейку, затем внести новую информацию в следующую ячейку. В приведенной таблице это ячейки столбца «Дата отчета». Никак своим умом не могу додуматься до решения. Спасибо Всем за внимание.

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

9612241.xls
(58.5 Kb)

Сообщение отредактировал GrimaldСреда, 03.10.2018, 14:39

 

Ответить

_Boroda_

Дата: Среда, 03.10.2018, 15:02 |
Сообщение № 2

Группа: Модераторы

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Так нужно?
[vba]

Код

Private Sub CommandButton1_Click()
    With Sheets(«ЖУРНАЛ УЧЕТА ПРОИСШЕСТВИЙ»)
        r1_ = .Cells(.Rows.Count, 2).End(3).Row
        r1_ = r1_ — (Cells(r1_, 2) <> «»)
        .Cells(r1_, 4) = Date
    End With
End Sub

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Grimald

Дата: Среда, 03.10.2018, 15:20 |
Сообщение № 3

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

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

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


Excel 2016

Не немного не так. Наверно я не правильно сформулировал суть вопроса. Есть поле «дата отчета» в форме. В вводятся данные из этого поля в ячейку столбца с аналогичным названием. Затем это поле должно очиститься, чтобы последовательно вносились данные в ячейки сверху вниз. Как то так.

Сообщение отредактировал GrimaldСреда, 03.10.2018, 15:21

 

Ответить

_Boroda_

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

Группа: Модераторы

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

Сообщений: 16618


Репутация:

6465

±

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


2003; 2007; 2010; 2013 RUS

Так?
Сделал только дату и порядковый номер, остальные столбцы самостоятельно
[vba]

Код

Private Sub CommandButton1_Click()
    With Sheets(«ЖУРНАЛ УЧЕТА ПРОИСШЕСТВИЙ»)
        r1_ = .Cells(.Rows.Count, 2).End(3).Row
        r1_ = r1_ — (Cells(r1_, 2) <> «»)
        .Cells(r1_, 2) = r1_ — 3
        .Cells(r1_, 4) = CDate(Me.TextBox2)
        Me.TextBox2.Value = «»
    End With
End Sub

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Grimald

Дата: Среда, 03.10.2018, 17:12 |
Сообщение № 5

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

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

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


Excel 2016

Спасибо за помощь. Все работает.
Тему можно закрывать.

 

Ответить

0 / 0 / 0

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

Сообщений: 9

1

22.02.2012, 03:34. Показов 16724. Ответов 5


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

Здравствуйте. Помогите решить задачу. Есть форма на ней TextBox, как вводя данные сделать так, чтобы эти данные попали в пустую ячейку в определённый столбец книги.
Заранее благодарен.



0



Masalov

22 / 5 / 1

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

Сообщений: 370

22.02.2012, 08:07

2

Нужно найти последнюю пустую ячейку в таблице, например так: http://relib.com/forums/thread.aspx?id=884102, и занести в нее значение textbox.value

Подведу итог.
На форме TextBox1 и кнопка CommandButton1 по нажатию на которую идет запись в первую колонку листа с именем «Лист3».

Visual Basic
1
2
3
4
5
Private Sub CommandButton1_Click()
rk = Sheets("Лист3").Columns("A").Rows(65536).End(xlUp).Row + 1
Sheets("Лист3").Cells(rk, 1) = Me.TextBox1.Value
MsgBox "Занесено" & vbCr & "в строку " & rk, vbInformation, ""
End Sub



2



0 / 0 / 0

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

Сообщений: 9

22.02.2012, 23:43

 [ТС]

3

Спасибо за ответ. Но вариант такой, что на форме два или больше TextBox-ов, можно ли их связать с пустыми ячейками
в разных столбцах и кнопкой на форме одновременно. Другой вариант это без кнопки, данные из TextBox попадают
сразу в пустую ячейку. Прошу прощение за назойливость, но сам не могу, а очень нужно.



0



Masalov

22 / 5 / 1

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

Сообщений: 370

23.02.2012, 07:03

4

1) Для записи значений нескольких TextBox-ов необходимо продублировать поиск и запись…

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub CommandButton1_Click()
c1 = 1 ' номер колонки для TextBox1
rk1 = Sheets("Лист3").Columns(c1).Rows(65536).End(xlUp).Row + 1
Sheets("Лист3").Cells(rk1, c1) = Me.TextBox1.Value
c2 = 2 ' номер колонки для TextBox2
rk2 = Sheets("Лист3").Columns(c2).Rows(65536).End(xlUp).Row + 1
Sheets("Лист3").Cells(rk2, c2) = Me.TextBox2.Value
MsgBox "Значение TextBox1= " & Me.TextBox1.Value & ", в строку " & rk1 & vbCr & _
"Значение TextBox2= " & Me.TextBox2.Value & ", в строку " & rk2, vbInformation, ""
End Sub

Сразу оговорюсь, что есть другие варианты…

2) Для того чтобы данные [bold]сразу[/bold] попали в ячейку нужно обработать какое нибуть событие и на него повесить запись. Какое это будет событие, Вам решать. Это может быть время, изменение TextBox или «снятие курсора» с этого TextBox-а… Вот для затравки:

Visual Basic
1
2
3
4
5
6
7
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox "BeforeUpdate"
End Sub
 
Private Sub TextBox1_Change()
MsgBox "Change"
End Sub



1



0 / 0 / 0

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

Сообщений: 9

26.02.2012, 16:27

 [ТС]

5

Спасибо за ответ. Если не трудно то есть ещё один, не совсем
понятный мне,вопрос. Есть два листа, на одном база данных,
на втором документ и есть форма. Как написать условие при
котором вводя в TextBox, на форме, данные, происходила
сверка с БД и при наитии все значения из ячеек копируются в
документ на втором листе.



0



0 / -1 / 0

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

Сообщений: 35

15.09.2016, 08:40

6

Отдуши за тему!



0



Формулировка задачи:

Добрый день.
Есть две задачи:
1) Скопировать

любой

текст из ячейки F4 в поле формы TextBox1 (с этим справился).
2) Скопировать

любой

текст из того же поля TextBox1, но в ячейку (H4).
Для первой написал код

Как написать код для второй, не понимаю. Помогите

Код к задаче: «Копирование текста из TextBox в ячейку таблицы Excel»

textual

TextBox1.Value = Range("F4").Value

Полезно ли:

13   голосов , оценка 3.385 из 5

VBA-Урок 5. Свойства (Properties)

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

1. Запись значений в ячейку

Для начала откроем редактор, добавим модуль, скопируем туда этот макрос:

Мы обратились к ячейке A1 . Теперь давайте попробуем управлять данной ячейкой. Чтобы увидеть, что мы можем сделать, добавим точку после Range («A1»).

Выберите значение Value и нажмите Tab. Получим такой код:

Значение Value отображает содержимое ячейки.

Теперь давайте запишем значение 35 в ячейку A1:

Попробуем теперь записать текст в ячейку (когда присваиваем текстовое значение, его нужно брать в двойные кавычки «»):

Заметим, что макрос будет отображать значение в том листе, который вы последний раз открывали. Поэтому, чтобы управлять содержимым ячейки на любом листе книги, нам нужно будет прописать полный путь к ячейке, а именно добавить впереди кода название листа, например:

Вариант 1. Обращаемся по названию листа — Sheets(«Sheet2»).

Вариант 2. Обращаемся не по названию листа, а по его порядковому номеру — Sheets(2).

Аналогично, если мы хотим обратиться к ячейке в другой книге, нам нужно в начале кода прописать название книги:

Хотя мы указываем параметр Value в наших примерах, на самом деле его можно не использовать, поскольку он стоит по умолчанию. То есть, эти две строки кода будут эквивалентными:

2. Удаление значений

Удалим значение 35 из ячейки A1, которое мы записали в начале урока:

3. Форматирование значений

Если вы выберете значение Font , то появится список параметров, которые вы сможете применить к ячейке:

Форматирование: изменение размера текста

Давайте присвоим ячейке значение 35 и уменьшим размер шрифта до 8:

Работа с Excel — записать в ячейку значение из TextBox

Что еще можно почитать

Дозапись в файл на FTP (Декабрь 8, 2015)
Генератор QR-кода на VB .NET (Март 13, 2016)
Plazma — Black Bird Fly (Cover) (Сентябрь 2, 2015)
Magic Mystery (Systems In Blue Cover) (Март 30, 2016)
Получить имя компьютера по его IP-адресу (Декабрь 4, 2015)

13 комментариев: Работа с Excel — записать в ячейку значение из TextBox

Добрый вечер!
Как сделать, что б запись выполнялась в пустую строку таблицы excel т.е. программа ищет пустую стоку и в нее записывает значение?

@ Игорь:
Добрый.
Вам нужен UsedRange, можете загуглить.

Пример будет выглядеть так (строка 7):

@ Игорь:
Добрый.
Вам нужен UsedRange, можете загуглить.

БОЛЬШОЕ Спасибо! Сейчас попробую погуглить и разобраться!
Но я вот, что имел ввиду:
есть два поля textbox1 и textbox2, кнопка button1 «Записать». Необходимо при нажатии кнопки выполнить запись из textbox1 и textbox2 в таблицу excel (например файл 1.xlsx). Причем textbox1 в столбец «В», а textbox2 в столбец «С», но в свободную строку (не заполненную), например 1, 2, 3 строки заполнены, а 4 пустая — так вот в нее!

В cells второй параметр — это и есть индекс столбца. Там указана 1, т.е. первый столбец. Вы пишите нужный.
Что Вас смущает?

VBA Excel. Ячейки (обращение, запись, чтение, очистка)

Обращение к ячейке на листе Excel из кода VBA. Запись информации в ячейку. Чтение информации из ячейки. Очистка значения ячейки. Метод ClearContents объекта Range.

Обращение к ячейке

Допустим, у нас есть два открытых файла: «Книга1» и «Книга2», причем, файл «Книга1» активен и в нем находится исполняемый код VBA.

В общем случае при обращении к ячейке неактивной рабочей книги «Книга2» из кода файла «Книга1» прописывается полный путь:

Удобнее обращаться к ячейке через свойство рабочего листа Cells(номер строки, номер столбца), так как вместо номеров строк и столбцов можно использовать переменные. Обратите внимание, что при обращении к любой рабочей книге, она должна быть открыта, иначе произойдет ошибка. Закрытую книгу перед обращением к ней необходимо открыть.

Теперь предположим, что у нас в активной книге «Книга1» активны «Лист1» и ячейка на нем «A1». Тогда обращение к ячейке «A1» можно записать следующим образом:

Точно также можно обращаться и к другим ячейкам активного рабочего листа, кроме обращения ActiveCell, так как активной может быть только одна ячейка, в нашем примере — это ячейка «A1».

Если мы обращаемся к ячейке на неактивном листе активной рабочей книги, тогда необходимо указать этот лист:

Имя ярлыка может совпадать с основным именем листа. Увидеть эти имена можно в окне редактора VBA в проводнике проекта. Без скобок отображается основное имя листа, в скобках — имя ярлыка.

Кроме того к ячейке на рабочем листе можно обращаться по ее индексу (порядковому номеру), который считается по расположению ячейки на листе слева-направо и сверху-вниз. Например, индекс ячеек в первой строке равен номеру столбца. Индекс ячеек во второй строке равен количеству ячеек в первой строке (которое равно общему количеству столбцов на листе — зависит от версии Excel) плюс номер столбца. Индекс ячеек в третьей строке равен количеству ячеек в двух первых строках плюс номер столбца. И так далее. Для примера, Cells(4) та же ячейка, что и Cells(1, 4). Используется такое обозначение редко, тем более, что у разных версий Excel может быть разным количество столбцов и строк на рабочем листе.

Запись информации в ячейку

Содержание ячейки определяется ее свойством «Value», которое в VBA Excel является свойством по умолчанию и его можно явно не указывать. Записывается информация в ячейку при помощи оператора присваивания «=»:

Вместе с числами и текстом можно использовать переменные. Примеры здесь и ниже приведены для активного листа. Для неактивных листов дополнительно необходимо указывать имя листа, как в разделе «Обращение к ячейке».

Чтение информации из ячейки

Считать информацию из ячейки в переменную можно также при помощи оператора присваивания «=»:

Точно также можно обмениваться информацией между ячейками:

Очистка значения ячейки

Очищается ячейка от значения с помощью метода ClearContents. Кроме того, можно присвоить ячейке значение нуля или пустой строки:

Чтение и запись значения ячейки в VBA

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

Обращение к конкретной ячейке

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

Полный путь к ячейке A1 в Книге1 на Листе1 можно записать двумя вариантами:

  • С помощью Range
  • С помощью Cells

Пример 1: Обратиться к ячейке A3 находящейся в Книге1 на Листе1

Однако, как правило, полный путь редко используется, т.к. макрос работает с Книгой, в которой он записан и часто на активном листе. Поэтому путь к ячейке можно сократить и написать просто:

Пример 2: Обратиться к ячейке A1 в текущей книге на активном листе

Если всё же путь к книге или листу необходим, но не хочется его писать при каждом обращении к ячейкам, можно использовать конструкцию With End With. При этом, обращаясь к ячейкам, необходимо использовать в начале «.» (точку).

Пример 3: Обратиться к ячейке A1 и B1 в Книге1 на Листе2.

Так же, можно обратиться и к активной (выбранной в данный момент времени) ячейке.

Пример 4: Обратиться к активной ячейке на Листе3 текущей книги.

Чтение значения из ячейки

Есть 3 способа получения значения ячейки, каждый из которых имеет свои особенности:

  • Value2 — базовое значение ячейки, т.е. как оно хранится в самом Excel-е. В связи с чем, например, дата будет прочтена как число от 1 до 2958466, а время будет прочитано как дробное число. Value2 — самый быстрый способ чтения значения, т.к. не происходит никаких преобразований.
  • Value — значение ячейки, приведенное к типу ячейки. Если ячейка хранит дату, будет приведено к типу Date. Если ячейка отформатирована как валюта, будет преобразована к типу Currency (в связи с чем, знаки с 5-го и далее будут усечены).
  • Text — визуальное отображение значения ячейки. Например, если ячейка, содержит дату в виде «число месяц прописью год», то Text (в отличие от Value и Value2) именно в таком виде и вернет значение. Использовать Text нужно осторожно, т.к., если, например, значение не входит в ячейку и отображается в виде «#####» то Text вернет вам не само значение, а эти самые «решетки».

По-умолчанию, если при обращении к ячейке не указывать способ чтения значения, то используется способ Value.

Пример 5: В ячейке A1 активного листа находится дата 01.03.2018. Для ячейки выбран формат «14 марта 2001 г.». Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

Пример 6: В ячейке С1 активного листа находится значение 123,456789. Для ячейки выбран формат «Денежный» с 3 десятичными знаками. Необходимо прочитать значение ячейки всеми перечисленными выше способами и отобразить в диалоговом окне.

При присвоении значения переменной или элементу массива, необходимо учитывать тип переменной. Например, если оператором Dim задан тип Integer, а в ячейке находится текст, при выполнении произойдет ошибка «Type mismatch». Как определить тип значения в ячейке, рассказано в следующей статье.

Пример 7: В ячейке B1 активного листа находится текст. Прочитать значение ячейки в переменную.

Таким образом, разница между Text, Value и Value2 в способе получения значения. Очевидно, что Value2 наиболее предпочтителен, но при преобразовании даты в текст (например, чтобы показать значение пользователю), нужно использовать функцию Format.

Запись значения в ячейку

Осуществить запись значения в ячейку можно 2 способами: с помощью Value и Value2. Использование Text для записи значения не возможно, т.к. это свойство только для чтения.

Пример 8: Записать в ячейку A1 активного листа значение 123,45

Все три строки запишут в A1 одно и то же значение.

Пример 9: Записать в ячейку A2 активного листа дату 1 марта 2018 года

В данном примере тоже запишется одно и то же значение в ячейку A2 активного листа.

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

Запись значения в ячейку, которая не вызывает функцию, через функцию VBA

Мне интересно, можно ли записывать значения в ячейку в Excel через функцию VBA?

Аки ни строки в следующей функции будут называть:

Но следующим пустышки Sub будет работать правильно:

Есть ли что-то, что нужно сделать, чтобы быть в состоянии записать в ячейку, которая не является ячейкой, вызывающей конкретную функцию?

Создан 12 сен. 16 2016-09-12 05:33:09 Matt

Уже описано здесь, поиск этой ссылке: //stackoverflow.com/questions/9476282/cannot-vba-write-data-to-cells-in-excel-2007-2010-within-a-функция – Shai Rado 12 сен. 16 2016-09-12 05:37:14

может быть это временное решение может сделать для вас:

сократить вниз вашу OffsetValue функцию:

место следующие подвиды в кодовой области рабочего листа вы хотите использовать Function OffsetValue() в:

Если вы не хотите удалять звонок OffsetValue() из той ячейки, которую вы написали, а затем просто удалить/комментарий Target.ClearContents

это только базовый код, который вы можете улучшить с:

некоторые проверка Target диапазона, передаваемым в Worksheet_Change()

вы можете проверить, если он соответствует конкретным Значение (например: проверка Target.Value с некоторым диапазоном значений) или Диапазон (например: проверка Target сам диапазон, принадлежащий предопределенному Range ) критерии

обрабатывать ту же потребность на протяжении всей книги

, то вы должны переключиться на использование обработчика Sub ThisWorkbook_Change() событий в коде панели ThisWorkbook

Понравилась статья? Поделить с друзьями:
  • Vba excel textbox mask
  • Vba excel textbox in userform
  • Vba excel textbox change
  • Vba excel text to number one
  • Vba excel text in cell no