有一个快速的方法来添加多个带有滚动条的文本框?

时间:2015-08-05 19:25:03

标签: excel vba textbox scrollbar

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

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

慢慢地我在excel和VBA上变得越来越好但是我有时需要一只手^ _ ^

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

LINK To Spreadsheet

1 个答案:

答案 0 :(得分:1)

一些事情:

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

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

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

    如果不是isempty(cells(r,ColNumberWithSentdate))那么     if vbno = msgbox(“你确定要再次发送电子邮件吗?”,VbYesno)然后
            退出子     万一 如果

  4. 结束
  5. 您添加的所有文本框实际上都在减慢电子表格的速度。 为什么不在桌子上方的顶部有一个高排和过滤器。高行将显示表中当前选定行的数据。那么你的表行可能会更低。

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

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

    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
    
  8. 您甚至可以允许用户编辑高大行中的文本并添加按钮以保存他们输入的更改:

  9. 一个。在标记为“SAVE”的摘要行中添加ACTIVEX按钮    (然后您可以在工作表模块中编辑按钮的vba)

    B中。在某个位置添加一个单元格,记录在摘要行中显示哪一行。

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

    请注意,如果用户删除表中的行或对表中的数据进行排序,则存储的行将是错误的。因此,在复制数据之前,您可能希望检查该行是否已移动。即检查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