2015-07-14 5 views
0

Не удалось найти точный ответ на этот запрос. Мне нужен код для доступа к первому незакрытому столбцу в диапазоне. Столбцы скрыты или невидимы динамически и каждый раз, когда код должен выбрать первый столбец в невидимом диапазоне.Код VBA для выбора первого видимого столбца в динамическом диапазоне

Моя текущая попытка:

Private Sub Test1_Click() 
    Application.EnableCancelKey = xlDisabled 
    On Error Resume Next 
    Dim answer As String 
    'ActiveSheet.Unprotect "" 
    Dim rw As Range 
    For Each rw In Sheet1.Range("$c$30:$e$39") 
     If Sheet1.Range("b27").Text <> "" Or Sheet1.Range("b30:b39").Text <> "" Then 
      rw.Formula = rw.Offset(0, -1).Value * Sheet1.Range("b27").Value + rw.Offset(0, -1).Value 
     Else 
      answer = MsgBox("Eh!!! There is no data to copy..Please fill the first column and try again", vbOKOnly, "Alert") 
      Exit Sub 
     End If 
     Next rw 
    'ActiveSheet.Protect "" 
End Sub 
+0

Для того, чтобы получить лучший ответ здесь вам нужно будет дать идея о том, что вы пробовали, и какие результаты были в противоположность «Можете ли вы сделать мою работу для меня»? – Lance

+0

Спасибо. Следующий код работает для всех столбцов, скрытых или нет. –

+0

Я боюсь, что мои наборы навыков очень ограничены .. любой помощь будет приветствуется –

ответ

0

Учитывая произвольный диапазон, как:

Range ("C3: H13")

и мы хотим Выберите первый не-скрытые колонки в этом диапазоне:

Sub SelectFirstVisibleColumn() 
    Dim r As Range 
    Set r = Range("C3:H13") 
    nLastRow = r.Rows.Count + r.Row - 1 
    nLastColumn = r.Columns.Count + r.Column - 1 
    nFirstRow = r.Row 
    nFirstColumn = r.Column 

    For i = nFirstColumn To nLastColumn 
     If Cells(1, i).EntireColumn.Hidden = False Then 
      Cells(1, i).EntireColumn.Select 
      Exit Sub 
     End If 
    Next i 
End Sub 

и если мы w анте ограничить выбор для ячеек в этом диапазоне, а не весь столбец, то:

Sub SelectFirstVisibleColumn() 
    Dim r As Range 
    Set r = Range("C3:H13") 
    nLastRow = r.Rows.Count + r.Row - 1 
    nLastColumn = r.Columns.Count + r.Column - 1 
    nFirstRow = r.Row 
    nFirstColumn = r.Column 

    For i = nFirstColumn To nLastColumn 
     If Cells(1, i).EntireColumn.Hidden = False Then 
      Intersect(r, Cells(1, i).EntireColumn).Select 
      Exit Sub 
     End If 
    Next i 
End Sub 

Например:

enter image description here

Смежные вопросы