Lỗi DoubleClick chuột vào những dòng trống trong ListBox

Liên hệ QC

ishikawangocthuy

Thành viên mới
Tham gia
17/6/20
Bài viết
43
Được thích
1
Xin chào các anh chị của diễn đàn ah!
Em đang gặp phải vấn đề là khi dbclick chuột vào những dòng trống trong listbox thì nó sẽ bị lỗi.
Em muốn dù có dbclick chuột vào những ô trống thì nó sẽ không có gì xảy ra.
Mọi người thông cảm cách diễn đạt của em không được tốt lắm ah!
Mã:
Public Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim frm As UserForm1
    Dim i As Long
    With UserForm2.ListBox1
        If .ListIndex = -1 Then Exit Sub
        i = ListBox1.List(ListBox1.ListIndex, 24)
        gst = i
    End With

    Set frm = New UserForm1
    frm.顧客部署名 = Worksheets("受注一覧").Cells(i, 9)
    frm.使用ツール① = Worksheets("受注一覧").Cells(i, 21)
    frm.使用ツール② = Worksheets("受注一覧").Cells(i, 18)
    frm.使用ツール③ = Worksheets("受注一覧").Cells(i, 22)
    frm.ComboBox6 = Worksheets("受注一覧").Cells(i, 5)
    frm.ComboBox4 = Worksheets("受注一覧").Cells(i, 15)
    frm.人数 = Worksheets("受注一覧").Cells(i, 6)
    frm.ComboBox1 = Worksheets("受注一覧").Cells(i, 4)
    frm.営業担当者名 = Worksheets("受注一覧").Cells(i, 7)
    frm.顧客名 = Worksheets("受注一覧").Cells(i, 8)
    frm.担当者名 = Worksheets("受注一覧").Cells(i, 10)
    frm.ComboBox2 = Worksheets("受注一覧").Cells(i, 11)
    frm.その他 = Worksheets("受注一覧").Cells(i, 12)
    frm.発注単価 = Worksheets("受注一覧").Cells(i, 13)
    frm.ComboBox3 = Worksheets("受注一覧").Cells(i, 14)
    frm.業務内容 = Worksheets("受注一覧").Cells(i, 16)
    frm.技術知識① = Worksheets("受注一覧").Cells(i, 17)
    frm.技術知識② = Worksheets("受注一覧").Cells(i, 19)
    frm.技術知識 = Worksheets("受注一覧").Cells(i, 20)
    frm.備考 = Worksheets("受注一覧").Cells(i, 23)
    
    'IDを転記する
    frm.ComboBox1.Enabled = False       
    frm.ComboBox6.Enabled = False
    frm.人数.Enabled = False
    frm.営業担当者名.Enabled = False
    frm.顧客名.Enabled = False
    frm.顧客部署名.Enabled = False
    frm.担当者名.Enabled = False
    frm.ComboBox2.Enabled = False
    frm.その他.Enabled = False
    frm.発注単価.Enabled = False
    frm.ComboBox3.Enabled = False
    frm.ComboBox4.Enabled = False
    frm.業務内容.Enabled = False
    frm.技術知識①.Enabled = False
    frm.技術知識②.Enabled = False
    frm.技術知識.Enabled = False
    frm.使用ツール①.Enabled = False
    frm.使用ツール②.Enabled = False
    frm.使用ツール③.Enabled = False
    frm.備考.Enabled = False
    frm.ComboBox7.Enabled = False
    frm.登録.Enabled = False
    frm.ComboBox5.Enabled = True       
    frm.CommandButton1.Enabled = True
       
    Unload Me
    frm.Show
  
End Sub

Đây là nút tìm kiếm ah.
Mã:
Private Sub CommandButton1_Click()
    Dim lastRow As Long             
    Dim myData, myData2(), myno
    Dim i As Long, j As Long, cn As Long
    TextBox15.Text = "営業所"
    TextBox16.Text = "顧客名"
    TextBox17.Text = "分野"
    TextBox18.Text = "業務内容"
    TextBox15.Enabled = False
    TextBox16.Enabled = False
    TextBox17.Enabled = False
    TextBox18.Enabled = False
  
    With Worksheets("受注一覧")
  ListBox1.Clear

        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row             
        myData = .Range(.Cells(1, 1), .Cells(lastRow, 25)).Value
    End With

 
    ReDim myData2(1 To lastRow, 1 To 25)
        For i = LBound(myData) To UBound(myData)   
            If myData(i, 8) Like "*" & TextBox1.Value & "*" And _
            myData(i, 11) Like "*" & TextBox7.Value & "*" And _
            myData(i, 3) = "" And _
            myData(i, 25) = "" And _
            myData(i, 16) Like "*" & TextBox2.Value & "*" Then 
            cn = cn + 1
            myData2(cn, 3) = myData(i, 3) 
            myData2(cn, 4) = myData(i, 4)
            myData2(cn, 8) = myData(i, 8)
            myData2(cn, 11) = myData(i, 11)
            myData2(cn, 16) = myData(i, 16)
            myData2(cn, 25) = i
            End If
            TextBox3 = cn
        Next i
  
    With ListBox1
        .ColumnCount = 16
        .ColumnWidths = "0;0;0;100;0;0;0;100;0;0;100;0;0;0;0;100;0"
       .List = myData2
    End With
          

End Sub
 
Xin chào các anh chị của diễn đàn ah!
Em đang gặp phải vấn đề là khi dbclick chuột vào những dòng trống trong listbox thì nó sẽ bị lỗi.
Em muốn dù có dbclick chuột vào những ô trống thì nó sẽ không có gì xảy ra.
Mọi người thông cảm cách diễn đạt của em không được tốt lắm ah!
Mã:
Public Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim frm As UserForm1
    Dim i As Long
    With UserForm2.ListBox1
        If .ListIndex = -1 Then Exit Sub
        i = ListBox1.List(ListBox1.ListIndex, 24)
        gst = i
    End With

    Set frm = New UserForm1
    frm.顧客部署名 = Worksheets("受注一覧").Cells(i, 9)
    frm.使用ツール① = Worksheets("受注一覧").Cells(i, 21)
    frm.使用ツール② = Worksheets("受注一覧").Cells(i, 18)
    frm.使用ツール③ = Worksheets("受注一覧").Cells(i, 22)
    frm.ComboBox6 = Worksheets("受注一覧").Cells(i, 5)
    frm.ComboBox4 = Worksheets("受注一覧").Cells(i, 15)
    frm.人数 = Worksheets("受注一覧").Cells(i, 6)
    frm.ComboBox1 = Worksheets("受注一覧").Cells(i, 4)
    frm.営業担当者名 = Worksheets("受注一覧").Cells(i, 7)
    frm.顧客名 = Worksheets("受注一覧").Cells(i, 8)
    frm.担当者名 = Worksheets("受注一覧").Cells(i, 10)
    frm.ComboBox2 = Worksheets("受注一覧").Cells(i, 11)
    frm.その他 = Worksheets("受注一覧").Cells(i, 12)
    frm.発注単価 = Worksheets("受注一覧").Cells(i, 13)
    frm.ComboBox3 = Worksheets("受注一覧").Cells(i, 14)
    frm.業務内容 = Worksheets("受注一覧").Cells(i, 16)
    frm.技術知識① = Worksheets("受注一覧").Cells(i, 17)
    frm.技術知識② = Worksheets("受注一覧").Cells(i, 19)
    frm.技術知識 = Worksheets("受注一覧").Cells(i, 20)
    frm.備考 = Worksheets("受注一覧").Cells(i, 23)
   
    'IDを転記する
    frm.ComboBox1.Enabled = False      
    frm.ComboBox6.Enabled = False
    frm.人数.Enabled = False
    frm.営業担当者名.Enabled = False
    frm.顧客名.Enabled = False
    frm.顧客部署名.Enabled = False
    frm.担当者名.Enabled = False
    frm.ComboBox2.Enabled = False
    frm.その他.Enabled = False
    frm.発注単価.Enabled = False
    frm.ComboBox3.Enabled = False
    frm.ComboBox4.Enabled = False
    frm.業務内容.Enabled = False
    frm.技術知識①.Enabled = False
    frm.技術知識②.Enabled = False
    frm.技術知識.Enabled = False
    frm.使用ツール①.Enabled = False
    frm.使用ツール②.Enabled = False
    frm.使用ツール③.Enabled = False
    frm.備考.Enabled = False
    frm.ComboBox7.Enabled = False
    frm.登録.Enabled = False
    frm.ComboBox5.Enabled = True      
    frm.CommandButton1.Enabled = True
      
    Unload Me
    frm.Show
 
End Sub

Đây là nút tìm kiếm ah.
Mã:
Private Sub CommandButton1_Click()
    Dim lastRow As Long            
    Dim myData, myData2(), myno
    Dim i As Long, j As Long, cn As Long
    TextBox15.Text = "営業所"
    TextBox16.Text = "顧客名"
    TextBox17.Text = "分野"
    TextBox18.Text = "業務内容"
    TextBox15.Enabled = False
    TextBox16.Enabled = False
    TextBox17.Enabled = False
    TextBox18.Enabled = False
 
    With Worksheets("受注一覧")
  ListBox1.Clear

        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row            
        myData = .Range(.Cells(1, 1), .Cells(lastRow, 25)).Value
    End With


    ReDim myData2(1 To lastRow, 1 To 25)
        For i = LBound(myData) To UBound(myData)  
            If myData(i, 8) Like "*" & TextBox1.Value & "*" And _
            myData(i, 11) Like "*" & TextBox7.Value & "*" And _
            myData(i, 3) = "" And _
            myData(i, 25) = "" And _
            myData(i, 16) Like "*" & TextBox2.Value & "*" Then
            cn = cn + 1
            myData2(cn, 3) = myData(i, 3)
            myData2(cn, 4) = myData(i, 4)
            myData2(cn, 8) = myData(i, 8)
            myData2(cn, 11) = myData(i, 11)
            myData2(cn, 16) = myData(i, 16)
            myData2(cn, 25) = i
            End If
            TextBox3 = cn
        Next i
 
    With ListBox1
        .ColumnCount = 16
        .ColumnWidths = "0;0;0;100;0;0;0;100;0;0;100;0;0;0;0;100;0"
       .List = myData2
    End With
         

End Sub
Tiếc chi cái file mà không gửi lên
 
Upvote 0
Xin chào các anh chị của diễn đàn ah!
Em đang gặp phải vấn đề là khi dbclick chuột vào những dòng trống trong listbox thì nó sẽ bị lỗi.
Em muốn dù có dbclick chuột vào những ô trống thì nó sẽ không có gì xảy ra.
Mọi người thông cảm cách diễn đạt của em không được tốt lắm ah!
Chỉ cần thêm dòng này vào code là OK.
Mã:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If ListBox1.Value = "" Then Exit Sub
    ''Your code
End Sub
 
Upvote 0
Mà sao xài ngôn ngữ tượng hình chi làm vậy, lòe mọi người ư?
 
Upvote 0
Tiếc chi cái file mà không gửi lên
do file của em không phải tiếng việt nên mọi người sẽ khó hiểu hơn ah
Bài đã được tự động gộp:

Mà sao xài ngôn ngữ tượng hình chi làm vậy, lòe mọi người ư?
không phải loè đâu ah do em đang học bên nhật nên xài form chữ đó thôi ah!
Bài đã được tự động gộp:

Chỉ cần thêm dòng này vào code là OK.
Mã:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If ListBox1.Value = "" Then Exit Sub
    ''Your code
End Sub


Cảm ơn @Hoàng Trọng Nghĩa ah.
em đã làm và chạy thử thì tất cả đều không dbclick được ah ngay cả những hàng có dữ liệu cũng ko được ah!
Anh xem lại giúp em với ah?
Mã:
Public Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim frm As UserForm1
    Dim i As Long
    With UserForm2.ListBox1
 If ListBox1.Value = "" Then Exit Sub
        If .ListIndex = -1 Then Exit Sub
        i = ListBox1.List(ListBox1.ListIndex, 24)
        gst = i
    End With
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào các anh chị của diễn đàn ah!
Em đang gặp phải vấn đề là khi dbclick chuột vào những dòng trống trong listbox thì nó sẽ bị lỗi.
Em muốn dù có dbclick chuột vào những ô trống thì nó sẽ không có gì xảy ra.
Mọi người thông cảm cách diễn đạt của em không được tốt lắm ah!
Mã:
Public Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim frm As UserForm1
    Dim i As Long
    With UserForm2.ListBox1
        If .ListIndex = -1 Then Exit Sub
        i = ListBox1.List(ListBox1.ListIndex, 24)
        gst = i
    End With

    Set frm = New UserForm1
    frm.顧客部署名 = Worksheets("受注一覧").Cells(i, 9)
    frm.使用ツール① = Worksheets("受注一覧").Cells(i, 21)
    frm.使用ツール② = Worksheets("受注一覧").Cells(i, 18)
    frm.使用ツール③ = Worksheets("受注一覧").Cells(i, 22)
    frm.ComboBox6 = Worksheets("受注一覧").Cells(i, 5)
    frm.ComboBox4 = Worksheets("受注一覧").Cells(i, 15)
    frm.人数 = Worksheets("受注一覧").Cells(i, 6)
    frm.ComboBox1 = Worksheets("受注一覧").Cells(i, 4)
    frm.営業担当者名 = Worksheets("受注一覧").Cells(i, 7)
    frm.顧客名 = Worksheets("受注一覧").Cells(i, 8)
    frm.担当者名 = Worksheets("受注一覧").Cells(i, 10)
    frm.ComboBox2 = Worksheets("受注一覧").Cells(i, 11)
    frm.その他 = Worksheets("受注一覧").Cells(i, 12)
    frm.発注単価 = Worksheets("受注一覧").Cells(i, 13)
    frm.ComboBox3 = Worksheets("受注一覧").Cells(i, 14)
    frm.業務内容 = Worksheets("受注一覧").Cells(i, 16)
    frm.技術知識① = Worksheets("受注一覧").Cells(i, 17)
    frm.技術知識② = Worksheets("受注一覧").Cells(i, 19)
    frm.技術知識 = Worksheets("受注一覧").Cells(i, 20)
    frm.備考 = Worksheets("受注一覧").Cells(i, 23)
   
    'IDを転記する
    frm.ComboBox1.Enabled = False      
    frm.ComboBox6.Enabled = False
    frm.人数.Enabled = False
    frm.営業担当者名.Enabled = False
    frm.顧客名.Enabled = False
    frm.顧客部署名.Enabled = False
    frm.担当者名.Enabled = False
    frm.ComboBox2.Enabled = False
    frm.その他.Enabled = False
    frm.発注単価.Enabled = False
    frm.ComboBox3.Enabled = False
    frm.ComboBox4.Enabled = False
    frm.業務内容.Enabled = False
    frm.技術知識①.Enabled = False
    frm.技術知識②.Enabled = False
    frm.技術知識.Enabled = False
    frm.使用ツール①.Enabled = False
    frm.使用ツール②.Enabled = False
    frm.使用ツール③.Enabled = False
    frm.備考.Enabled = False
    frm.ComboBox7.Enabled = False
    frm.登録.Enabled = False
    frm.ComboBox5.Enabled = True      
    frm.CommandButton1.Enabled = True
      
    Unload Me
    frm.Show
 
End Sub

Đây là nút tìm kiếm ah.
Mã:
Private Sub CommandButton1_Click()
    Dim lastRow As Long            
    Dim myData, myData2(), myno
    Dim i As Long, j As Long, cn As Long
    TextBox15.Text = "営業所"
    TextBox16.Text = "顧客名"
    TextBox17.Text = "分野"
    TextBox18.Text = "業務内容"
    TextBox15.Enabled = False
    TextBox16.Enabled = False
    TextBox17.Enabled = False
    TextBox18.Enabled = False
 
    With Worksheets("受注一覧")
  ListBox1.Clear

        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row            
        myData = .Range(.Cells(1, 1), .Cells(lastRow, 25)).Value
    End With


    ReDim myData2(1 To lastRow, 1 To 25)
        For i = LBound(myData) To UBound(myData)  
            If myData(i, 8) Like "*" & TextBox1.Value & "*" And _
            myData(i, 11) Like "*" & TextBox7.Value & "*" And _
            myData(i, 3) = "" And _
            myData(i, 25) = "" And _
            myData(i, 16) Like "*" & TextBox2.Value & "*" Then
            cn = cn + 1
            myData2(cn, 3) = myData(i, 3)
            myData2(cn, 4) = myData(i, 4)
            myData2(cn, 8) = myData(i, 8)
            myData2(cn, 11) = myData(i, 11)
            myData2(cn, 16) = myData(i, 16)
            myData2(cn, 25) = i
            End If
            TextBox3 = cn
        Next i
 
    With ListBox1
        .ColumnCount = 16
        .ColumnWidths = "0;0;0;100;0;0;0;100;0;0;100;0;0;0;0;100;0"
       .List = myData2
    End With
         

End Sub
Chơi liều, lồng câu lệnh này vào:
Mã:
On Error Resume Next
 
Upvote 0
Bạn nên xem lại cách tổ chức dữ liệu cho Listbox: 25 cột vào mà lại có những cột Width=0 thí sao xem được listbox
Listbox chỉ la công cụ để hiển thị thôi,
--> nếu là trắng thì nên lọc trước khi đưa vào ListBox

Thứ nữa, ở Nhật, hỏi các bạn Nhật xem sao (vì có file, lap demo luôn) - người nhật excel, vba giỏi
 
Upvote 0
Bạn nên xem lại cách tổ chức dữ liệu cho Listbox: 25 cột vào mà lại có những cột Width=0 thí sao xem được listbox
Listbox chỉ la công cụ để hiển thị thôi,
--> nếu là trắng thì nên lọc trước khi đưa vào ListBox

Thứ nữa, ở Nhật, hỏi các bạn Nhật xem sao (vì có file, lap demo luôn) - người nhật excel, vba giỏi
Da cảm ơn@tigertiger em sẽ xem lại ah
 
Upvote 0
ishikawangocthuy

TopIndex là vị trí trên cùng khi đã lăn chuột.
ListIndex là vị trí tính từ vị trí trên cùng đến vị trí click chuột.

Bạn thử đoạn code sau:

-----------------------------------------------
JavaScript:
    With ListBox1
        If .ListIndex = -1 Then Exit Sub
       if  .list(.TopIndex+.ListIndex, 0) = "" then
           Cancel = True: Exit Sub
       End If
    End With
 
Upvote 0
ishikawangocthuy

TopIndex là vị trí trên cùng khi đã lăn chuột.
ListIndex là vị trí tính từ vị trí trên cùng đến vị trí click chuột.

Bạn thử đoạn code sau:

-----------------------------------------------
JavaScript:
    With ListBox1
        If .ListIndex = -1 Then Exit Sub
       if  .list(.TopIndex+.ListIndex, 0) = "" then
           Cancel = True: Exit Sub
       End If
    End With
Cảm ơn@ HeSanbi ah!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom