gpt4 book ai didi

vba - 在 Workbook_open 上创建和分配变量,将其传递给 Worksheet_change

转载 作者:行者123 更新时间:2023-12-04 21:08:11 25 4
gpt4 key购买 nike

所以我有一个 Workbook_open子创建 Long打开工作簿时的变量:

Private Sub Workbook_open()
MsgBox ("Workbook opened")

Dim i As Long
i = 68
End Sub

我将如何通过 i值为 Worksheet_change特定工作表的子?

最佳答案

Dim i在程序范围内使 i局部变量;它只能从它声明的过程中访问。

传递的想法i另一个程序是非常合理的:这意味着您打算尽可能地保持变量范围,这是一件非常非常好的事情。

但在这种情况下,它太紧了,因为事件处理程序的参数是由事件源提供的:您需要将该局部变量“提升”一个范围级别。

下一个最严格的范围 级别是模块范围。

您可以使用 Dim模块级别的关键字,但为了一致性起见,我建议使用关键字 Private反而。所以在同一个模块 ,声明你的模块级变量:

Option Explicit
Private i As Long

Private Sub Workbook_open()
MsgBox "Workbook opened"
i = 68
End Sub

如果你想在这个模块之外公开那个变量的值,你可以为它公开一个访问器:
Option Explicit
Private i As Long

Private Sub Workbook_open()
MsgBox "Workbook opened"
i = 68
End Sub

Public Property Get MyValue() As Long
'invoked when MyValue is on the right-hand side expression of an assignment,
'e.g. foo = ThisWorkbook.MyValue
MyValue = i
End Property

现在 Sheet1模块的 Worksheet_Change处理程序可以 阅读 它:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox ThisWorkbook.MyValue
End sub

但是不能 给它,因为该属性是“仅获取”的。如果每个地方的每个人都需要能够读/写它,那么您不妨将它设为 global variable ,或为其公开一个突变体:
Option Explicit
Private i As Long

Private Sub Workbook_open()
MsgBox "Workbook opened"
i = 68
End Sub

Public Property Get MyValue() As Long
'invoked when MyValue is on the right-hand side expression of an assignment,
'e.g. foo = ThisWorkbook.MyValue
MyValue = i
End Property

Public Property Let MyValue(ByVal value As Long)
'invoked when MyValue is on the left-hand side of an assignment,
'e.g. ThisWorkbook.MyValue = 42; the 'value' parameter is the result of the RHS expression
i = value
End Property

关于vba - 在 Workbook_open 上创建和分配变量,将其传递给 Worksheet_change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51898947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com