Страницы: 1 2 След.
RSS
Надо ли открывать сам лист, чтобы его переименовать?
 
когда я пишу макрос например чтобы переименовать лист я в коде сначала открываю нужный лист переименовываю потом сохранив закрываю.  
Интересно а можно ли написать макрос так чтобы он переименовал этот лист не открывая его?  
 
Похожий вопрос - чтобы написать что-то в какую-нибудь ячейку какой-то книги (которая в закрытом состоянии) обязательно в коде его открывать?
 
sheets(..).name=".."
Живи и дай жить..
 
это в открытой книге. в закрытой можно, но не знаю как :)
Живи и дай жить..
 
{quote}{login=слэн}{date=14.09.2011 03:16}{thema=}{post}sheets(..).name=".."{/post}{/quote}  
 
я имел ввиду переименовать лист закрытой книги
 
Только открыть и переименовать. И не верьте, что можно получить данные из закрытой книги. Книга все равно открывается в режиме чтения(это гораздо быстрей).
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=14.09.2011 03:23}{thema=}{post}Только открыть и переименовать. И не верьте, что можно получить данные из закрытой книги. Книга все равно открывается в режиме чтения(это гораздо быстрей).{/post}{/quote}  
 
Sub Переименование_листов()  
'  
' Переименование_листов Макрос  
' Переименование_листов  
'  
' Сочетание клавиш: Ctrl+е  
'  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\408205.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\1039205.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\459205.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\459207.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\459402.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\459407.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\461205.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\461207.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\461402.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\461407.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\478205.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\478207.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\478402.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\478407.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\487205.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\487207.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\487402.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\487407.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\489205.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\489207.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\489402.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   ChDir "D:\_ОПЕР\ОПЕР"  
   Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\489407.xls"  
   ActiveSheet.Name = "asbt"  
   ActiveWorkbook.Save  
   ActiveWindow.Close  
   Application.Quit  
   End Sub
 
{quote}{login=KukLP}{date=14.09.2011 03:23}{thema=}{post}Только открыть и переименовать. И не верьте, что можно получить данные из закрытой книги. Книга все равно открывается в режиме чтения(это гораздо быстрей).{/post}{/quote}  
 
Видите макрос переименовывает 22 листов, он для этого 22 раза открывает книги и закрывает.
 
{quote}{login=KukLP}{date=14.09.2011 03:23}{thema=}{post}Только открыть и переименовать. И не верьте, что можно получить данные из закрытой книги. Книга все равно открывается в режиме чтения(это гораздо быстрей).{/post}{/quote}  
 
Меня интересует нельзя ли укоротить код, то есть допустм нету ли такой возможности - например написать в коде -    
- Имя активного листа книги такой-то равно "asbt"
 
Можно конечно покороче написать, но если книг 22, то 22 и придётся открыть-закрыть.  
Я о другом хотел спросить - не боитесь, что ActiveSheet будет другим? Или в книге только по одному листу? И никто другой лист не добавит?
 
{quote}{login=KukLP}{date=14.09.2011 03:23}{thema=}{post}Только открыть и переименовать. И не верьте, что можно получить данные из закрытой книги. Книга все равно открывается в режиме чтения(это гораздо быстрей).{/post}{/quote}  
 
То есть можно ли писать в коде вместо ОТКРЫВАЙ КНИГУ ПЕРЕИМЕНУЙ ЛИСТ ЗАКРОЙ КНИГУ  
 
А НАДО ТАК - ПРОСТО ПЕРЕИМЕНУЙ АКТИВНЫЙ ЛИСТ ТАКОЙ-ТО КНИГИ  
 
ТО ЕСТЬ НЕ ОТКРЫВАТЬ И ПЕРЕИМЕНОВАТЬ ЛИСТ
 
Можно имена книг загнать в массив, затем циклом по массиву сделать дело, сейчас кто-нить неленивый нарисует красивый короткий код.  
Но всёж скажите, какие листы переименовывать нужно - может быть всегда первые?
 
Для одной книги:  
вместо  
ChDir "D:\_ОПЕР\ОПЕР"  
Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\408205.xls"  
ActiveSheet.Name = "asbt"  
ActiveWorkbook.Save  
ActiveWindow.Close  
пишем  
Workbooks.Open "D:\_ОПЕР\ОПЕР\408205.xls"  
ActiveSheet.Name = "asbt"  
ActiveWorkbook.Close true  
Но с ActiveSheet я бы поосторожней. Вдруг там не тот лист активен.  
В соседнеий теие The Prist показывал групповое переименование листов в книгах.
Я сам - дурнее всякого примера! ...
 
{quote}{login=Hugo}{date=14.09.2011 03:32}{thema=}{post}Можно конечно покороче написать, но если книг 22, то 22 и придётся открыть-закрыть.  
Я о другом хотел спросить - не боитесь, что ActiveSheet будет другим? Или в книге только по одному листу? И никто другой лист не добавит?{/post}{/quote}  
 
в книгах будет строго по одному листу. Потому что эти книги будут результатом кое-какой программы (Человеческий фактор тут почти не присутствует)
 
Ага, вот куда Application.Quit нужно было :)  
Так это можно vbs написать. А если тупо все файлы папки нужно обработать - так вообще без проблем. И будет один файлик, который можно запускать хоть шедулером.
 
{quote}{login=KukLP}{date=14.09.2011 03:35}{thema=}{post}Для одной книги:  
вместо  
ChDir "D:\_ОПЕР\ОПЕР"  
Workbooks.Open Filename:="D:\_ОПЕР\ОПЕР\408205.xls"  
ActiveSheet.Name = "asbt"  
ActiveWorkbook.Save  
ActiveWindow.Close  
пишем  
Workbooks.Open "D:\_ОПЕР\ОПЕР\408205.xls"  
ActiveSheet.Name = "asbt"  
ActiveWorkbook.Close true  
Но с ActiveSheet я бы поосторожней. Вдруг там не тот лист активен.  
В соседнеий теие The Prist показывал групповое переименование листов в книгах.{/post}{/quote}  
 
в какой теме показывали групповое переименование листов?
 
Как я понял значит и для того чтобы переимновать лист и для того чтобы написать в ячейку какой-нибудь закрытой книги допустим слово "ПРИВЕТ", надо в коде обязательно писать примерно таким образом-да?  
 
ОТКРОЙ НУЖНУЮ КНИГУ  
СДЕЛАЙ НУЖНОЙ ДЕЛО (переименуй лист, напиши слово ПРИВЕТ, или что-то ещё)  
ЗАКРОЙ КНИГУ  
 
         ТАК-ДА?  
 
то есть нельзя просто указав расположение книги (не открывая его) сделать нужные дела-да?
 
Да. Попробуйте:  
Private Sub processFolder()  
Dim fso As Object, file As Object, wb As Workbook, fName As String  
fName = "D:\_ОПЕР\ОПЕР\"  
Set fso = CreateObject("scripting.filesystemobject")  
Set fso = fso.getfolder(fName)  
For Each file In fso.Files  
   If file.Name Like "*.xls*" Then  
       Set wb = Workbooks.Open(file)  
       wb.Worksheets(1).Name = "jhgj"  
       wb.Close True  
   End If  
Next  
End Sub
Я сам - дурнее всякого примера! ...
 
Вот, совместное творчество - этот текст сохранить как name.vbs и даблкликнуть.  
Эксель с виду и не открывается.  
 
 
fName = "D:\_ОПЕР\ОПЕР\"  
Set ExcelApp = CreateObject("Excel.Application")  
Set fso = CreateObject("scripting.filesystemobject")  
Set ffso = fso.getfolder(fName)  
 
For Each file In ffso.Files  
If UCase(FSO.GetExtensionName(file.Path)) = "XLS" then  
Set wb = ExcelApp.Workbooks.Open(file)  
wb.Worksheets(1).Name = "jhgj"  
wb.Close True  
End If  
Next
 
{quote}{login=Hugo}{date=14.09.2011 04:06}{thema=}{post}Вот, совместное творчество - этот текст сохранить как name.vbs и даблкликнуть.  
Эксель с виду и не открывается.  
 
 
fName = "D:\_ОПЕР\ОПЕР\"  
Set ExcelApp = CreateObject("Excel.Application")  
Set fso = CreateObject("scripting.filesystemobject")  
Set ffso = fso.getfolder(fName)  
 
For Each file In ffso.Files  
If UCase(FSO.GetExtensionName(file.Path)) = "XLS" then  
Set wb = ExcelApp.Workbooks.Open(file)  
wb.Worksheets(1).Name = "jhgj"  
wb.Close True  
End If  
Next{/post}{/quote}  
 
СПАСИБО попробую
 
Только... это... не на рабочий каталог запускайте - а то как переименует сейчас во всех что есть файлах...  
Ну Вы поняли - что скрипт делает.
 
{quote}{login=Hugo}{date=14.09.2011 04:28}{thema=}{post}Только... это... не на рабочий каталог запускайте - а то как переименует сейчас во всех что есть файлах...  
Ну Вы поняли - что скрипт делает.{/post}{/quote}  
 
ПОНЯЛ
 
{quote}{login=KukLP}{date=14.09.2011 03:51}{thema=}{post}Да. Попробуйте:  
Private Sub processFolder()  
Dim fso As Object, file As Object, wb As Workbook, fName As String  
fName = "D:\_ОПЕР\ОПЕР\"  
Set fso = CreateObject("scripting.filesystemobject")  
Set fso = fso.getfolder(fName)  
For Each file In fso.Files  
   If file.Name Like "*.xls*" Then  
       Set wb = Workbooks.Open(file)  
       wb.Worksheets(1).Name = "jhgj"  
       wb.Close True  
   End If  
Next  
End Sub{/post}{/quote}  
 
РАБОТАЕТ.  
 
НО МОЖНО ЛИ ДОБАВИТЬ В КОНЦЕ АППЛИКАТИОН.КУИТ?  
как его изменить ЧТОБЫ ОН ПЕРЕИМЕНОВАЛ только листы ФАЙЛов КОТОРЫЕ В НАЗВАНИИ СОДЕРЖАТ *205.xls *207.xls *402.xls *407?  
 
И ПОТОМ ВНУТРИ ПАПКИ "D:\_ОПЕР\ОПЕР\" ЕСТЬ ЕЩЁ ПАПКА "баланс" , НО ЭТО ЖЕ НЕ ПОМЕШАЕТ РАБОТЕ МАКРОСА ВЕДЬ ТАК?
 
{quote}{login=Hugo}{date=14.09.2011 04:06}{thema=}{post}Вот, совместное творчество - этот текст сохранить как name.vbs и даблкликнуть.  
Эксель с виду и не открывается.  
 
 
fName = "D:\_ОПЕР\ОПЕР\"  
Set ExcelApp = CreateObject("Excel.Application")  
Set fso = CreateObject("scripting.filesystemobject")  
Set ffso = fso.getfolder(fName)  
 
For Each file In ffso.Files  
If UCase(FSO.GetExtensionName(file.Path)) = "XLS" then  
Set wb = ExcelApp.Workbooks.Open(file)  
wb.Worksheets(1).Name = "jhgj"  
wb.Close True  
End If  
Next{/post}{/quote}  
 
РАБОТАЕТ  
 
ПЛОХО ТО, ЧТО НЕЛЬЗЯ СЛЕДИТЬ ЗА ТЕМ, КАК ИДЁТ ПРОЦЕСС, ЗАКОНЧИЛСЯ ЛИ ОН
 
У Вас что CapsLock заело ?  
или Вам нравиться все большое?
 
{quote}{login=CapsLock}{date=14.09.2011 06:47}{thema=}{post}У Вас что CapsLock заело ?  
или Вам нравиться все большое?{/post}{/quote}  
 
учту
 
БАХТИ, ещё увижу текст, набранный в верхнем регистре, - удалю тему!
 
{quote}{login=Юрий М}{date=14.09.2011 06:56}{thema=}{post}БАХТИ, ещё увижу текст, набранный в верхнем регистре, - удалю тему!{/post}{/quote}  
 
хорошо
 
За процессом в таком vbs следить нельзя (ну или сложно можно, но я не делал), но в конце вывести    
msgbox "Готово!!!"  
можете сами легко добавить.  
По поводу  *205.xls *207.xls *402.xls *407 - можно добавить, чуть позже, сейчас тестить некогда.  
Или может Сергей добавит - это всёж совместный проект, т.е. весь код его :)
 
{quote}{login=Hugo}{date=14.09.2011 07:28}{thema=}{post}За процессом в таком vbs следить нельзя (ну или сложно можно, но я не делал), но в конце вывести    
msgbox "Готово!!!"  
можете сами легко добавить.  
По поводу  *205.xls *207.xls *402.xls *407 - можно добавить, чуть позже, сейчас тестить некогда.  
Или может Сергей добавит - это всёж совместный проект, т.е. весь код его :){/post}{/quote}  
 
когда будет время помогите добавить в конце вывести msgbox "Готово!!!" пожалуйста.  
 
Но учесть *205.xls *207.xls *402.xls *407.xls - это ультра важно.
 
Да просто в блокноте допишите последней строкой  
 
msgbox "Готово!!!"  
 
Ну а если запускать код как макрос - то там можно и в статусбаре индикацию вывести, и прогрессбар добавить.  
Но разве процесс такой долгий? Пару тройку секунд можно и не "индицировать".
Страницы: 1 2 След.
Читают тему
Наверх