m0_53705338 2024-05-15 17:18 采纳率: 0%
浏览 9

Excel上的ScrollBar滚动条问题,用vba写的,请帮助找下为啥出bug

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

img

img


以下是程序代码

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
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-15 17:18
    关注

    检查ListBox控件和ScrollBar控件的事件绑定或更新是否正确。

    以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

    评论

报告相同问题?

问题事件

  • 修改了问题 5月15日
  • 修改了问题 5月15日
  • 修改了问题 5月15日
  • 创建了问题 5月15日