每按一次按钮取消隐藏4列

时间:2019-01-07 18:32:55

标签: excel vba

我有20多个隐藏的数据列。我希望出现4列,然后在每次单击按钮时出现接下来的4列。

我尝试了以下代码。一次单击将显示所有20列,而不是一次显示4列。

onAuthorize: function(data, actions) {
                // Make a request to your server
                return actions.request.post('urlServerPost', {
                    paymentID: data.paymentID,
                    payerID:   data.payerID,
                    variable1: 'something',
                    variable2: 'something2'
                })
                .then(function(res) {
                    //Your payment has already been approved and the process on the server has been finished also
                });
            }

2 个答案:

答案 0 :(得分:0)

您想要类似的东西

range(columns(j),columns(j+k)).entirecolumn.hidden=true
range(columns(y),columns(y+z)).entirecolumn.hidden=false

但是您需要逻辑来确定j是什么...第一种情况是什么都没有隐藏:

if not columns(9).entirecolumn.hidden and not columns(13).entirecolumn.hidden and not columns(17).entirecolumn.hidden and not columns(21).entirecolumn.hidden then

然后,您将要隐藏:

j = 13
k = 15

在这种情况不是真的(ELSE)的情况下,您应该嵌入一些逻辑来确定隐藏的内容并取消隐藏其他部分:

if not columns(9).entirecolumn.hidden then 
    j = 9
    k = 3
    y = 13
    z = 3

您需要为每个列分组提供以上内容,以告知未隐藏的内容,从而知道接下来的分组。

您将根据列号列出哪些部分可见,哪些部分隐藏。

答案 1 :(得分:0)

我知道距离任何人都已经发布了几天,但是我认为我会发布为另一个项目构建的宏的这一部分。这应该可以正常工作,并且变量已经根据OP的问题进行了设置。

Sub DynHideColumns()

FirstColumn = 9 ' First Column that could be hidden
LastColumn = 200 ' Last Column that could be hidden
ColumnSteps = 4 ' Number of columns to hide per start
x = FirstColumn
Z = 1
ReDim y(1 To ColumnSteps)

Do Until x > LastColumn
    If ActiveSheet.Range(Columns(x), Columns(x)).EntireColumn.Hidden = False Then
        If Z <= ColumnSteps Then
            y(Z) = x
            Z = Z + 1
        Else
            y(1) = ""
        End If
    End If
x = x + 1
Loop

ActiveSheet.Range(Columns(FirstColumn), Columns(LastColumn)).EntireColumn.Hidden = True

If y(1) = "" Then
    ActiveSheet.Range(Columns(FirstColumn), Columns(FirstColumn + ColumnSteps - 1)).EntireColumn.Hidden = False
Else
    If y(ColumnSteps) = LastColumn Then
        ActiveSheet.Range(Columns(FirstColumn), Columns(FirstColumn + ColumnSteps)).EntireColumn.Hidden = False
    Else
        ActiveSheet.Range(Columns(y(1) + ColumnSteps), Columns(y(ColumnSteps) + ColumnSteps)).EntireColumn.Hidden = False
    End If
End If

End Sub