Я знаю, что вы поняли это, возможно, после большого разрыва волос и кофе, но я хотел:
- Дайте вам более подробную информацию о том, почему это
- Предоставить вам способ, которым вы могли бы использовать
имя вашего листа, чтобы получить то, что вы
хочу.
Прежде всего, имя нужной вам таблицы не совпадает с именем модуля кода. Итак, в вашем VBE вы видите, что имя модуля кода - «Sheet1», но если оно может иметь другое свойство из Name
, которое отличается, например, « MySheet1"(или это также может быть то же самое).
Чтобы получить его по имени, вам нужно будет выполнить несколько циклов, изменить настройки безопасности и т. Д. Если это то, что вам нужно (это хорошо работает в небольших средах из-за проблем с настройками безопасности), здесь вы привести пример:
- Измените настройки безопасности на
доверять программному доступу к VBA
Проекты. В Excel 2007 перейдите в Orb | Параметры Excel | Трастовый центр | Настройки Трастового Центра | макрос
Настройки, а затем включить «Доверие»
доступ к модели проекта VBA "
Создание рабочей книги с одним
Рабочий лист. Переименуйте его в « MySheet1 ».
Откройте VBE (Alt + F11) и в
« Sheet1 (MySheet1) » создать подпункт
рутина, назовите это TimesTen
и в
код просто поставить Debug.Print 10 *
10
. Как это:
Sub TimesTen()
Debug.Print 10 * 10
End Sub
Сохранить файл как макрос
документ и назвать его
" MacroXSLX.xlsm ". Оставьте это открытым.
Откройте новый документ Excel, перейдите
чтобы это VBE и в новом макросе
где угодно, создайте подпункт под названием
Test
. В теле этого кода,
положи это:
.
Sub test()
Dim SheetName As String
SheetName = "MySheet1"
Dim wb As Workbook
Set wb = Workbooks("MacroXSLX.xlsm")
For Each VBComp In wb.VBProject.VBComponents
If VBComp.Properties.Item("Name").Value = SheetName Then
Application.Run (wb.Name & "!" & VBComp.Name & ".TimesTen")
End If
Next
End Sub
Нажмите F5 для запуска test
и вы
должен видеть 100 в Непосредственном
окно.
В # 4 вы можете видеть, что я перебираю все компоненты (Модули, Классы и т. Д.), Ища тот, у которого есть свойство Name
со значением MySheet1 . Получив это, я могу получить имя этого компонента, которое в данном случае равно Sheet1 , и использовать его для создания моей строки, которая будет запускать макрос листа в MacroXSLX.xlsm, Код можно очистить дальше, чтобы выйти из оператора For, когда вы нашли то, что хотите, и т. Д.
Как упомянуто выше, единственным реальным недостатком этого является настройка параметров безопасности и обеспечение программного доступа к VBAProject - хорошо на одном-десяти компьютерах, но может быть хлопотно, если вам нужно обеспечить больше, чем это всегда установлены правильно.