【问题标题】:Is There A Fast Way To Add Multiple Text boxes With Scrollbars?有没有一种快速的方法来添加多个带有滚动条的文本框?
【发布时间】:2015-08-05 19:25:03
【问题描述】:

因为我项目中的单元格包含大量数据,我不得不插入带有滚动条的文本框才能查看所有数据(它们链接到电子表格中位于它们后面的单元格)。有什么快速的方法可以在一列 1000 条记录上做同样的事情,还是我必须手动完成并将文本框链接到特定的单元格?有更快的方法吗?

此外,如果出现问题是对原始问题的回复,我需要它使用原始 ID(我使用了自动 IDS,可以在电子表格中看到)。有什么建议吗?

慢慢地,我的 excel 和 VBA 越来越好,但有时我需要帮助 ^_^

我已附上电子表格,其中包含我制作的 2 条记录的示例。最后一张表将有 1000 条记录。 (请下载电子表格并在excel中打开)

LINK To Spreadsheet

【问题讨论】:

  • 您可以只在工作表上放置一个文本框,然后移动它以响应所选行的变化。
  • hmmm,所以如果用户按下行,例如,文本框会跟随吗?唯一的问题是说用户希望看到多个问题,我需要多个框。我将如何实现一个文本框的想法?我的电子表格是否让我遇到的问题变得更容易理解?很难解释。
  • 我试图查看您的文件,但它总是使我的 Excel 崩溃...至于如何移动文本框,您可以使用 selection_change 事件。

标签: excel vba textbox scrollbar


【解决方案1】:

一些事情:

  1. 您应该将单元格格式更改为“顶部对齐”单元格中的文本。这将导致单元格显示查询单元格中长文本的第一行。

  2. 与其在单元格中使用“发送电子邮件”文本,为什么不添加一个按钮以通过电子邮件发送当前选定的行。 (使用开发人员选项卡功能区上的插入(您必须更改 excel 选项以显示开发人员选项卡)。

  3. 如果发送电子邮件的代码用发送日期更新一个新列,它可能会更好,如果它已经发送,它可能会提示用户确认。

    如果不是 isempty(cells(r, ColNumberWithSentdate) ) 那么 if vbno = msgbox ("您确定要再次发送电子邮件吗?", VbYesno) then
    退出子 万一 结束如果

  4. 您添加的所有文本框确实减慢了电子表格的速度。 为什么不在带有过滤器的表格上方的顶部有一个高行。高行将显示表中当前选定行的数据。然后您的表格行可能会不那么高。

  5. 添加单个文本框。 使用 ALT + 单击并拖动以调整文本框的大小以完全适合单元格。 将命名范围区域中文本框的名称更改或查看为“TextBoxQuery”。

  6. 添加代码以更改摘要行中的文本

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
        ' Say the tall row is in row 2
        If Target.Row <= 2 Then
            Exit Sub
        End If
    
        Dim i As Integer
        For i = 1 To 8
            Cells(2, i) = Cells(Target.Row, i)
        Next i
    
    
    End Sub
    
  7. 您甚至可以允许用户编辑高行中的文本并添加一个按钮来保存他们输入的更改:

A.在标有“保存”的摘要行中添加一个 ACTIVEX 按钮 (然后您可以在表单模块中为按钮编辑vba)

B.在某处添加一个单元格,记录汇总行中显示的行。

C.单击保存按钮时,编写代码将行中的所有值复制回记录的行。

请注意,如果用户删除表中的一行或对表中的数据进行排序,则存储的行将是错误的。因此,在复制数据之前,您可能需要检查该行是否已移动。即检查 KEY 值(即永远不会改变的值)是两行中的 saem。

Private Sub CommandButton1_Click()


    Dim i As Integer
    For i = 1 To 8
        Cells(Cells(1, 1).Value, i) = Cells(2, i)
    Next i


End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    ' Say the tall row is in row 2
    If Target.Row <= 2 Then
        Exit Sub
    End If

    ' Cell A1 is used to store which row is displayed
    Cells(1, 1) = Target.Row

    Dim i As Integer
    For i = 1 To 8
        Cells(2, i) = Cells(Target.Row, i)
    Next i


End Sub

【讨论】:

  • 嗨哈维,感谢您的回复并查看我非常混乱的电子表格。我该怎么做才能选择行并且它出现在一个高大的行中? (听起来是一个非常好的主意,但不确定如何实现它)。我还可以在上面的大行中实现单个文本框,所以它只有 1 个文本框吗?该代码如何知道我选择哪一行嵌入到文本框中?抱歉所有问题
  • 我添加的代码更改了您用来显示位于高行查询​​列上的值的文本框的公式。您可以有多个文本框,每列一个,或者您可以在高行的单元格中使用公式并编写类似的代码来更改大行的单元格中的公式。值得注意的是,用户将无法编辑
  • @user 抱歉,我有一个更好的主意。查看答案中的最新代码
  • 这里有点困惑。那么这是如何工作的呢?我在第 2 列中做了一个高行,从下面引入信息?唯一的问题是查询列获取了大量数据,因此不确定它们是否都可以查看。
  • 是的,您在第 2 行中创建了一个很高的“摘要”行。如果您想要滚动条,可以在查询列上放置一个文本框。
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2021-01-13
  • 2012-03-09
  • 2010-11-29
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
相关资源
最近更新 更多