У меня есть два файла Excel: patcher.xlsm и file.xlsm .На file.xlsm есть кнопка, которая при щелчке выполняет процедуру на листе 1 с окном сообщения: Магическое число: 5 .
СейчасУ меня есть patcher.xlsm , который повторно импортирует пропатченный Лист 1 и Стандартный модуль с глобальной переменной и запускает макрос для file.xlsm , чтобы установить это число в7. Ожидаемый результат таков, что пользователи, нажимающие на file.xlsm , теперь увидят Магическое число: 7 .
По какой-то причине, всякий раз, когда я выполняю patcher.xlsm , магическое число всегда сбрасывается в 0, как будто память очищается или проект сбрасывается.
Есть ли способ назначить глобальную переменную из другой книги?
В прошлом я рассматривал несколько потоков stackoverflow, например, изменяя область действия переменной, private, public, global и т. Д., Активируя книгу, просматривая скрытое пространство имен Excel на данный момент.
Sub Proc()
MsgBox "The magic number is: 5"
End Sub
Лист1 в файле .xlsm
Call CopyModule("patcher_b_progress_bar.xlsm", "file_b.xlsm", "Sheet1", True)
Call CopyModule("patcher_b_progress_bar.xlsm", "file_b.xlsm", "GlobalModule", True)
Application.Run ("'file_b.xlsm'!GlobalModule.setDefaultMagicNumber")
patcher.xlsm "исправление" листа 1 и установка магического числа с помощью модуля
CopyModule
' export "patched GlobalModule" from patcher.xlsm as temp.bas
' remove GlobalModule from file.xlsm
' re-import "patched GlobalModule" to file.xlsm
(too lengthy to post here, referenced from http://www.cpearson.com/excel/vbe.aspx)
CopyModule of patcher.xlsm
Option Explicit
Private MAGIC_NUMBER As Integer
Public Function getMagicNumber() As Integer
getMagicNumber = MAGIC_NUMBER
End Function
Public Function setDefaultMagicNumber() As Integer
MAGIC_NUMBER = 7
setDefaultMagicNumber= getMagicNumber()
End Function
GlobalModule of patcher.xlsm
Sub Proc()
If GlobalModule.getMagicNumber= 7 Then
MsgBox "Magic number is correct: " & GlobalModule.getMagicNumber
Else
MsgBox "Magic number is wrong: " & GlobalModule.getMagicNumber
End If
End Sub
Sheet1 of patcher.xlsm (перезаписывается в file.xlsm)
РЕДАКТИРОВАТЬ: Я изменил проблему.Похоже, что переменная MAGIC_NUMBER повторно инициализируется в «0», хотя строка «GlobalModule.setDefaultMagicNumber» выполнена успешно.