0

我的电子表格每 19 行有一个数据块。我想编写 vba,以便用户可以单击块侧面的图形箭头,并在屏幕顶​​部显示下一个或上一个块。我只需要代码;链接图形是没有问题的,我已经有了一个算法来确定用户当前正在使用的 30 个块中的哪个块。

我尝试了许多不同的方法来做到这一点,但似乎没有一个完全符合我的想法。

将图形链接到所需块的单元格不起作用,因为该单元格可以留在屏幕底部,而我希望它位于顶部,以便用户将数据输入到该块中。我正在搜索的解决方案将显示类似于仪表板的行块。我已经用谷歌搜索了几天但没有找到解决方案 - 也许我不知道要搜索的语言。

有任何想法吗?

4

3 回答 3

0

像这样简单的东西不能调整屏幕?

上一页 19

ActiveWindow.SmallScroll Down:=-19

下一个 19

ActiveWindow.SmallScroll Down:=19
于 2013-08-02T14:09:21.410 回答
0

好吧,最好的答案是:不要将 excel 推到不仅仅是一个表格计算程序。但话虽这么说......让我们看看我们能做些什么。

基本思想:字面上只显示一个块并隐藏所有其他行。把它放在一个新模块中:

Public Sub goto_block(n As Long)
    Dim ws As Worksheet
    Dim i As Long

    If n < 1 Then Exit Sub
    Application.ScreenUpdating = False
    Set ws = Worksheets(1)
    ws.Rows.Hidden = True
    ws.Rows( _
        CStr((n - 1) * 19 + 1) & ":" & CStr((n - 1) * 19 + 19) _
        ).EntireRow.Hidden = False
    Application.ScreenUpdating = True
    ws.Cells((n - 1) * 19 + 1, "A").Select
End Sub

可以通过多种方式进行上下浏览。这显示了如何通过右键单击列 M/L 中的第一个(最顶部可见)单元格来上/下。(将其复制到工作表的模块中):

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim curBlock As Long

    If Target.Cells.Count = 1 Then
        If (Target.Row Mod 19) = 1 Then

            curBlock = Int((Target.Row - 1) / 19) + 1

            If Not Application.Intersect(Target, Me.Columns("M")) Is Nothing Then
                goto_block curBlock + 1
                Cancel = True
                Exit Sub
            ElseIf Not Application.Intersect(Target, Me.Columns("L")) Is Nothing Then
                goto_block curBlock - 1
                Cancel = True
                Exit Sub
            End If

        End If
    End If
End Sub
于 2013-08-03T09:08:15.680 回答
0

非常感谢你们两个花时间帮助我解决我的问题。我一直在搬家,所以才刚刚回到我的项目中。

@MakeCents:不幸的是,我对 VB 的了解还不够,还不知道您的建议是否适合我的目的(我在 80 年代编写了 Commodore Basic 和汇编语言,但 VB 的语法似乎是另一种野兽)。

@KekuSamau:我尝试了您的建议,尽管对此了解不多,但效果很好。

我正在学习一本 Wrox 的书,所以希望能在我前进的过程中提高我的 VB。再次感谢你们帮助我克服这个障碍并保持我的热情。

丹尼尔斯

于 2013-08-15T12:00:54.500 回答