VBA展开/折叠行

时间:2017-12-21 00:23:09

标签: excel vba excel-vba

我有一份报告,其中我要求用户点击按钮以显示他们需要添加评论的位置。我有它工作,但想要在他们已经扩展行的情况下输入If语句。

我有两个宏,第一个与他们推送的按钮相关,并向主宏发送按钮的名称和行号,该行号是展开或折叠的部分的一部分

Sub ROccupancy()
'
Dim RecName As String
RecName = "ROccupancy"
Dim RowNum As Integer
RowNum = 27

Call ToogleRec(RecName, RowNum)

End Sub

下一个宏是我遇到麻烦的地方

Sub ToogleRec(RecName, RowNum)
'
Dim Toogle As String
Dim MyObj As Object

Set MyObj = ActiveSheet.Shapes.Range(Array(RecName))

Toogle = Left(MyObj.TextFrame2.TextRange.Characters.Text, 4)
TextName = Mid(MyObj.TextFrame2.TextRange.Characters.Text, 5, 100)
If Toogle = "Show" Then
    MyObj.ShapeStyle = msoShapeStylePreset9
    MyObj.TextFrame2.TextRange.Characters.Text = _
        "Hide" & TextName
    MsgBox Rows(RowNum).ShowDetail
        If Rows(RowNum).ShowDetail = False Then
            Rows(RowNum).ShowDetail = True
        End If


Else
    MyObj.ShapeStyle = msoShapeStylePreset11
    MyObj.TextFrame2.TextRange.Characters.Text = _
        "Show" & TextName
    MsgBox Rows(RowNum).ShowDetail
        If Rows(RowNum).ShowDetail = True Then
            Rows(RowNum).ShowDetail = False
        End If
End If
Range("C" & RowNum).Select
End Sub

问题是Rows(RowNum).ShowDetail始终为TRUE,无论它是展开还是折叠。我可以删除If部分并使用" Rows(RowNum).ShowDetail = False"将其设置为TRUE或FALSE。或"行(RowNum)。ShowDetail = TRUE"。但是,如果用户手动展开或折叠了该行,则会导致错误(这会使它们变得异常)

这个问题和答案似乎promising但是Rows(RowNum)。ShowDetail似乎总是正确的

我把MsgBox放在那里进行错误检查。我将在最终版本中删除它。

1 个答案:

答案 0 :(得分:0)

您是否尝试过使用print("\u2657") >>> UnicodeEncodeError: 'charmap' codec can't encode character '\u2657' in position 0: character maps to <undefined> 财产?类似的东西:

Hidden

请注意,虽然您使用With Sheet1.Rows(5) .ShowDetail = .Hidden End With 方法,但您需要先.ShowDetail行(needs to be in outline form)。

  

如果轮廓在指定范围内展开(以便可以看到列或行的详细信息),则为true。指定范围必须是 大纲 中的单个摘要列或行。

上面的代码切换隐藏/取消隐藏分组行5.
您甚至不需要Group语句来进行切换。 HTH。