Страницы: 1
RSS
Автоматическое создание листов при появлении значения в ячейке
 
Привет всем!  
Подскажите как сделать следущее(если это реально):  
 
-есть ячейка, когда я ввожу в нее номер контракта надо чтобы автоматически создавался лист с именем контракта,указанного в ячейке, и номер контракта в ячейке становился ссылкой ведущей на лист который был создан.  
Примного благодарен.
 
В модуль первого листа:  
Private Sub Worksheet_Change(ByVal Target As Range)  
   If Not Intersect(Target, Range("A1")) Is Nothing Then  
       Sheets.Add After:=Sheets(Sheets.Count)  
       Sheets(Sheets.Count).Name = Target.Value  
       Sheets(1).Activate  
       ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:="", SubAddress:=Target.Value & "!A1"  
   End If  
End Sub
 
Дополнение: проверка на наличие листа.  
 
 
Private Sub Worksheet_Change(ByVal Target As Range)  
Dim shts As Worksheet  
Dim msg  
     If Not Intersect(Target, Range("A1")) Is Nothing Then  
     
           For Each shts In ThisWorkbook.Worksheets ' семейство всех листов  
                 If shts.Name = Range("A1") Then ' если лист есть  
                       msg = MsgBox("Есть такой!", vbCritical, "НИЗЗЯ!") ' наругать  
                       Exit Sub ' покинуть теплый дом  
                 End If  
           Next  
     
           Sheets.Add After:=Sheets(Sheets.Count)  
           Sheets(Sheets.Count).Name = Target.Value  
           Sheets(1).Activate  
           ActiveSheet.Hyperlinks.Add Anchor:=Range("A1"), Address:="", _  
                                                           SubAddress:=Target.Value & "!A1"  
     End If  
End Sub
 
Да, и еще пара нюансов  
 
Private Sub Worksheet_Change(ByVal T As Range)  
Set T = Intersect(T, Range("A1"))           'здесь адрес ячейки  
If Not T Is Nothing Then  
   If Len(T) Then                          'ячейка не пустая  
       On Error Resume Next  
       If Sheets(T) Is Nothing Then        'проверка существования листа  
           With Sheets.Add(After:=Sheets(Sheets.Count)): .Name = T: End With  
           Me.Activate  
       End If  
       Hyperlinks.Add Anchor:=Range("A1"), Address:="", SubAddress:="'" & T & "'!A1"  
   End If  
End If  
End Sub
 
Виктор! Как сохранять отступы в тексте?!
 
Уважаемый помогите,  я не могу понять как мне сделать. У меня список идет подрят. Тоесть контракт 1.2.3 (А1.А2.А3 ячейки) итд а он работает только в ячейке А1 а в А2 нет.
 
ВСЕ ПОНЯЛ! ВСЕМ СПАСИБО!
 
СРАЗУ нужно было говорить, что ячеек несколько. Ведь Вы что писали:  
"-есть ячейка, когда я ввожу в нее номер контракта надо чтобы автоматически создавался лист..." Вот Вам и сделали для ОДНОЙ ячейки.
 
Господа вот какая ситуация.  
 
У меня два листа. в 1л А1 я вношу значения а во второй 2л (определенные копируются-через"=")в А1.  
Проблема в том что    
а) когда я вбиваю в ячейку А1 в 1 листе номер "888" он копирует его в лист 2 ячейку "А1".  
Если делать напрямую, только с листом 1 и ячейкой А1, то все работает и новый лист создается с сылкой, но если делать так чтобы значение во 2л яч А1 бралось из листа 1 ячейки А1  нет не ссылки нет ни нового листа.  
Как решить данную проблему.  
Мне надо чтобы я только один раз писал номер контракта он автоматом вставал в опред ячейку в другом листе создавал новый лист исходя из названия контракта и чтобы все ссылки (в 1 и2ом листе-номер контракта) ссылались на новый лист который создался!  
 
Уфф замудрил!
 
Замудрил... Тут другое слово подходит - запудрил. Мозги.  
Дочитал до конца - упустил мысль, которая витала вначале :)
 
так...hрасписываю.  (сорри что намудрил)  
 
Как сделать так чтобы при создании названия контракта (Например №001 "ячА1") на листе 1, он автоматически появлялся в листе номер №2 с таким-же названием в той-же ячеке), (опять же чтобы на листе №1 он становился ссылкой, и при нажатии на него ввел на лист 2 и эту ячейку,а там при появлении номера уже выполнялись условия по соданию страницы и ссылки (выше писал что надо).  
Как это оформить!?  
 
Да еще подсобите.  
Можно ли сделать чтобы когда с одной страницы на другую перебрасывает по ссылке ячейка на которую попадаешь, а точнее вся строка по горизонтали подсвечивалась!?  
 
Заранее благодарю!
 
Так как я не смог объяснить сделаю так.  
В приложении файл.  
1)В листе Юр Вбиваем все данные,  определенные данные переносятся в лист «Поставка».Например номер  контракта из листа «Юр»  «Е2», появляется в листе «Поставка» ячейке , «D3».    
В этот же момент, номер контракта №1  из листа «Юр» переносится в лист «Поставка» ячейку «D3».И после  появления номера там, создается автоматом  новый лист с номером этого контракта.  
2) В дополнение надо чтобы в листе «Юр» при написании номера  контракта, он становился ссылкой и ввел на лист «Поставка» в ячейку с номером этого контракта. А в Поставке этот номер ввел на новый лист с названием этого контракта который автоматом создался.  
 
Вот теперь надеюсь все.  
P/S Контрактов много, поэтому надо чтобы например весь столбец «D» работал по этой схеме и оставалось только вбивать номера контрактов подряд.
 
Юрий,  
 
Прошу помощи. Проблема у меня возникла с кодом.  
"  
Private Sub Worksheet_Change(ByVal Target As Range)  
If Not Intersect(Target, Range("E1:E100")) Is Nothing Then  
Sheets.Add After:=Sheets(Sheets.Count)  
Sheets(Sheets.Count).Name = Target.Value  
Sheets(1).Activate  
ActiveSheet.Hyperlinks.Add Anchor:=Range("E1:E100"), Address:="", SubAddress:=Target.Value & "!A1"  
End If  
End Sub"  
 
Я вначале не указал что у меня контракты постоянно появляются и надо постояяно их вбивать. Вы мне помогли и сделали код для одной Ячейки А1, я попытался сделать аналог для всего столбца и изменил код на "А1:А100" но видимо познания мои "никакие", так как нечего не работает и постоянно выдает (Run-time error "1004") Недопустимое имя для листа. Я не знаю что делать.
Страницы: 1
Читают тему
Наверх