Страницы: 1
RSS
Кодовое имя листа на русском, как сделать на английском?
 
Здравствуйте! Возникла вот такая проблема: установлен Excel 2019, при создании листов кодовое имя по умолчанию прописывается на русском, как сделать так, что бы интерфейс Excel остался русским, при этом кодовые имена листов по умолчанию формировались английскими.
Сейчас установлены настройки (см. скриншот). Если изменить язык во втором поле, кодовое имя листа все равно остается русским, а если изменить язык в первом поле, то весь интерфейс становится английским.
Помогите разобраться пожалуйста.
 
Как вариант:
Создайте файл Excel с нужным количеством листов, параметрами страницы, и англ. кодовыми именами листов,    
и сохраните его КАК ШАБЛОН (выберите тип файла в диалоговом окне сохранения) под именем  Книга.xlt
в папку C:\Program Files\Microsoft Office\Office14\XLSTART    
Возможно, понадобится использовать имя Book.xlt    
И всё - новые книги будут создаваться на основе этого файла (и в них будут нужные вам кодовые имена)
 
Создать новую книгу, переименовать в ней листы, нарисовать рожицу на листе ). Сохранить книгу по пути
C:\Users\имя_пользователя\AppData\Roaming\Microsoft\Excel\XLST­ART
 
Anna_Vin,  Вопрос не как, а зачем?
По вопросам из тем форума, личку не читаю.
 
За совет спасибо!
Подожду, может ещё что-то подскажут.

Я знаю, что это можно сделать (на работе сделано, что кодовые имена английские, а интерефейс русский, при этом специально никто никаких шаблонов книг не создавал, так было по умолчанию). Но как это сделать теперь мне на домашнем компьютере - вот это вопрос.

Цитата
написал:  Anna_Vin ,  Вопрос не как, а зачем?
Возникла проблема при написании макроса, а именно: если в кодовом имени русские буквы, его не получается ни скопировать, ни удалить. VBA просто сходит с ума и не видит ни одного его свойства. Чтобы с ним хоть что-то можно было сделать, его надо переименовать вручную.
 
Цитата
Anna_Vin написал:
Возникла проблема при написании макроса, а именно: если в кодовом имени русские буквы, его не получается ни скопировать, ни удалить.
Странно... У меня и макросы на кириллице работают, и страницы на ней же...  И никогда трабл не возникало...
Изменено: tutochkin - 11.12.2021 23:08:43
 
tutochkin, МАС не согласен :)
Кстати, всегда переименовываю на латиницу (не МАС )), если имя используется в макросе
 
Цитата
Создать новую книгу, переименовать в ней листы, нарисовать рожицу на листе ). Сохранить книгу по путиC:\Users\имя_пользователя\AppData\Roaming\Microsoft\Excel\XLST­­ART
Попробовали так, но получается, что если я вручную переименую 10 листов (к примеру), сохраню в эту папку, то они будут "Sheet", а если после этого добавить одиннадцатый, и т.д. лист, то они снова "Лист" (русские), все новые листы за пределами тех, которые я переименовала сама, опять по умолчанию русские.

А как сделать, так, что бы ВСЕ новые листы (сколько бы их не было) по умолчанию становились английскими "Sheet"?
 
У меня не MAC, установлен W10
 
Цитата
vikttur написал:
tutochkin , МАС не согласен
Я очень уважаю этого уважаемого господина, и его мнение (0_o). Хоть лично и не знаком.
 
Яблочный... Ай, который Phone... MAC OS... Это одна семья )
 
Цитата
Anna_Vin написал:
а именно: если в кодовом имени русские буквы, его не получается ни скопировать, ни удалить. VBA просто сходит с ума и не видит ни одного его свойства. Чтобы с ним хоть что-то можно было сделать, его надо переименовать вручную.
Просто нужно не использовать CodeName, особенно когда лист не фиксирован.
По поводу
Цитата
Anna_Vin написал:
на работе сделано, что кодовые имена английские, а интерефейс русский,
Вы уверены что при создании листов создаются с именами отличными от языка интерфейса?
По вопросам из тем форума, личку не читаю.
 
Цитата
Вы уверены что при создании листов создаются с именами отличными от языка интерфейса?
Да, уверена :) Поэтому и всплыл этот вопрос. На работе создаются "Sheet", а дома "Лист", хотя интерефейс и там и там русский.

На работе если что Excel2010, дома 2019 - может в этом дело?
 
Цитата
написал:
На работе создаются "Sheet", а дома "Лист", хотя интерефейс и там и там русский
однако, если язык ОС установлен англ - в этом случае тоже могут создаваться листы в локализации для ОС.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Добрый день.  Можно решить эту задачу с помощью надстройки ниже.
Код модуля ЭтаКнига:
Код
Option Explicit

Private xlApp As ClassEventsxlApp

Private Sub Workbook_Open()
    Set xlApp = New ClassEventsxlApp
End Sub

Код модуля класса ClassEventsxlApp
Код
Option Explicit
Private WithEvents xlApp As Application

Private Sub Class_Initialize()
    Set xlApp = Application
End Sub

Private Sub xlApp_NewWorkbook(ByVal Wb As Workbook)
    Dim Sh As Worksheet
    For Each Sh In Wb.Worksheets
        Wb.VBProject.VBComponents(Sh.Name).Name = Replace(Sh.Name, "Лист", "Sheet")
        Sh.Name = Replace(Sh.Name, "Лист", "Sheet")
    Next Sh
End Sub

Private Sub xlApp_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object)
    ActiveWorkbook.VBProject.VBComponents(Sh.Name).Name = Replace(Sh.Name, "Лист", "Sheet")
    Sh.Name = Replace(Sh.Name, "Лист", "Sheet")
End Sub

Как это выглядит в редакторе VBA:

на листе:

-----
Upd:
Макрос немного улучшен, теперь не будет проблемы с "Лист1", все листы в новосозданной книге будут на английском.
-----
sokol92, CallByName Worksheets(1), "_CodeName", VbLet, "Sheet1" в цикле не хочет работать, как я ни крутил.
-----
Upd:
Цитата
sokol92 написал:
А так крутили (в стандартный модуль)...
Спасибо за подсказку, может кому пригодится, задачу решил способом попроще, и в стандартный модуль мне не удобно перебираться, так-как все в модуле класса.

P.S. Всем успех не гарантирую, но лично у меня все работает(все переименовывает).
Изменено: DANIKOLA - 13.12.2021 22:32:33 (Улучшен макрос)
 
Цитата
написал:
Добрый день.  Можно решить эту задачу с помощью надстройки ниже.
Спасибо вам за такой подробный ответ. Попробую сделать.
 
Цитата
написал:
однако, если язык ОС установлен англ - в этом случае тоже могут создаваться листы в локализации для ОС.
Проверю
 
Из личного опыта от языка системы не зависит. Сейчас система ENG и при переключении языков приложения меняется язык для Sheet CodeName. Переключать на RU нет времени.
По вопросам из тем форума, личку не читаю.
 
DANIKOLA В принципе это вариант. Отслеживание событий Application. Только автор просил на создание нового листа. Вы написали на создание новой книги. Такое событие Application тоже есть WorkbookNewSheet.
 
Евгений Смирнов, проверяли? Между NewWorkbook и WorkbookNewSheet есть небольшая разница, проверьте надстройку в работе.
Изменено: DANIKOLA - 13.12.2021 12:10:58
 
DANIKOLA, разрешение к модели данных открывать требуется???
Я не открывал , некогда.
Изменено: БМВ - 13.12.2021 12:15:42
По вопросам из тем форума, личку не читаю.
 
БМВ, думаю да. Я просто давно у себя все пооткрывал, то и не было никаких проблем.
Для тех, кто не знает о чем БМВ говорил выше.
Изменено: DANIKOLA - 13.12.2021 12:22:13
 
Можно так (для первого листа новое кодовое имя Sheet1):
Код
CallByName Worksheets(1), "_CodeName", VbLet, "Sheet1"
Доступ к объектной модели нужен (см картинку в #22).
Изменено: sokol92 - 13.12.2021 13:07:04
Владимир
 
sokol92, Приветвую, лучше вот это проверить если есть возможность.
Цитата
Anna_Vin написал:
На работе если что Excel2010, дома 2019 - может в этом дело?
Но все может быть зависит от билда или даже LP
По вопросам из тем форума, личку не читаю.
 
sokol92 Здравствуйте. Первый раз увидел функцию CallByName. Сейчас немного почитал про неё, но не могу понять почему перед CodeName знак подчеркивания стоит.  
Изменено: Евгений Смирнов - 13.12.2021 18:20:16
 
Цитата
написал:
почему перед CodeName знак подчеркивания стоит.
Свойство "_Codename" - скрытое. Его можно увидеть в Object Browser, если в его контекстном меню указать "Show hidden memders".
Функция CallByName используется потому, что VBE  "не нравятся" свойства, которые начинаются со знака подчеркивания.
Владимир
 
Цитата
DANIKOLA написал:
в цикле не хочет работать, как я ни крутил.
А так крутили (в стандартный модуль):
Код
Sub Test()
   Dim sh As Worksheet
   For Each sh In ActiveWorkbook.Worksheets
     If LCase(sh.CodeName) Like "лист*" Then
       CallByName sh, "_Codename", VbLet, Replace(sh.CodeName, "Лист", "Sheet", compare:=vbTextCompare)
       DoEvents
     End If
   Next sh
End Sub
Владимир
 
sokol92 А кто этот макрос запускать будет при добавлении листа. Все равно надо ловить событие WorkbookNewSheet  и передавать в процедуру ссылку на новый лист.
В библиотеке объектов нашел _CodeName.  Но не пойму чем отличаются  свойства  скрытые и открытые?. Зачем нужны скрытые свойства?
На этом сайте голова опухнет не успеваешь новые для меня вещи осваивать
Изменено: Евгений Смирнов - 13.12.2021 19:34:42
 

Цитата
написал:
А кто этот макрос запускать будет при добавлении листа
Это макрос для "ремонта" ранее созданных книг.

На вопросы про замыслы разработчиков Excel отвечать не могу, так как таковым не являюсь. Обычно скрывают свойства от неподготовленные пользователей (сравните: скрытые файлы Windows).  :)

Изменено: sokol92 - 13.12.2021 19:54:13
Владимир
 
sokol92 Спасибо за ответы
Страницы: 1
Наверх