Как узнать имя программно создаваемого нового листа?

Программирование на Visual Basic for Applications
Аэроплан
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 22.10.2003 (Ср) 12:06

Как узнать имя программно создаваемого нового листа?

Сообщение Аэроплан » 23.10.2003 (Чт) 13:59

Макрос создает новый лист...
Неоднократно все время пока файл открыт...
Имена создаваемых файлов меняются Лист1, Лист2...
Как узнать его имя?


...
Я знаю только точное его положение... Он всегда третий слева...

Tony
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2002 (Сб) 14:36
Откуда: Russia.EKB

Сообщение Tony » 23.10.2003 (Чт) 14:29

Ну в тот момент когда он создает этот лист как првило становится активным....
Код: Выделить всё
ИмяЛиста=ActiveSheet.Name

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

Аэроплан
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 22.10.2003 (Ср) 12:06

Но ведь это совершенно не по взрослому ;-)

Сообщение Аэроплан » 23.10.2003 (Чт) 14:51

А как же тогда пользоваться
Код: Выделить всё
Workbook_NewSheet(ByVal Sh As Object)

Ведь это, насколько я понимаю, как раз и есть инструмент для выхватывания "листовых новообразований" в файле...
Я вот только не знаю, как изменить имя листа...

Код типа Sh.Name = "имя_листа" не работает и вообще при компиляции он говорит, что Sh.Name содержит в себе имя ВСЕГО документа, т.е. Имя_файла.xls.

Вот такая петрушка...

Tony
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2002 (Сб) 14:36
Откуда: Russia.EKB

Сообщение Tony » 23.10.2003 (Чт) 14:55

А почему не создавать книгу таким образом?
Код: Выделить всё
ActiveWorkbook.Worksheets.Add
__________________
счастье в секундах, маленьких острых... щедрое к детям и скупое для взрослых...

Аэроплан
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 22.10.2003 (Ср) 12:06

Сообщение Аэроплан » 23.10.2003 (Чт) 15:54

Да нет же... Не имеет значения, каким образом создается ЛИСТ...
Просто эта процедура как-то реагирует и что-то возвращает при создании нового листа.. Т.е. она точно реагирует и отрабатывается сразу при появлении нового листа... Однако она не возвращает ИМЯ нового созданного листа... Точнее я незнаю как его оттуда выдрать... Вот...
Код: Выделить всё
Sub Workbook_NewSheet(ByVal Sh As Object)

' тут чтото я незнаю'   

    Sh.Name = Date
    Sheets(newSheetName).Select
    Sheets(newSheetName).Move After:=Sheets(3)
    Sheets("Хронология").Select
    Range("A1:K3").Select
    Selection.Copy

    Sheets(newSheetName).Select
    ActiveSheet.Paste
    Sheets("Хронология").Application.CutCopyMode = False


End Sub

Так примерно я наваял... А вот Sh.Name не работает...
Точнее работает, но не так... При компиляции выделенный Name возвращает имя ВСЕГО файла Имя_файла.xls и на этом вылетает... в ошибку...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 23.10.2003 (Чт) 16:07

Что то ты мудришь по ходу.

У меня все работает на ура. И с выводом имени листа и с его изменением. Версия офиса какая? Сервиспаки?

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 23.10.2003 (Чт) 16:41

Аэроплан писал(а):Я знаю только точное его положение... Он всегда третий слева...


Если знаешь расположение то так, для активной книги:

namel = sheets(3).name

Аэроплан
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 22.10.2003 (Ср) 12:06

Извиняюсь...

Сообщение Аэроплан » 23.10.2003 (Чт) 17:11

:oops:
Я извиняюсь... Действительно перемудрил... Код этот работает...
блин, я его собрал, и стал жаловаться на судьбу, а проверить еще не успел.. Проблема в другом...
Совсем в другом...

Если в один день создается несколько листов, то необходимо из
Код: Выделить всё
    newSheetName = Date

сделать
Код: Выделить всё
    newSheetName = Date + Time

Однако это не работает по причине запрета использования двоеточий (чч:мм:сс) в именах листов. Я тут спешу, короче, сроки поджимают, вот и получается котовасия - проблему решил, тут же перескочил на другую, а решение предыдущей еще не осознал...
Я же не программист ВБ, я программист промышленный - там все проще...


Огромное спасибо за помощь и внимание...

Буду теперь из времени выдергивать двоеточия и менять их на "_"...
Снова в поиск...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 23.10.2003 (Чт) 17:17

Советую воспользоваться таким водом:

Код: Выделить всё
newSheetName  = replace(cstr(date+time),":","_",,,vbtextcompare)

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 23.10.2003 (Чт) 17:29

там функция есть говорил RayShade но я ее не знаю, поэтому используй мой программный код преобразования:

S = ''20:10:3''
s1 =""
for i=1 to len(s)
if mid(s,i,1) <>":" then
s1=s1+mid(s,i,1)
else
s1=s1+" "
end if
next i

в s1 символ : замениться на пробел

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 23.10.2003 (Чт) 18:07

....... без комментариев :)

На самом деле код Vitaly1 можно модифицировать избавив себя от необходимости заводить лишнюю строковую переменную (только правда в случае, когда искомая подстрока и подстрока замены одинаковы в длине):

Код: Выделить всё
s = ''20:10:3''
for i=1 to len(s)
if mid(s,i,1) = ":" then mid(s,i,1)=" "
next i


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

    TopList