Страницы: 1
RSS
Присвоение имени ячейке через textbox при загрузке книги?
 
Доброе утро, товарищи!  
 
Подскажите как сделать такую вот задачу:  
 
Есть специальный файл, который копируют себе несколько пользователей. Для того чтобы привязать по имени к каждому пользователю данный файл, требуется заполнить определенную ячейку в скрытом листе.  
Для того, чтобы пльзователь не заморачивался, пришла идея присвоить фамилию пользователя этой ячейке через текстбокс, который загрузится при открытии файла.  
 
Подскажите пожалуйста как реализовать это?    
Открывается файл -> макрос проверяет заполненость необходимой ячейки (к примеру А1 на листе1 -> если ячейка пустая выходит форма с требованием написать свою фамилию  
* если написали то ячейка заполнилась  
* если не напсиали повторное открытие окна с требованием написать фамилию
 
Private Sub Workbook_Open()  
   With sheet1  
       If .Cells(1) = "" Then .Cells(1) = InputBox("введите имя")  
   End With  
End Sub
 
Чето я не понял а как к ячейке привязать?
 
Народ расскажите как поставить такую же задачу только чтобы Userform выскакивал?
 
Для начала создать форму, которая будет вызываться по события открытия книги.
 
{quote}{login=Юрий М}{date=22.01.2012 11:46}{thema=}{post}Для начала создать форму, которая будет вызываться по события открытия книги.{/post}{/quote}  
 
ну это я могу сделать  
туда я допустим присабачу Textbox1  
а как привязать значение текстбокс к значению ячейки А1 допустим на листе 1. и как зациклить если пустая то вызов формы, и как постаить условие на запуск формы если пустая и ничего если заполнена?
 
Проверить ячейку и по условию вызывать форму можно, например, так:  
if sheets("Лист1").cells(1,1) = "" then userform1.show  
Насчёт зацикливания... что Вы под этим подразумеваете?
 
{quote}{login=Юрий М}{date=22.01.2012 12:12}{thema=}{post}Проверить ячейку и по условию вызывать форму можно, например, так:  
if sheets("Лист1").cells(1,1) = "" then userform1.show  
Насчёт зацикливания... что Вы под этим подразумеваете?{/post}{/quote}  
 
if sheets("Лист1").cells(1,1) = "" это я как понимаю условие на проверку, где 1, 1 номер строки и столбца  
then userform1.show это значит действие при условии  
 
Далее мы пишем Then end sub? Чтобы если ячейка заполнена, то действие прекращается? Так?  
 
А про зацикливание я имел ввиду, что пока ячейка пустая форма бескончено вызывается сама себя. Как сделать?
 
В модуль книги:  
Private Sub Workbook_Open()  
if sheets("Лист1").cells(1,1) = "" then userform1.show  
End Sub  
Если ячейка А1 на первом листе пустая, то будет вызвана форма.  
Затем, я так понимаю, нужно в TextBox на форме ввести некое значение и нажать на кнопку. Значение из TextBox присвоить ячейке А1. В процедуре кнопки написать проверку условия: if me.tetxbox1<>"" then unload me
 
В модуль книги:  
Private Sub Workbook_Open()  
   If Sheets("Лист1").Cells(1, 1) = "" Then UserForm1.Show  
End Sub  
 
В модуль формы:  
Private Sub CommandButton1_Click()  
   If Me.TextBox1 <> "" Then  
       Sheets("Лист1").Cells(1, 1) = Me.TextBox1  
       Unload Me  
   Else  
       Exit Sub  
   End If  
End Sub  
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)  
   If Me.TextBox1 = "" Then  
       Cancel = True  
   Else  
       Call CommandButton1_Click  
   End If  
End Sub
 
Только сейчас обратил внимание, что Вы хотели присвоить ячейке имя, а я Вам всё про значение говорю...  
Ошибка, или нужно действительно ИМЯ, а не значение?
 
{quote}{login=Юрий М}{date=22.01.2012 03:11}{thema=}{post}Только сейчас обратил внимание, что Вы хотели присвоить ячейке имя, а я Вам всё про значение говорю...  
Ошибка, или нужно действительно ИМЯ, а не значение?{/post}{/quote}  
 
В ячейку будет вписана фамилия. А в чём значение имени и значении? Я так пологаю, что значение ячейке присваиваем.  
 
Сейчас буду разбираться в коде, написанном вами.
 
квартирант василий, в Excel ячейка или диапазон может иметь своё имя.    
 
Например, можно присвоить имя "Это_Мои_Данные" диапазону A1:Z50  
 
или  
 
имя "Курс_доллара" ячейке А5  
 
Вот про это имя и говорит Юрий
 
{quote}{login=Юрий М}{date=22.01.2012 03:11}{thema=}{post}Только сейчас обратил внимание, что Вы хотели присвоить ячейке имя, а я Вам всё про значение говорю...  
Ошибка, или нужно действительно ИМЯ, а не значение?{/post}{/quote}  
 
Вприципе получилось как раз то что мне надо. Только есть один вопрос, можно ли запретить нажатие на крестик?  
Когда вводишь какое то значение, напрмер начал вводить и не до конца закончи после нажал на крестик, вот не доконца написанное значение присваивается. ЧТо может ввестив заблуждение.
 
а понятие "не до конца" это сколько ? 20, 30, 2, 50 ?  
 
вам нужно подредактировать эту процедуру  
Тут написано: Если поле TextBox пусто, то НЕ закрывать форму  
Вам соответственно нужно дописать:  
Если поле TextBox пусто или количество символов в TextBox меньше 20, 30, 2, 50 То Не закрывать форму.  
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)  
If Me.TextBox1 = "" Or Len(TextBox1.text) < 5 Then  
Cancel = True  
Else  
Call CommandButton1_Click  
End If  
End Sub  
 
Вместо числа 5 можете поставить своё число. Это количество символов в TextBox  
Попробуйте, если не заработает поменяйте Or на And    
))
 
{quote}{login=Ластик}{date=22.01.2012 04:23}{thema=}{post}а понятие "не до конца" это сколько ? 20, 30, 2, 50 ?  
 
вам нужно подредактировать эту процедуру  
Тут написано: Если поле TextBox пусто, то НЕ закрывать форму  
Вам соответственно нужно дописать:  
Если поле TextBox пусто или количество символов в TextBox меньше 20, 30, 2, 50 То Не закрывать форму.  
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)  
If Me.TextBox1 = "" Or Len(TextBox1.text) < 5 Then  
Cancel = True  
Else  
Call CommandButton1_Click  
End If  
End Sub  
 
Вместо числа 5 можете поставить своё число. Это количество символов в TextBox  
Попробуйте, если не заработает поменяйте Or на And    
)){/post}{/quote}  
 
Не :) Я не в том смысле)))  
Вот представьте я сел за компьютер. Открываю файл, а мне в лице форма с текстбоксом кричащая "Напиши свою фамилию гад! Иначе не сможешь работать!"  
 
Ну я подумав начинаю писать "Ивано", но в последнюю минуту передумал потому что я оказывается вчера сменил фамилию на сидоров. И жму в испуге на крестик как неопытный пользователь)))  
А значвение ячейке уже присвоилось "ивано" и окно уже не выскочит снова
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)  
Cancel = True  
End Sub
 
{quote}{login=Ластик}{date=22.01.2012 04:34}{thema=}{post}Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)  
Cancel = True  
End Sub{/post}{/quote}  
 
Так совсем невохможным становится закрыть форму.  
 
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)  
If Me.TextBox1 = "" Then  
Cancel = True  
Else  
Call CommandButton1_Click  
 
Cancel = True  
 
End If  
End Sub  
 
Так правильно будет написать?  
__________
 
если честно, то я не работаю (не помогаю) без примера файла. Может правильно у вас, может нет, я не могу протестировать, а свой пример создавать для каждого человека мне не хочется.
 
А в какой момент Excel должен понять, что закрывать "крестиком" можно?
 
Юрий, это логично же.    
Если человек хотел написать "Иванов", а написал лишь "Ивано". т.е. фамилия не полная.  
 
А так же, логично, что неправильно, если человек поменял полгода назад фамилию с Иванов на Сидоров, и когда в форме написал старую фамилию "Иванов" форма не должна закрываться, т.к. у человека уже полгода официально фамилия другая....  
 
вот такая логика.... куда жаловаться... не знаю...
 
Ну да - Excel ведь в паспорт не смотрит :-) Кстати, завтра понедельник.
 
Василий, не побоюсь этого слова - квартирант, а как Вам такая идея: на форме ВООБЩЕ убрать крестик? Если подходит - добро пожаловать в поиск :-)  
Но возникает ещё один вопрос: вводили "Иванов", а по какой-либо причине ввели слово с любой ошибкой, нажали на кнопку - в ячейке не то, что хотели. ЧД?
Страницы: 1
Читают тему
Наверх