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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2011, 15:40   #1
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию Создание листа с последующим обращением к оному

добрые день уважаемые программисты.
вот такой вопрос у меня:
как программно создать новый лист и потом к нему обращаться?

суть:

есть книга в которой только один пока ПУСТОЙ лист (СВОДНАЯ)
в этом листе прописана функция на изменения в ячейках.
как только в ячейке произойдет какое либо изменение функция считывает данные с изменившейся ячейки (какое либо название) и создает новый лист с этим названием.
в последующем необходимо чтобы все изменения в строке с названием отображались в одноменном листе.

пример
пустой лист.
в ячейке строка 1 столбец 1 пишу ЯБЛОКИ
создается лист с названием ЯБЛОКИ
в следующей строке 2 столбец 1 пишу ГРУШИ - создается лист с таким же именем.
и тд..

после чего в строке ЯБЛОКИ в ячейке 2 вношу какую либо цифру, необходимо, чтобы скрипт скопировал эту цифру и перенес ее в лист с именем ЯБЛОКИ (ячейка пока не важна )
и так же со всеми остальными строками.

другими словами - подскажите как сделать динамичное создание новых страник книги, чтобы в будущем можно было обращаться к ним по имени
с Уважением и надеждой на помощь
ShamanK вне форума Ответить с цитированием
Старый 30.10.2011, 16:13   #2
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию

написал модуль создания нового листа:

PHP код:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim line As Integerstlb As Integersym As String_
    sht 
As WorksheetAs Integer

line 
Target.Rows(1).Row
stlb 
Target.Column

    
If Target.Column 2 Then
    
        sym 
Cells(linestlb)
          
        
Sheets.Count
        Sheets
.Add After:=Sheets(s)
        
Set sht Sheets(1)
        
sht.Name sym

    End 
If
    
End Sub 
новый лист создается.
остался один непонятный вопрос, как теперь обратиться к листу?
имя листа в переменной sym
ShamanK вне форума Ответить с цитированием
Старый 30.10.2011, 16:43   #3
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Код:
Sub io()

Dim x As Object
Set x = Sheets.Add ' с записью в переменную
x.[A1] = 1

'----------------------

With Sheets.Add ' без
    .[A1] = 1
End With

End Sub
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Старый 30.10.2011, 16:49   #4
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию

Цитата:
Сообщение от nerv Посмотреть сообщение
Код:
Sub io()

Dim x As Object
Set x = Sheets.Add ' с записью в переменную
x.[A1] = 1

'----------------------

With Sheets.Add ' без
    .[A1] = 1
End With

End Sub
спасибо за пример, насколько я понял в вашем примере запись в ячейки идет сразу же после создания листа.
а как обращаться к листу намного позже его создания?

то есть я сначала создал листы
и после этого вношу изменения которые должны отображаться в разных листах в зависимости от их имен
ShamanK вне форума Ответить с цитированием
Старый 30.10.2011, 16:52   #5
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Код:
Sheets("ИмяЛиста").[A1] = 1
Цитата:
а как обращаться к листу намного позже его создания?
Если в ходе выполнения 1-го макроса, то можно так, как я показывал с переменной. Так же можно использовать переменные уровня модуля, статически и глобальные. Но лучше, проще (по возможности) : )
Тишина – самый громкий звук

Последний раз редактировалось nerv; 30.10.2011 в 16:55.
nerv вне форума Ответить с цитированием
Старый 30.10.2011, 17:11   #6
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию

Цитата:
Сообщение от nerv Посмотреть сообщение
Код:
Sheets("ИмяЛиста").[A1] = 1
Если в ходе выполнения 1-го макроса, то можно так, как я показывал с переменной. Так же можно использовать переменные уровня модуля, статически и глобальные. Но лучше, проще (по возможности) : )
спасибо вам что уделяете время, однако ваш пример не совсем корректен ((
или я чего либо не догоняю
Код:
Sheets("ИмяЛиста").[A1] = 1
самый главный вопрос:
КАК в ИМЯЛИСТА ВОТКНУТЬ переменную?
Код:
sym = ИмяЛиста
Sheets(sym).[A1] = 1
так не работает, необходимы кавычки ""
ShamanK вне форума Ответить с цитированием
Старый 30.10.2011, 17:31   #7
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Зачем? Вы как присваивали значение?
sym = Cells(line, stlb)
Вот и берите его оттуда. Только имя листа, где эта Cells(line, stlb) не забудьде указать.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 30.10.2011, 18:01   #8
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Зачем? Вы как присваивали значение?
sym = Cells(line, stlb)
Вот и берите его оттуда. Только имя листа, где эта Cells(line, stlb) не забудьде указать.
спасибо все заработало, хотя странно вроде пробовал до этого и выдавало ошибку
еще раз ВСЕМ спасибо за помощь!
ShamanK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание копии листа. tae1980 Microsoft Office Excel 9 01.07.2011 14:04
Создание листа с одновременным созданием формулы на ячейку нового листа ShamanK Microsoft Office Excel 4 02.05.2010 22:00
Создание матрицы с последующим вводом переменных в Delphi7 Virtualex Помощь студентам 2 06.10.2009 15:28
создание нового листа cathie Microsoft Office Excel 2 12.12.2007 15:49