我有一张包含2张的Excel工作簿:summary
和ClickHide
。
Summary Sheet
包含多个复选框表单。选中此复选框后,他们会在TRUE
中返回FALSE
或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非常不好,所以这可能是一个我想念的简单编辑。
我已尝试过这两种方法,但没有成功。看看the following reference。
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代码。
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
我不知道如何在这里嵌入电子表格,所以这里有两张图片,简化为一个示例。
提前感谢您提供的任何帮助。
答案 0 :(得分:0)
您发布的代码不属于Excel,而是属于openoffice。
下面的代码将隐藏值为0的单元格(第1行)中的列。您可以在宏的末尾包含此代码。
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
答案 1 :(得分:0)
将此代码放在ThisWorkbook
模块中:
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
它可以在任何工作表上从B
列到I
(第2列到第9列)。如果您需要评估的列发生更改,请更改此编号。
如果您希望它仅适用于特定工作表,请将第一行更改为Private Sub Worksheet_Calculate()
并将其放在该特定工作表的模块中。
编辑:经过修改的代码,当变化很少时,它应该可以更快地运行。
答案 2 :(得分:0)
我尝试过Vegard的答案,效果很好。
我也应用了这个脚本,它似乎运行得稍微快一些,但总体来说还是很慢。
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