我将前言,我是一个新手在最好的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
,标签将消失,直到我单击新单元格,然后标签将重新出现。我该怎么解决这个问题?我想我错过了一些非常明显的东西,但我似乎在网上找不到答案。
1条答案
按热度按时间ubbxdtey1#
如果你想使用一个公共变量,最好在一个通用模块中声明。当然,你也可以像以前一样,在工作表或工作簿模块中声明一个公共变量,但是你必须显式地引用它。
在上面的例子中,你需要使用
ThisWorkbook.AllUpdated
VBA Best Practise Link 1
VBA Best Practise Link 2
但是,像往常一样,要小心,因为作为一个例子,* 用数据类型指示符作为变量的前缀...* 不再被认为是一个好的做法,至少我认为这是错误的。糟糕的做法。