代码之家  ›  专栏  ›  技术社区  ›  Ed Swangren

Excel中的VBA忽略需要的数量:设置cell.rowheight是否将单元格值更改为true或false?

  •  0
  • Ed Swangren  · 技术社区  · 17 年前

    编辑:

    发生这种情况是因为单元格被设置为按钮的LinkedCell属性。当我将其设置为空时,一切都可以正常工作(当然,我使用的是该属性,但哦,好吧)。

    通过谷歌找不到任何相关信息…

    我有一个单元格,在相当窄的列中包含相当多的文本。我想用一个按钮来展开/收回被按下的单元格的高度(你知道,“显示”和“隐藏”)。问题是,每当我设置单元格的RowHeight属性时,单元格的值都设置为true或false。有人能告诉我为什么会这样吗?

    顺便说一句,我使用的是Excel2003。

    Private Sub ToggleButton1_Click()
        new_caption = ToggleButton1.Caption
        Dim height As Integer
        If new_caption = "Show" Then
            new_caption = "Hide"
            height = 125
        Else
            new_caption = "Show"
            height = ToggleButton1.height
        End If
        ToggleButton1.Caption = new_caption
        Range(ToggleButton1.LinkedCell).RowHeight = height
    End Sub
    
    1 回复  |  直到 11 年前
        1
  •  1
  •   paxdiablo    17 年前

    虽然我使用的是OfficeXP而不是2003,但这对我来说很好。你确定这就是那个按钮运行的代码(或者唯一的代码)吗?

    它正确设置高度,但根本不更改单元格的内容。

    我试过用按键驱动宏和工作表上的命令按钮,都没有问题。

    更新:

    根据你的编辑声明你正在使用LinkedCell从你的按钮中查找单元格,我认为你没有正确地使用它。LinkedCell将单元格的值绑定到控件的值。

    当你按下按钮时,它的值被设置为一个布尔值(按下时可能为真,释放时可能为假,我不确定)。因为它链接到一个单元格,所以单元格值也将更改为按钮值。你需要找到一种不同的方法来“链接”按钮到单元格。

    我的第一个想法是将它链接到单元格b1,使您的值在a1、a2、a3,…(让我们称它们为AX)并且您的控件按钮位于(并链接到)BX中,不要将BX用于任何其他用途(按钮可能会显示在它们的上方)。

                A               B
      +--------------------+--------+
    1 | Long text which is | [Hide] |
      | wrapped because    |        |
      | the state is SHOW. |        |
      +--------------------+--------+
    2 | More text which is | [Hide] |
      | wrapped because    |        |
      | the state is SHOW. |        |
      +--------------------+--------+
    3 | Hidden text becaus | [Show] |
      +--------------------+--------+
    4 | Even more text     | [Hide] |
      | that's wrapped     |        |
      | because the state  |        |
      | is SHOW.           |        |
      +--------------------+--------+
    

    然后,在您的VBA代码中,您仍然可以设置BX的行高(因为它会影响整行),并且您将不关心B列单元格中的位置-A列单元格值将保持不变。

    或者,如果你 是 将列B用于某些内容,将其链接到zzx(或ivx或行中最右边的列)。