2016-11-25 3 views
1

Этот человек сбил меня с ума, так что, надеюсь, один из вас может сказать мне, что я делаю неправильно.VBA Range найти в 1 колонке, чтобы показать/скрыть другую колонку

Все, что я хочу сделать, это если какая-либо ячейка в столбце I содержит значение «Y», тогда столбец J скрывается. Если вы удалите Y из любой ячейки, то снова появится столбец J.

Вот мой код:

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim rng As Range 
Set rng = Range("I:I") 
Set cell = rng.Find(What:="Y") 
If cell Is Nothing Then 
     Columns("J").EntireColumn.Hidden = True 
    Else 
     Columns("J").EntireColumn.Hidden = False 
    End If 
End Sub 

В основном код абсолютно ничего не делает. Это раздражает меня больше, чем получение ошибки, потому что я не знаю, что я сделал неправильно.

+0

Где этот код? Прикреплено к листу? – Floris

ответ

0

Попробуйте следующее ...

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cell As Range 

Columns("I:I").Select 
Set cell = Selection.Find(What:="Y", After:=ActiveCell, LookIn:=xlFormulas, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False) 

If cell Is Nothing Then 
    Columns("J").EntireColumn.Hidden = False 
Else 
    Columns("J").EntireColumn.Hidden = True 
End If 
End Sub 
0

Это то, что работает:

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim c  As Range 

    If Target.Column = 9 Then 
     With Range("I:I") 
      Set c = .Find("Y") 
      If Not c Is Nothing Then 
       Columns("J").EntireColumn.Hidden = True 
      Else 
       Columns("J").EntireColumn.Hidden = False 
      End If 
     End With 
    End If 

End Sub 
  • Для того, чтобы убедиться, что он работает, поместите свой код в соответствующем листе, не в модуле
  • Убедитесь, что макросы активированы
0

Во-первых, вы можете сохранить этот VBA очень простым, если у вас есть ячейка в вашей книге, которая проверяет, есть ли в столбце IY. Я поставил следующую в клетку A1

=COUNTIF(I:I,"Y") 

Я советую положить это на лист Excel, потому что умная и будет выполнять этот расчет быстрее, чем VBA - это также дает вам некоторые из вида то, что происходит.

Теперь мы можем использовать значение A1, чтобы определить, следует ли скрыть столбец J в макро


Во-первых, это, вероятно, хорошая идея, чтобы проверить, если столбец J находится в правильном состоянии, когда вы открываете книгу поэтому добавьте следующий код в модуль ThisWorkbook. Этот код не является обязательным

Sub Workbook_Open() 
    With Me.Worksheets("Sheet1") 
     If .Range("A1").Value > 0 Then 
      .Range("J:J").EntireColumn.Hidden = True 
     Else: 
      .Range("J:J").EntireColumn.Hidden = False 
     End If 
    End With 
End Sub 

Затем отслеживать любые изменения значений в столбце I, поместите следующий код в модуль листа

Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Me.Range("I:I")) Is Nothing Then 
     If Me.Range("A1") > 0 Then 
      Me.Range("J:J").EntireColumn.Hidden = True 
     Else 
      Me.Range("J:J").EntireColumn.Hidden = False 
     End If 
    End If 
End Sub 

Примечание: этот код не предназначен для пользователя меняющегося сразу несколько ячеек, что не должно быть проблемой, если вы собираетесь использовать его, как описано. Если вы хотите вставлять несколько ячеек (например) за раз, то это нужно будет немного адаптировать.

0
Private Sub Worksheet_Change(ByVal Target As Range) 
    Columns("J").EntireColumn.Hidden = WorksheetFunction.CountIf(Columns("I"),"Y") >0 
End Sub 

Или

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Columns("I")) Is Nothing Then Columns("J").EntireColumn.Hidden = WorksheetFunction.CountIf(Columns("I"),"Y") >0 
End Sub