了解有很多與此相關的帖子,但我仍然找不到解決方案。
有一種特殊情況,即關閉 Excel 自動計算(出于其他 Excel 加載項的性能目的)。但是,我確實放置了一個按鈕來重新計算作業簿。
我有兩個下拉框可以更改 F38 中的單元格值 F38 中的此單元格值將依次在特定行中設定值“X”或“”。需要的是當F38中的單元格值發生變化時,需要隱藏帶有“X”的列中的單元格。
單擊按鈕重新計算作業簿后,“X”會被填充,但是,宏不起作用。
這是代碼
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("F38"), Range(Target.Address)) Is Nothing Then
Dim c As Range
For Each c In Range("H27:EU27").Cells
If c.Value = "X" Then
c.EntireColumn.Hidden = True
Else
c.EntireColumn.Hidden = False
End If
Next c
End If
End Sub
請告知這里做錯了什么。目前當F38中的單元格值改變時,沒有反應。
此代碼塊放置在作業表更改中。
uj5u.com熱心網友回復:
當用戶或外部鏈接更改作業表上的單元格時,將觸發 Worksheet_Change 事件。當在串列物件的鏈接單元格中設定值時,它不會觸發。始終值得檢查檔案以準確查找事件何時觸發:https : //docs.microsoft.com/en-us/office/vba/api/excel.worksheet.change
此外,如果沒有要計算的更改,即使單元格已更新,Worksheet_Calculate 事件也可能不會觸發。
您可以將代碼與按鈕一起放入以重新計算作業表,盡管這可能會導致列隱藏代碼比您想要的更頻繁地觸發。
另一種選擇是將它直接放在保管箱上,在用戶更改保管箱中的值后觸發:
- 如果它是表單控制元件保管箱,請將代碼放在獨立子中,然后右鍵單擊保管箱以分配宏。
- 如果是ActiveX Control dropbox,右擊dropbox查看代碼,然后把代碼放到DropBox_Change事件中
uj5u.com熱心網友回復:
感謝你的及時回復。
以前我有這個代碼(我已經洗掉了大部分 EntireColumn.hidden 陳述句,因為它們太長,以及大多數 case 陳述句)。因為我添加了更多的 case 陳述句并且我有太多的列,所以這種手動方式是不可行的,運行它會導致錯誤,說程式太大。因此,我正在嘗試使用“X”標記需要隱藏的列的解決方案。
知道為什么這段代碼有效(如果它不是太大)但我在原始問題中發布的那個沒有?
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Activate
If Not Application.Intersect(Range("F38"), Range(Target.Address)) Is Nothing Then
Select Case Target.Value
Case Is = "XXX":
Columns("H").EntireColumn.Hidden = False
Columns("I").EntireColumn.Hidden = False
Columns("J").EntireColumn.Hidden = True
Case Is = "YYY":
Columns("H").EntireColumn.Hidden = False
Columns("I").EntireColumn.Hidden = True
Columns("J").EntireColumn.Hidden = False
End Select
End If
End Sub
我接下來試試:
- 更改為 worksheet.calculate 事件
- 將跟蹤單元格更改從 F38 更改為單元格 F38 計算的單元格范圍(用 X 填充的單元格)
uj5u.com熱心網友回復:
Worksheet_SelectionChange 作品:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
Dim c As Range
For Each c In Range("H27:EU27").Cells
If c.Value = "X" Then
c.EntireColumn.Hidden = True
Else
c.EntireColumn.Hidden = False
End If
Next c
Application.EnableEvents = True
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/380740.html
