gpt4 book ai didi

Excel VBA - 对于下一个循环 - 查找显示列的列号和存储的结果

转载 作者:行者123 更新时间:2023-12-04 21:06:01 28 4
gpt4 key购买 nike

这是我第一次提出问题,所以请多多包涵。

我制作了一个宏来根据使用 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

最佳答案

您需要存储列号才能使用它们。首先声明它们:

    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

或者,如果您确实想将列号放在工作表上,您可以为它们创建范围名称 intCol1intCol1然后像这样把列号放在那里:
ActiveSheet.Range("intCol1").Value = intCol1
ActiveSheet.Range("intCol2").Value = intCol2

关于Excel VBA - 对于下一个循环 - 查找显示列的列号和存储的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17897738/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com