公共变量未传递给 Worksheet_SelectionChange

问题描述 投票:0回答:1

我要先说明我充其量是 VBA 的新手。我有一个用作数据库的 Excel 2016 电子表格。我已经声明了一个公共变量

AllUpdated
来定义电子表格中的数据是否是最新的。我有一个 ActiveX 标签,我想在数据未更新时显示它,并在数据更新时消失。但是,无论用户输入的是什么,变量似乎永远都是
False
,因为标签始终可见。

我在打开工作簿时声明变量。系统会提示用户是否要刷新数据(它链接到 Access 数据库)。如果他们选择

Yes
,变量应该变为
True
,如果
No
变量变为
False
.

Public AllUpdated As Boolean

Sub Workbook_Open()
    cRefresh = MsgBox("Would you like to refresh your data?", vbYesNo, "Refresh")
    If cRefresh = vbYes Then
        Call sRefreshMaster
        AllUpdated = True
    Else
        AllUpdated = False
    End If           
End Sub

当用户在工作簿中选择一个单元格时,如果数据已过期,标签应该出现,如果数据是最新的,标签应该消失。

'- Just some code I found online on how to show and hide items in a given spot
'- on the screen each time a new cell is selected
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim MyPicture As Object
    Dim MyTop As Double
    Dim MyLeft As Double
    Dim BottomRightCell As Range
    Set MyPicture = ActiveSheet.Shapes("OODWatermark")

    If AllUpdated Then
        '- if data is up to date, hide watermark
        With MyPicture
            .Visible = False
        End With
    Else
        '- if data is out of date, display watermark
        '-----------------------------------------------------------
        '- bottom right cell
        With ActiveWindow.VisibleRange
            r = .Rows.Count
            c = .Columns.Count
            Set BottomRightCell = .Cells(r, c)
        End With
        '------------------------------------------------------------
        '- position picture
        MyTop = BottomRightCell.Top - MyPicture.Height - 5
        MyLeft = BottomRightCell.Left - MyPicture.Width - 5
        With MyPicture
            .Visible = True
            .Top = MyTop
            .Left = MyLeft
        End With
    End If
End Sub

如果我手动将标签更改为

Visible = False
,标签会消失,直到我点击一个新的单元格,然后标签会重新出现。我怎样才能解决这个问题?我想我遗漏了一些非常明显的东西,但我似乎无法在网上找到答案。

excel vba public
1个回答
1
投票

如果你想使用公共变量,最好在通用模块中声明它。当然,您也可以像以前一样在工作表或工作簿模块中声明一个公共变量,但是您必须明确引用它。

在上述情况下,您需要使用

ThisWorkbook.AllUpdated

VBA 最佳实践链接 1

VBA 最佳实践链接 2

但一如既往地思考并小心,因为作为一个例子用数据类型指示符给你的变量加上前缀......不再被认为是好的做法至少我认为这是错误的。不好的做法。

© www.soinside.com 2019 - 2024. All rights reserved.