在我的Excel工作表的上半部分,我可以通过一个菜单(单元格D9)输入两个关键字。下面我可以输入一个日期(单元格D19)。
在Excel的下半部分是按两个关键字拆分的12个月的多个列表。关键字1和2有多个相同的列表。
我现在想发生的是,当我选择一个关键字,其他关键字的列表是隐藏的。此外,根据我输入的日期也在列表中的月份是之前输入的日期隐藏。
ChatGPT给了我几乎可以做到这一点的代码。唯一的问题是,当我输入某个日期,然后输入一个早于原始日期的日期时,工作表不会刷新。
有人知道怎么修吗?
这是我的代码
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iCell As Range
Dim ws As Worksheet
Dim dateToCompare As Date
Dim cell As Range
Set ws = ThisWorkbook.Sheets("Eingabe") ' Change "Eingabe" to your sheet name
Set iCell = Intersect(Range("D9"), Target)
' Handle "Strom" and "Gas" functionality
If Not iCell Is Nothing Then
If iCell.Value = "Strom" Then
' Adjust these ranges to match your data
ws.Rows("23:61").Hidden = False
ws.Rows("62:100").Hidden = True
ElseIf iCell.Value = "Gas" Then
' Adjust these ranges to match your data
ws.Rows("23:61").Hidden = True
ws.Rows("62:100").Hidden = False
'Else ' do nothing
End If
End If
' Check for dates in column C and hide rows if the date is earlier than D19
dateToCompare = ws.Range("D19").Value
For Each cell In ws.Range("C1:C" & ws.Cells(ws.Rows.Count, "C").End(xlUp).Row)
If Not cell.EntireRow.Hidden Then ' Check if the row is not already hidden
If IsDate(cell.Value) And cell.Value < dateToCompare Then
cell.EntireRow.Hidden = True
Else
cell.EntireRow.Hidden = False
End If
End If
Next cell
End Sub
字符串
1条答案
按热度按时间aemubtdh1#
我想你是在做选择,然后每次都运行宏,对吗?你不会把它设置成自动运行吧?
如果是这种情况..最简单的解决方案可能是制作第二个宏来将页面“重置”回默认值。(虽然现在我正在写这篇文章,但我认为将其添加到当前页面的开头会更容易-但两个单独的宏的逻辑可能会使逻辑更容易理解-至少对我来说!:-)
在“非技术术语”(我知道你是新来的),我建议的是..
在您的特定示例中,我认为(可能缺少一些东西),但唯一需要“重置”的是列是否隐藏。
如果你简单地加上:
第一个月
就在你当前的注解/行之前:
' Handle "Strom" and "Gas" functionality
个你应该都准备好了!