我要先说明我充其量是 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
,标签会消失,直到我点击一个新的单元格,然后标签会重新出现。我怎样才能解决这个问题?我想我遗漏了一些非常明显的东西,但我似乎无法在网上找到答案。
如果你想使用公共变量,最好在通用模块中声明它。当然,您也可以像以前一样在工作表或工作簿模块中声明一个公共变量,但是您必须明确引用它。
在上述情况下,您需要使用
ThisWorkbook.AllUpdated
但一如既往地思考并小心,因为作为一个例子用数据类型指示符给你的变量加上前缀......不再被认为是好的做法至少我认为这是错误的。不好的做法。