提问人:Joel Elliott 提问时间:10/20/2023 最后编辑:BigBenJoel Elliott 更新时间:10/20/2023 访问量:41
切换数据按钮 Excel VBA
Toggle Data Button Excel VBA
问:
我有一系列数据AO4:AO30。这是一个日期列表,有些单元格是空白的,但大多数单元格都已填充。我想制作一个名为“显示数据”的宏按钮。我想在单击时按钮清除数据,然后在再次单击时使用相同的数据重新填充范围。该范围有条件地设置为甘特图样式日历着色,因此数据是否实际存在很重要。我没有使用 VBA 的经验,并且一直很难尝试用谷歌搜索它。任何建议都有帮助,谢谢!
我试过让 chatgpt 为我制作代码,但没有用。我尝试了几个网站,但我并不完全知道我在寻找什么,所以这很困难。
答:
0赞
TehDrunkSailor
10/20/2023
#1
如果没有更多细节或一些你尝试过的代码,很难说这是最好的答案,但这里有一个想法:
- 显示数据按钮将查看带有日期的单元格范围,如您提到的AO4:AO30
- 如果范围内有日期,它们将存储在变量中(如果您愿意,也可以存储在另一个工作表中)
- 如果范围内没有日期,则会将其添加回该范围
- 将日期存储在变量中是“更干净”的,因为您不需要另一个工作表/位置来临时存储数据,但是如果您关闭工作表并在日期存储时保存它,则存在丢失数据的潜在风险。有一些方法可以防止这种情况,但将日期存储在 Excel 中的其他地方可能会更简单。
这是我用来测试的数据
使用全局变量存储和检索日期
Option Explicit
' This is my global variable to store the dates
Dim storageArray() As Variant
Private Sub ShowData()
' The range the dates are stored in (A1 to A4 on sheet1 in this example)
Dim dateRange As Range
Set dateRange = ThisWorkbook.Sheets("Sheet1").Range("A1:A4")
' Check if the range is empty
If WorksheetFunction.CountA(dateRange) = 0 Then
' The range is empty
' Add the dates back to the range
dateRange.Value = storageArray
Else
' The range is not empty
' Store the dates in the global variable and clear the range
storageArray = dateRange.Value
dateRange.Clear
End If
End Sub
使用其他位置存储和检索日期
Option Explicit
Private Sub StoreData()
' The range the dates are stored in (A1 to A4 on sheet1 in this example)
Dim dateRange As Range
Set dateRange = ThisWorkbook.Sheets("Sheet1").Range("A1:A4")
' The other range to temporarily store the dates
' Does not have to be on the same sheet
Dim storageRange As Range
Set storageRange = ThisWorkbook.Sheets("Sheet1").Range("C1:C4")
' Check if the range is empty
If WorksheetFunction.CountA(dateRange) = 0 Then
' The range is empty
' Add the dates back to the range
dateRange.Value = storageRange.Value
storageRange.Clear
Else
' The range is not empty
' Store the dates in the other location and clear the range
storageRange.Value = dateRange.Value
dateRange.Clear
End If
End Sub
评论
0赞
Joel Elliott
10/23/2023
这很完美,正是我想要的。@TehDrunkSailor,非常感谢您的帮助。
评论
WorksheetFunction.CountA)
.Cut
.Cut