首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA根据列的动态第一行值隐藏和取消隐藏列

VBA根据列的动态第一行值隐藏和取消隐藏列
EN

Stack Overflow用户
提问于 2016-07-12 04:57:48
回答 3查看 4.9K关注 0票数 2

我有一个带有两个工作表的Excel工作簿:summaryClickHide

  • Summary Sheet包含多个复选框窗体。选中复选框时,它们将在TRUEFALSE值的ClickHide Sheet中返回一个ROW A值。
  • ClickHideSheet:在A2:A20中的这些值旁边,我将"0“或"1”值归因于TRUE or FALSE结果。这些结果水平地在范围内B2:BZ45。在ClickHide Row 1上,我有公式在每个列的顶部得到一个结果。
  • Summary B1:BZ1中,我将链接复制到ClickHide A1:BZ1中的单元格。

我的问题

我打算让Summary中的列在自己行中的值为而不是 0时自动隐藏。(如果B1不是0,则隐藏列B,否则取消隐藏)。用户将与复选框交互,因此每次修改复选框时都需要触发宏。

我已经在那里找到了代码片段,但它们似乎都不起作用。我在VBA方面真的很差,所以它可能是我错过的一个简单的编辑。

这两种我都试过了,但都没有成功。看看以下参考

代码语言:javascript
运行
复制
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim i As Integer
    For i = 2 To 80
        Cells(1, i).EntireColumn.Hidden = Cells(2, i) = 0
    Next
End Sub

下一个我不知道是否是VBA代码。

代码语言:javascript
运行
复制
oSheets = ThisComponent.getSheets()
oSheet1 = oSheets.getByName("Sheet1")
oColumns = oSheet1.getColumns()
for i = 0 to 25
   oCol = oColumns.getByIndex(i)
   oCell = oSheet1.getCellByPosition(i,0) 'First row has index 0
   If oCell.Value = 0 Then
      oCol.isVisible = False
   Else
      oCol.isVisible = True
   End If
next i

我不知道如何在这里嵌入电子表格,所以这里有两个工作表的图片,简化为显示示例。

  • 摘要表
  • ClickHide片材

谢谢你能提供的任何帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-12 06:49:25

将这些代码放在ThisWorkbook模块中:

代码语言:javascript
运行
复制
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
    Dim rng As Range
    Application.ScreenUpdating = False
    For i = 2 To 9
        Set rng = Cells(1, i)
        If rng.EntireColumn.Hidden = 0 Then
            If rng.Value = 1 Then rng.EntireColumn.Hidden = 1
        Else
            If rng.Value = 0 Then rng.EntireColumn.Hidden = 0
        End If
    Next i
End Sub

它将在任何工作表上从列BI (列2至9)工作。如果需要计算更改的列,请更改此编号。

如果希望它只在特定的工作表上工作,请将第一行更改为Private Sub Worksheet_Calculate(),并将其放在特定工作表的模块中。

编辑:修改后的代码,在很少更改的情况下,它可能运行得更快。

票数 1
EN

Stack Overflow用户

发布于 2016-07-12 05:13:52

您发布的代码不属于Excel,而是openoffice的代码。

下面的代码将隐藏值=0的单元格(第一行)的列,您可以在宏的末尾包含此代码。

代码语言:javascript
运行
复制
Public sub Hidecol()
'Count no. of used columns in 1st row
l = Cells(1, Columns.Count).End(xlToLeft).Column 
'Loop through 1st row  1stcolumn till 1st row lastcolumn
For i = 1 To l
'if cell vaue is 0 then hide cell column
If Cells(1, i).Value = 0 Then
Cells(1, i).EntireColumn.Hidden = True
End If
Next i
End Sub
票数 0
EN

Stack Overflow用户

发布于 2016-07-12 13:21:07

我试过织女星的答案,效果很好。

我还应用了这个脚本,它似乎运行得稍微快一些,但总体上还是相当慢的。

代码语言:javascript
运行
复制
Private Sub Worksheet_Calculate()


    For Each cell In Range("B1:BZ1")   '**edit if not correct range
        Select Case cell.Value <> 0
            Case False
                cell.EntireColumn.Hidden = False
            Case True
                cell.EntireColumn.Hidden = True
        End Select
    Next cell

    End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38320319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档