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

Is There A Fast Way To Add Multiple Text boxes With Scrollbars?

因为我项目中的单元格包含太多数据,所以我不得不插入带有滚动条的文本框以查看所有数据(它们 linked 到展开时位于它们后面的单元格sheet).有什么快速的方法可以在 1000 条记录的列上做同样的事情,还是我必须手动完成并 link 文本框到特定的单元格?有没有更快的方法?

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

慢慢地我在 excel 和 VBA 上变得更好了,但有时我需要帮助 ^_^

我已附上传播sheet,其中包含我制作的 2 条记录的示例。最后的 sheet 将有 1000 条记录。 (请下载传播sheet并在excel打开)

LINK To Spreadsheet

一些事情:

  1. 您应该将单元格格式更改为 "Top Align" 单元格中的文本。这将导致单元格在查询单元格中显示长文本的第一行。

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

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

    如果不是 isempty(cells(r, ColNumberWithSentdate) ) 那么 if vbno = msgbox ("Are you sure you want to send the email again?", VbYesno) then
    退出子 万一 如果

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

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

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

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

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

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