切换数据按钮 Excel VBA

Toggle Data Button Excel VBA

提问人:Joel Elliott 提问时间:10/20/2023 最后编辑:BigBenJoel Elliott 更新时间:10/20/2023 访问量:41

问:

我有一系列数据AO4:AO30。这是一个日期列表,有些单元格是空白的,但大多数单元格都已填充。我想制作一个名为“显示数据”的宏按钮。我想在单击时按钮清除数据,然后在再次单击时使用相同的数据重新填充范围。该范围有条件地设置为甘特图样式日历着色,因此数据是否实际存在很重要。我没有使用 VBA 的经验,并且一直很难尝试用谷歌搜索它。任何建议都有帮助,谢谢!

我试过让 chatgpt 为我制作代码,但没有用。我尝试了几个网站,但我并不完全知道我在寻找什么,所以这很困难。

Excel VBA 按钮 切换

评论

0赞 BigBen 10/20/2023
一般思路:查看范围是否为空(例如,使用 .如果没有,则将其隐藏到工作表中。如果为空,则从隐藏工作表到原始工作表的数据。WorksheetFunction.CountA).Cut.Cut

答:

0赞 TehDrunkSailor 10/20/2023 #1

如果没有更多细节或一些你尝试过的代码,很难说这是最好的答案,但这里有一个想法:

  • 显示数据按钮将查看带有日期的单元格范围,如您提到的AO4:AO30
  • 如果范围内有日期,它们将存储在变量中(如果您愿意,也可以存储在另一个工作表中)
  • 如果范围内没有日期,则会将其添加回该范围
  • 将日期存储在变量中是“更干净”的,因为您不需要另一个工作表/位置来临时存储数据,但是如果您关闭工作表并在日期存储时保存它,则存在丢失数据的潜在风险。有一些方法可以防止这种情况,但将日期存储在 Excel 中的其他地方可能会更简单。

这是我用来测试的数据

enter image description here

使用全局变量存储和检索日期

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,非常感谢您的帮助。