Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("M1:N1").Columns(1).Value = "ΕΜΒΑΣΜΑ" Then
Columns("U").EntireColumn.Hidden = False
Columns("V").EntireColumn.Hidden = False
Else
Columns("U").EntireColumn.Hidden = True
Columns("V").EntireColumn.Hidden = True
End If
End Sub
所以我在這里遇到了這段代碼的問題。如果 M 列中有一個名為“ΕΜΒΑΣΜΑ”的值,我想要做的是隱藏 U、V 列。
每次我讓它運行時,即使我的列中已經有值,它也會自動隱藏列。除此之外,它似乎不能實時作業,所以即使我改變任何東西,也不會發生任何事情。
有任何想法嗎?
uj5u.com熱心網友回復:
(a)如果您想檢查一整列,您需要指定整列,例如使用 Range("M:M")。
(b)您不能將包含多個單元格的 Range 與一個值進行比較。If Range("M:M").Columns(1).Value = "ΕΜΒΑΣΜΑ" Then將引發型別不匹配錯誤 (13)。這是因為包含更多該單元格的 Range 將被轉換為二維陣列,并且您無法將陣列與單個值進行比較。
檢查列是否包含特定值的一種方法是使用CountIf-function:
If WorksheetFunction.CountIf(Range("M:M"), "ΕΜΒΑΣΜΑ") > 0 Then
為了縮短您的代碼,您可以使用
Dim hideColumns As Boolean
hideColumns = (WorksheetFunction.CountIf(Range("M:M"), "ΕΜΒΑΣΜΑ") = 0)
Columns("U:V").EntireColumn.Hidden = hideColumns
更新 如果要在作業表事件以外的其他事件中使用該代碼,則應指定要在哪個作業表上作業。將以下例程放在常規模塊中:
Sub showHideColumns(ws as Worksheet)
Dim hideColumns As Boolean
hideColumns = (WorksheetFunction.CountIf(ws.Range("M:M"), "ΕΜΒΑΣΜΑ") = 0)
ws.Columns("U:V").EntireColumn.Hidden = hideColumns
End Sub
現在您所要做的就是隨時呼叫該例程并將作業表作為引數傳遞。這可能是 Workbook.Open - 事件,或按鈕或形狀的單擊事件。例如,將以下代碼放入 Workbook 模塊中:
Private Sub Workbook_Open()
showHideColumns ThisWorkbook.Sheets(1)
End Sub
uj5u.com熱心網友回復:
在快速的手上,我會這樣......也許有人可以做得更短......
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim sht As Worksheet: Set sht = ActiveSheet
Dim c As Range
With sht.Range("M1:M" & sht.Cells(sht.Rows.Count, "M").End(xlUp).Row)
Set c = .Find("XXX", LookIn:=xlValues)
If Not c Is Nothing Then
Columns("U:V").EntireColumn.Hidden = True
Else
Columns("U:V").EntireColumn.Hidden = False
End If
End With
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/449920.html
