我的电子表格每19行有一个数据块。我想编写vba,以便用户可以单击块侧面的图形箭头,并在屏幕顶部显示下一个或上一个块。我只需要代码;链接图形没有问题,我已经有了一个算法来确定用户当前正在使用的30个块中的哪一个。
我尝试了许多不同的方法,但似乎没有一个方法可以完全按照我的想法行事。
将图形链接到所需块的单元格不起作用,因为单元格可以留在屏幕底部,当我希望它位于顶部时,用户可以将数据输入到该块中。我正在搜索的解决方案将显示类似于仪表板的行块。我用谷歌搜索了几天但没有找到解决方案 - 也许我不知道要搜索的语言。
有什么想法吗?
答案 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。再次感谢你们帮助我克服这个障碍并保持我的热情。
丹尼尔斯