如果相应的单元格"为空白,则隐藏列#34; /"公式为空"在表格激活后

时间:2015-07-27 14:39:02

标签: excel vba excel-vba

我是VBAing的新手,但拥有少量的javascript知识,并希望获得一些指导/帮助,因为我似乎无法使代码正常工作。可能有一些明显的错误,所以感谢耐心。

我试图让电子表格在该表格的激活下更新工作表,其中它将隐藏第二行单元格为"空白" (或单元格中的公式x(y)为空)。

以下是迄今为止所尝试的内容。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If Sh.Name = "FSM" Then
    Function hideBlankColumns()
        i = 2
        For i = 2 To 30
        If IsNull(Cells(2, i).Value) = True Then
            Columns(i).EntireRow.Hidden = True
        Else: Columns(i).EntireRow.Hidden = False
        End If
        Next i            
    End Function        
End If
End Sub

提前致谢!

2 个答案:

答案 0 :(得分:0)

尝试这样的事情。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

    If Sh.Name = "FSM" Then
        lCol = 2
        Do While lCol <= ws.UsedRange.Columns.count
            If IsNull(Cells(2, lCol).Value) = True Then
                Columns(lCol).EntireColumn.Hidden = True
            Else
                Columns(lCol).EntireColumn.Hidden = False
            End If
            lCol = lCol + 1
        Loop
    End if
End sub

答案 1 :(得分:0)

您的代码中有三个错误:

  • 你无法在另一个子区域内定义一个函数。

  • 您正在谈论隐藏/取消隐藏列,但在代码中您隐藏了行:Columns(lCol).EntireRow.Hidden = True

  • 如果您将Excel单元格或其值作为参数传递,则
  • 函数IsNull始终返回False。在这种情况下,您应该使用函数IsEmpty代替。

此代码应该可以正常运行:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim i As Integer

    If Sh.Name = "FSM" Then
        For i = 2 To 30
            Columns(i).EntireColumn.Hidden = IsEmpty(Cells(2, i).value)
        Next i
    End If

End Sub