This is a decent way of achieving what you want.
it uses a 6 row grid of textboxes with header textboxes above the grid.
then a scrollbar control is added next to the grid.
on starting the userform, the grid is filled with the details for the first 6 rows from the spreadsheet .
When you click on the scroll control, the boxes are first cleared then filled again with the details starting from the 2nd row of the sheet.
View attachment 62638
That way you give the user the impression that the grid is scrolling, whereas in reality the textboxes are static, only the contents move up or down one row.
In my example userform the first (top left) textbox of the grid is TextBox7, with the numbering increasing left to right and then the next row.
You may ned to edit the code to suit your numbering.
VBA Code:
Option Explicit
Dim vIn, UB As Long
Private Sub ScrollBar1_Change()
LoadGrid ScrollBar1.Value
End Sub
Private Sub UserForm_Activate()
vIn = Sheets("Sheet1").Range("B4").CurrentRegion '<<<<< use the sheetname and starting cell of your database
UB = UBound(vIn, 1)
With ScrollBar1
.Min = 2 'skip headerrow
.Max = UB
.LargeChange = 6
.SmallChange = 1
End With
End Sub
Sub LoadGrid(iStartRow As Long)
Dim lR As Long, lC As Long, i As Integer, iGridR As Integer
Dim tbTB As Control
i = 7 'start number of first textbox in grid
'Clear grid boxes
For lR = i To i + 35
For Each tbTB In Me.Controls
If tbTB.Name = "TextBox" & lR Then Exit For
Next tbTB
tbTB.Value = ""
Next lR
lR = Application.WorksheetFunction.Max(2, iStartRow)
'maximum 6 rows to be displayed
iGridR = Application.WorksheetFunction.Min(5 + lR, UB)
For lR = lR To iGridR
For lC = 1 To 6
For Each tbTB In Me.Controls
If tbTB.Name = "TextBox" & i Then Exit For
Next tbTB
tbTB.Value = vIn(lR, lC)
i = i + 1
Next lC
Next lR
End Sub