这是我第一次提问,所以请耐心等待。
我根据使用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
答案 0 :(得分:0)
您需要存储列号才能使用它们。首先声明它们:
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