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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2010, 17:34   #1
bank_notes
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 16
По умолчанию Private Sub TextBox2_GotFocus()

Доброго Здоровья!

VBA6 Excel: На UserForm1 в TextBox1 посредством CommandButton1 вводится какое-то значение, пусть цифра 1. Необходимо, чтобы при перемещении фокуса в TextBox2, которая находится также на UserForm1 с помощью CommandButton1 единица вводилась уже в TextBox2. И при возврате фокуса в TextBox1 эта же кнопка опять "работала на TextBox1".
Как это выразить в виде работающего кода (по событию)? Спасибо.
bank_notes вне форума Ответить с цитированием
Старый 11.08.2010, 20:44   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Примерно так:
Код:
Private Sub CommandButton1_Click()
    Me.TextBox1 = "текст"
End Sub

Private Sub TextBox1_Enter()
    Me.TextBox1 = Me.TextBox2
End Sub

Private Sub TextBox2_Enter()
    Me.TextBox2 = Me.TextBox1
End Sub
Пример в файле: http://excelvba.ru/XL_Files/Sample__...__22-44-17.zip
EducatedFool вне форума Ответить с цитированием
Старый 11.08.2010, 23:38   #3
bank_notes
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 16
По умолчанию

На основе Вашего примера получилось то, что было нужно (файл – в приложении). Все работает как надо. И все бы хорошо. Но на рабочей форме происходит странный глюк: Поменять окно ввода можно только один раз. После чего кнопка продолжает вводить значение в TextBox2, и на смену фокуса и положение курсора не реагирует. В чем может быть загвоздка?? Какие нибудь предположения?? :-(
Вложения
Тип файла: rar Sample__11-08-2010__22-44-16.rar (6.6 Кб, 15 просмотров)

Последний раз редактировалось bank_notes; 11.08.2010 в 23:41.
bank_notes вне форума Ответить с цитированием
Старый 12.08.2010, 12:44   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

А такой вариант.Проверил-работает

Код:
Private Sub TextBox1_Change()
CommandButton1.Tag = 1
End Sub

Private Sub TextBox2_Change()
CommandButton1.Tag = 2
End Sub

Private Sub CommandButton1_Click()

If CommandButton1.Tag Like 1 Then
TextBox2 = "текст"
Else
TextBox1 = "текст"
End If
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 12.08.2010, 15:37   #5
bank_notes
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 16
По умолчанию

Dober, Спасибо за отклик. Код работает, но цель не достигнута. Суть в том, что юзер должен сам выбрать окно ввода (TextBox1 или TextBox2). В процессе работы TextBox1 может очиститься и снова понадобится ввести значение именно TextBox1…..
bank_notes вне форума Ответить с цитированием
Старый 12.08.2010, 16:32   #6
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

А если такой вариант. Добавляем на форму CheckBox1, который переключает булеву переменную, очищает один ТекстБокс и переводит фокус в другой ТекстБокс.
А по кнопке CommandButton1 записывается "text" в тот ТекстБокс, который имеет фокус.
PHP код:
Option Explicit
Dim TT 
As Boolean

Private Sub CheckBox1_Click()
If 
Me.CheckBox1 Then
    TT 
FalseMe.TextBox1.SetFocusMe.TextBox2.Value ""
Else
    
TT TrueMe.TextBox2.SetFocusMe.TextBox1.Value ""
End If
End Sub

Private Sub CommandButton1_Click()
    If 
TT Then
        Me
.TextBox2.Value "text"
    
Else
        
Me.TextBox1.Value "text"
    
End If
End Sub 
nilem вне форума Ответить с цитированием
Старый 12.08.2010, 19:27   #7
bank_notes
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 16
По умолчанию

Спасибо, Nilem. Вариант с CheckBox рассматривался и он, безусловно, работоспособен и надежен и решает проблему технически. Возможно, что придется на нем и остановиться.

Но…, как бы это выразить, нет в нем изящества…. Лишний клик…Это почти то-же самое, что создать отдельную кнопу для TextBox2… Наверняка есть другое решение…
bank_notes вне форума Ответить с цитированием
Старый 12.08.2010, 19:59   #8
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

In my humble opinion, the additional condition means additional click.
ИМХО, дополнительное условие означает дополнительный клик.
nilem вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
H2269 Overriding virtual method 'TForm1.WndProc' has lower visibility (private) than base class 'TForm' AlexanderSatorin Общие вопросы Delphi 2 27.06.2010 10:08
событие Private Sub Worksheet_Change Светлана87 Microsoft Office Excel 5 11.10.2009 18:42
Private: public: Swool Общие вопросы C/C++ 2 15.09.2009 13:53
разделы type-а: private, pub....... Altera Общие вопросы Delphi 4 16.02.2008 17:19