已选择的行显示在屏幕顶部

时间:2013-08-02 12:28:49

标签: excel-vba vba excel

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

我尝试了许多不同的方法,但似乎没有一个方法可以完全按照我的想法行事。

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

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

像这样简单的东西无法调整屏幕?

上一页19

ActiveWindow.SmallScroll Down:=-19

下一页19

ActiveWindow.SmallScroll Down:=19

答案 1 :(得分:0)

嗯,最好的答案是:到目前为止,不要将excel推到桌面计算以上。 但话虽如此......让我们看看我们能做些什么。

Bsic idea:字面上只显示一个块,只隐藏所有其他行。 把它放在一个新模块中:

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

答案 2 :(得分:0)

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

@MakeCents:不幸的是我还不太了解VB还知道你的建议是否适用于我的目的(我在80年代编写了Commodore Basic和汇编语言,但VB的语法似乎是一个不同的野兽)。

@KekuSamau:我尝试了你的建议,尽管对此并不了解,但它的效果非常好。

我正在研究一本Wrox书,所以希望在我去的时候改进我的VB。再次感谢你们帮助我克服这个障碍并保持我的热情。

丹尼尔斯