用scrollbar滚动条控制listbox模拟滚动发生错误,程式第一遍时候运行可以,但是再跑第二遍就发生错误。


以下是程序代码
Private Sub CommandButton6_Click()
Frame1.Clear
'初始化ScrollBar1
ScrollBar1.Min = 0 '最小值
ScrollBar1.Max = 100 '最大值
ScrollBar1.SmallChange = 1 '小步長
ScrollBar1.LargeChange = 10 '大步長
ScrollBar1.Value = 50 '初始位置
Dim i As Long
Dim newListBox As MSForms.ListBox
Dim filePath As String
Dim selectedItems As Variant
Dim ws As Worksheet
Dim m As String
Dim topPos As Integer
topPos = 10 ' 設定初始位置,根據需要調整
m = ListBox1.Value
Dim ss
Dim RNG
' 獲取 ListBox2 中選定的項目
selectedItems = ListBox2.List(ListBox2.ListIndex)
' 如果有多選,需要循環處理每個選中的項目
For i = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(i) Then
' 根據選中的項目創建新的 ListBox 控制項
Set newListBox = Me.Frame1.Controls.Add("Forms.ListBox.1", "ListBox" & i, True)
' 設定新的 ListBox 位置和大小(這裡以示例為準,您可以根據需要調整)
With newListBox
.Height = 101
.Left = 10
.Top = topPos ' 讓每個ListBox上下排列
.Width = 500
End With
' 更新下一個ListBox的起始頂部位置
topPos = topPos + newListBox.Height + 1 ' 加上間距
' 根據選中的名稱構造路徑
filePath = "D:\MAS\MAS-M\" & Trim(TextBox1) & "\1.LiuCheng1\" & m & "\" & ListBox2.List(i)
' 檢查文件是否存在並讀取Excel表格
If Dir(filePath, vbDirectory) <> "" Then ' 確保目錄存在
' 假設每個目錄下只有一個Excel文件,且我們直接讀取第一個.xlsx文件
filePath = filePath & Dir(filePath & "*.xlsx") ' 找到第一個Excel文件
' 開啟文件並讀取A1:G8的內容
Set ws = Workbooks.Open(filePath).Worksheets(1)
newListBox.ColumnHeads = True '設置表頭
newListBox.ColumnCount = 9999
ss = ws.Cells(Rows.Count, 2).End(xlUp).Row
RNG = Range("A1:H" & ss)
newListBox.Column() = RNG
newListBox.TextAlign = fmTextAlignCenter
'For j = 1 To 20
'For k = 1 To 20
'newListBox.AddItem ws.Cells(j, k).Value
'Next k
'Next j
ws.Parent.Close False ' 讀取完畢後關閉文件,不保存更改
Else
MsgBox "路徑 " & filePath & " 下沒有找到Excel文件。"
End If
End If
' 調整ScrollBar的Max和Min屬性,這裡簡單示範,實際可能需要根據Frame高度等計算
ScrollBar1.Max = topPos - Frame1.Height
ScrollBar1.Min = 0
Next i
' 設置初始滾動位置(可選)
Frame1.Top = -ScrollBar1.Value
Frame1.Height = 110 * ListBox2.ListCount
End Sub
Private Sub ScrollBar1_Change()
' 根據ScrollBar的值調整Frame1的位置,模擬滾動效果
Frame1.Top = -ScrollBar1.Value
End Sub