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