Excel VBA - для следующего цикла - найти номер отображаемого столбца и сохранить результат

Я впервые задаю вопрос, поэтому, пожалуйста, потерпите меня.

Я сделал макрос, чтобы скрыть столбцы в именованном диапазоне на основе критерия, используя цикл FOR-NEXT. Результат всегда отображает 2 столбца.

Получив 2 столбца, я делаю расчеты.

Я сталкиваюсь с проблемой, чтобы получить номер столбца, используя vba из полученных отображаемых столбцов и использовать их в формуле смещения, чтобы сделать вычисления.

Кто-нибудь может помочь? Спасибо

Public Sub Custom_Report_Monthly()
On Error Resume Next

If Len(Range("Rpt_Type_M").Value) < 1 Then
MsgBox "Select Report Type"
GoTo ExitSub
ElseIf Len(Range("Select_Month").Value) < 1 Then
MsgBox "Select Month"
GoTo ExitSub
End If

ActiveSheet.Range("D_columns").EntireColumn.Hidden = True

If Range("Rpt_Type_M").Value = "Quantity" Then
   For Each c In Range("Titles")
   If c.Value = "Quantity" Then
   c.Columns.EntireColumn.Hidden = False
   End If
   Next
ElseIf Range("Rpt_Type_M").Value = "Sales" Then
   For Each c In Range("Titles")
   If c.Value = "Sales" Then
   c.Columns.EntireColumn.Hidden = False
   End If
   Next
ElseIf Range("Rpt_Type_M").Value = "Cost" Then
   For Each c In Range("Titles")
   If c.Value = "Cost" Then
   c.Columns.EntireColumn.Hidden = False
   End If
   Next
ElseIf Range("Rpt_Type_M").Value = "Sales+Cost" Then
   For Each c In Range("Titles")
   If c.Value = "Sales" Then
   c.Columns.EntireColumn.Hidden = False
   End If
   Next
   For Each c In Range("Titles")
   If c.Value = "Cost" Then
   c.Columns.EntireColumn.Hidden = False
   End If
   Next
End If


For Each c In Range("P_Months")
   If Month(c.Value) <> Range("Select_Month_Num").Value Then
   c.Columns.EntireColumn.Hidden = True
   End If
Next

For Each col In Range("D_columns") ' **this is the block where i am having problem**
   If col.EntireColumn.Hidden = False Then
   MsgBox (Range("col").Column)
   End If
Next

Call Hide_Count_Columns
ExitSub:

End Sub

1 ответ

Решение

Вы должны хранить номера столбцов, чтобы использовать их. Объявите их сначала:

    Dim col As Object
    Dim intCol1 As Integer
    Dim intCol2 As Integer

Используйте это, чтобы получить переменные

    For Each col In Range("D_columns").Columns
        If col.EntireColumn.Hidden = False Then
            If intCol1 = 0 Then
                intCol1 = col.Column
            Else
                intCol2 = col.Column
            End If
        End If
    Next

Если вам нужно передать переменные в Hide_Count_Columns, сделайте это следующим образом:

    Call Hide_Count_Columns(intCol1, intCol2)

Тогда вы бы объявили подпункт Hide_Count_Columns следующим образом:

Sub Hide_Count_Columns(ByVal intCol1 As Integer, ByVal intCol2 As Integer)

'do something with column numbers

End Sub

Или, если вы хотите поместить номера столбцов на лист, вы должны создать имена диапазонов для них intCol1 а также intCol1 Затем поместите туда номера столбцов следующим образом:

ActiveSheet.Range("intCol1").Value = intCol1
ActiveSheet.Range("intCol2").Value = intCol2
Другие вопросы по тегам