Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba excel добавить лист с именем

Создание и именование рабочего листа в Excel VBA

У меня есть очень простой код, который добавляет новый лист после текущих листов в документ Excel, а затем меняет его имя на имя, введенное в текстовое поле в форме пользователя. Хорошо работает с новой книгой, однако в книге, содержащей несколько существующих листов, он создает новый лист, но не переименовывает его.

Это происходит только при первом запуске этого кода, в следующий раз он будет работать нормально. Еще более странным является то, что если вы откроете редактор VBA, чтобы попытаться отладить его, он также будет работать нормально. Это, очевидно, делает поиск ошибки довольно трудно.

Код, который я использую, находится здесь:

Все очень просто. Мне интересно, если эта проблема заключается в том, что он пытается переименовать лист, прежде чем он будет правильно создан? Есть ли лучший способ написать этот код?

Update: я начал отлаживать это с помощью msgboxes, так как открытие отладчика останавливает проблему, и кажется, что он просто перестает обрабатывать код на полпути:

3 Ответа

Вам не нужно знать, где он находится или как его зовут, вы просто называете его WS.
Если вы все еще хотите сделать это «old fashioned» способом, попробуйте это:

Вы используете обработчик ошибок? Если вы игнорируете ошибки и пытаетесь назвать лист так же, как существующий лист или имя с недопустимыми символами, это может быть просто пропуск этой строки. Смотрите функцию CleanSheetName здесь

для списка недопустимых символов,которые вы можете проверить.

Обновление

Другие вещи, чтобы попробовать: полностью квалифицированные ссылки, бросание в Doevents, очистка кода. Этот код квалифицирует вашу ссылку на листы до ThisWorkbook (вы можете изменить ее на ActiveWorkbook, если это подходит). Он также добавляет тысячу DoEvents (глупый перебор, но если что — то займет некоторое время, чтобы сделать это, это позволит ему-Вам может понадобиться только один DoEvents, если это действительно что-то исправит).

Наконец, всякий раз, когда у меня возникает тупая проблема VBA, которая просто не имеет смысла, я использую CodeCleaner Роба Бови. Это надстройка, которая экспортирует все ваши модули в текстовые файлы, а затем повторно импортирует их. Вы можете сделать это и вручную. Этот процесс очищает любой поврежденный p-код, который висит вокруг.

Вы фиксируете ячейку перед нажатием кнопки (нажатие Enter)? Содержимое ячейки должно быть сохранено до того, как ее можно будет использовать для присвоения имени листу.

Лучший способ сделать это-открыть диалоговое окно и получить имя, которое вы хотите использовать.

Похожие вопросы:

Я пытаюсь использовать событие изменения рабочего листа в Excel VBA, но оно, похоже, не работает. Из того, что я понял, достаточно просто определить функцию обработки Worksheet_Change, как я это.

Читать еще:  Файл xls не открывается в excel

Я пытаюсь автоформировать, как отображается нижняя часть страницы Excel, чтобы автоматически просмотреть все имя листа. По умолчанию половина имени листа обрезается, так как горизонтальная полоса.

У меня есть набор пользовательских функций vba, которые находятся в модуле excel, а затем вызываются из электронной таблицы excel. на данный момент все работает нормально. Меня попросили.

У меня есть рабочий лист с несколькими событиями изменения рабочего листа. К сожалению, я получаю некоторые ошибки памяти из-за них. Мне было интересно, может ли кто-нибудь посмотреть на этот.

Я пытаюсь улучшить производительность проекта C# Winform. Ранее создание файла Excel выполнялось в течение 100000 МС (с использованием Office.Interop.Excel). Используя ClosedXml это около 5000 мс.

Встроенные функции Excel имеют стиль UPPERCASE символов. Я немного OCD и как мои пользовательские функции рабочего листа, чтобы быть UPPERCASE тоже, как и встроенные функции Excel. Однако Excel 2013.

В Microsoft Excel я написал несколько кодов для события изменения рабочего листа. Теперь я хочу создать sub и поместить его в файл personal.xlsb , чтобы всякий раз, когда пользователь запускает его.

Эй, ребята, у меня есть большой объем данных в файле excel прежде чем я начну использовать данные, мне нужно обрезать их все один раз но когда я использую vba для обрезки всего рабочего листа, это.

Обычно функция оценки Excel VBA является удобным способом получить результат формулы рабочего листа в VBA без необходимости помещать формулу в ячейку рабочего листа. Тем не менее, я нахожу, что если.

11.5 Коллекция Sheets и объект Worksheet , их свойства и методы

Объект Excel.Worksheet, программное создание, обнаружение, удаление листа Excel средствами VBA, свойства, методы и события объекта Excel.Worksheet

В Word ниже объекта Application и Document начинались уже объекты непосредственно для работы с текстом — Selection, Range и т.п. В Excel между объектом рабочей книги и ячейками есть еще один промежуточный объект — объект Worksheet (лист). Объекты Worksheet в книге объединены в коллекцию Sheets.

Чаще всего для ввода данных в Excel (напрямую или из базы данных) нам потребуется в первую очередь определиться с листом, на который пойдет ввод данных — либо просто выбрать его, либо вначале создать, а потом выбрать.

Процесс создания выглядит очень просто:

Dim oExcel As New Excel.Application ‘Запускаем Excel

oExcel.Visible = True ‘Делаем его видимым

Dim oWbk As Excel.Workbook

Set oWbk = oExcel.Workbooks.Add () ‘Создаем новую книгу

Dim oSheet As Excel.Worksheet

Set oSheet = oWbk.Worksheets.Add() ‘ Создаем новый лист

oSheet.Name = «Новый лист» ‘Присваиваем ему имя «Новый лист»

Метод Add() для коллекции Worksheets принимает несколько необязательных параметров, главная задача которых — определить, между какими существующими листами будет вставлен новый лист. Если ничего не указывать, то новый лист будет помещен самым первым.

Читать еще:  Создание файла excel vb net

Часто встречается и другая задача — просто найти нужный лист среди листов книги, например, если мы открыли существующую книгу. Сделать это очень просто, поскольку коллекция Worksheets умеет работать с именами листов. Ниже приведен пример, в котором мы так же запускаем Excel и создаем новую книгу, но при этом находим лист с именем «Лист1» и переименовываем его в «Новый лист»:

Dim oExcel As New Excel.Application ‘Запускаем Excel

oExcel.Visible = True ‘Делаем его видимым

Dim oWbk As Excel.Workbook

Set oWbk = oExcel.Workbooks.Add() ‘Создаем новую книгу

Dim oSheet As Excel.Worksheet

Set oSheet = oWbk.Worksheets.Item(«Лист 1») ‘ Находим Лист1

oSheet.Name = «Новый лист» ‘Присваиваем ему имя «Новый лист»

Обратите внимание, что в английской версии Excel этот код, скорее всего, не пройдет, поскольку листы там по умолчанию называются «Sheet1», «Sheet2» и т.п. Если вы в вашем коде используете имена листов по умолчанию и при этом вашей программе придется работать на компьютерах с разноязычными версиями Excel, обязательно предусмотрите дополнительные проверки или просто используйте номера листов вместо их имен.

У коллекции Sheets, помимо привычных нам свойств и методов ( Count, Item, Add(), Delete()) и свойств и методов, которые удобнее применять для объекта Worksheet ( Visible(), Copy(), Move(), PrintOut(), PrintPreview(), Select()) — поскольку все равно указывать конкретный лист — есть и один специфический метод FillAcrossSheets() — скопировать объект диапазона Range (варианты: полностью, только содержимое, только оформление) во все листы данной книги.

У объекта Worksheet — множество важных свойств и методов:

  • Cells — одно из наиболее часто используемых свойств объекта Worksheet. Работает точно так же, как и рассмотренное выше одноименное свойство объекта Application — за исключением того, что вам больше не нужно ограничиваться только активным листом. Аналогично работают свойства Columns и Rows.
  • EnableCalculation — возможность отключить автоматический пересчет значений ячеек в книге.
  • EnableSelection — возможность запретить выделять на листе: все, ничего не запрещать, или разрешить выделять только незаблокированные ячейки.
  • Next — возможность получить ссылку на следующий лист в книге. Previous — то же самое для предыдущего листа.
  • PageSetup — как и в Word, возможность получить объект PageSetup, при помощи которого можно настроить те же параметры, что и через меню Файл ->Параметры страницы.
  • свойство Protection позволяет получить объект Protection, при помощи которого можно запретить пользователю вносить изменения в лист Excel. Настройке параметров защиты также служат и другие свойства, названия которых начинаются на Protection.
  • QueryTables — исключительно важное свойство. Оно возвращает коллекцию QueryTables — набор объектов QueryTable, которые, в свою очередь, представляют данные, полученные из внешних источников (как правило, из баз данных).
  • Range — самое важное свойство объекта Worksheet. Возвращает объект Range (диапазон ячеек), который в объектной модели Excel занимает примерно такое же место, что и одноименный объект в объектной модели Word. Этот объект будет рассматриваться ниже.
  • Type — возможность определить тип данного листа. Обычно используются два типа: xlWorksheet (обычный лист) и xlChart (диаграмма).
  • UsedRange — возвращает объект Range, представляющий собой прямоугольную область, включающую все непустые ячейки. Удобно для целей копирования или форматирования.
  • Visible — возможность спрятать лист с глаз пользователя (например, если он используется для служебных целей).
Читать еще:  Как провести черту в excel

Некоторые важные методы объекта Worksheet:

  • методы Activate() , Calculate(), Copy(), Paste(), Delete(), Move(), Evaluate(), Select(), SaveAs(), PrintOut(), PrintPreview(), Protect(), Unprotect()нам уже знакомы . Отличие заключается только в том, что теперь эти методы могут применяться для выбранного вами листа.
  • метод PivotTables() возвращает коллекцию очень интересных объектов PivotTable (сводная таблица), которые будут рассматриваться ниже;
  • метод Scenarios() возвращает коллекцию Scenarios, состоящую из объектов Scenario (сценарии). Сценарии — это именованные наборы вводных данных, которые можно использовать для проверки различных сценариев (разные суммы продаж, уровни налогов, расходов и т.п.)
  • SetBackgroundPicture() — возможность назначить листу фоновое изображение (естественно, желательно, чтобы оно было полупрозрачное — «водяной знак», иначе на его фоне будет трудно читать текст в ячейках).
  • ShowAllData() — показать все скрытые и отфильтрованные данные на листе.

Самое важное событие объекта Worksheet — это, конечно, Change. Существует множество практических задач, когда изменение пользователем значения ячейки должно приводить к изменению значения в ячейке другого листа/рабочей книги Excel или даже в базе данных. Другая ситуация, в которой используется это события — сложная проверка вводимого пользователем значения (например, опять-таки через обращение к базе данных). Эта событийная процедура работает со специальным параметром Target — то есть объектом Range, представляющим изменившуюся ячейку. При помощи свойств и методов объекта Range вы можете получить информацию об изменившемся значении, столбце и строке, в котором произошло изменение и т.п.

У объекта Worksheet есть еще два очень удобных события (их сильно не хватает объекту Document в Word). Это — события BeforeRightClick() и BeforeDoubleClick(). Как понятно из названия, первое событие позволяет перехватывать щелчок правой кнопкой мыши по любому месту в листе, а второе — двойной щелчок мышью. При помощи этих событий вы можете назначить свою реакцию (открытие контекстных меню, выдачу предупреждающих сообщений, переход в другой режим работы и т.п.) на действия пользователя.

Ссылка на основную публикацию
Adblock
detector