Hỏi thêm về Combox? (1 người xem)

  • Thread starter Thread starter nknam87
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

nknam87

Thành viên mới
Tham gia
19/3/13
Bài viết
24
Được thích
40
Xin chào GPE!!
Em có một vấn đề mà chưa biết cách xử lý thế nào mong các Thầy & Anh Chị giúp đỡ ạ!

Sở dĩ là em muốn nhập dữ liệu theo list combox
Nhưng sau khi xuất dữ liệu từ comboxx thì định dạng không theo ý muốn giống như vùng nguồn dữ liệu.

Có cách nào khắc phục được vấn đề này không ạ?
Tks!
 

File đính kèm

Đúng vậy em cũng đang gặp trường hợp lỗi tình trạng kiểu mà chưa tìm ra nguyên nhân?
Mong GPE tìm cách giúp đỡ ạ!
 

File đính kèm

Upvote 0
Xin chào GPE!!
Em có một vấn đề mà chưa biết cách xử lý thế nào mong các Thầy & Anh Chị giúp đỡ ạ!

Sở dĩ là em muốn nhập dữ liệu theo list combox
Nhưng sau khi xuất dữ liệu từ comboxx thì định dạng không theo ý muốn giống như vùng nguồn dữ liệu.

Có cách nào khắc phục được vấn đề này không ạ?
Tks!

bạn thêm đoạn code này thử xem

Private Sub ComboBox1_Change()
ActiveCell.Value = Format(Me.ComboBox1.Value, "hh:mm:ss")
End Sub
 
Upvote 0
bạn thêm đoạn code này thử xem

Private Sub ComboBox1_Change()
ActiveCell.Value = Format(Me.ComboBox1.Value, "hh:mm:ss")
End Sub
Em làm vậy thấy OK rồi ạ! Nhưng sao kích vào ô đã có dữ liệu thì Code báo lỗi ở đoạn này Anh nhỉ?
HTML:
.LinkedCell = ActiveCell.Address
mà phải thêm
HTML:
On Error Resume Next
thì mới ổn.

PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [c3:C16]) Is Nothing Then
With Me.ComboBox1
    .Visible = False
    .Visible = True
    .Top = ActiveCell.Top
    .Left = ActiveCell.Left
    .Width = ActiveCell.Width
    .Height = ActiveCell.Height
    .Style = fmStyleDropDownList
    .LinkedCell = ""
    .Value = ""
    .ListFillRange = "TIME"
    .LinkedCell = ActiveCell.Address
    .Activate
End With
Else
With ActiveSheet.ComboBox1
    .ListFillRange = ""
    .Visible = False
End With
End If
End Sub
Private Sub ComboBox1_Change()
ActiveCell.Value = Format(Me.ComboBox1.Value, "hh:mm:ss")
End Sub
 
Upvote 0
Em làm vậy thấy OK rồi ạ! Nhưng sao kích vào ô đã có dữ liệu thì Code báo lỗi ở đoạn này Anh nhỉ?
HTML:
.LinkedCell = ActiveCell.Address
mà phải thêm
HTML:
On Error Resume Next
thì mới ổn.

PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [c3:C16]) Is Nothing Then
With Me.ComboBox1
    .Visible = False
    .Visible = True
    .Top = ActiveCell.Top
    .Left = ActiveCell.Left
    .Width = ActiveCell.Width
    .Height = ActiveCell.Height
    .Style = fmStyleDropDownList
    .LinkedCell = ""
    .Value = ""
    .ListFillRange = "TIME"
    .LinkedCell = ActiveCell.Address
    .Activate
End With
Else
With ActiveSheet.ComboBox1
    .ListFillRange = ""
    .Visible = False
End With
End If
End Sub
Private Sub ComboBox1_Change()
ActiveCell.Value = Format(Me.ComboBox1.Value, "hh:mm:ss")
End Sub

Dùng ComboBox hay Listbox cố gắng hạn chế xài ListFillRange và LinkedCell
Bạn sửa lại như sau:
- Chuyển sang chế độ Design Mode, vào phần Properties của ComboBox, xóa hết các mục LinkedCell và ListFillRange
- Xóa hết code cũ và dùng code dưới đây:
Mã:
Dim arr
Private Sub ComboBox1_Click()
  ActiveCell.Value = ComboBox1.Value
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not IsArray(arr) Then
    arr = Range("TIME")
    Sheet1.ComboBox1.List = arr
  End If
  With Me.ComboBox1
    If Not Intersect(Target, Range("C3:C16")) Is Nothing Then
      If Target.Count = 1 Then
        .Visible = True
        .Top = Target.Top
        .Left = Target.Left
        .Width = Target.Width
        .Height = Target.Height
      Else
        .Visible = False
      End If
    Else
      .Visible = False
    End If
  End With
End Sub
Thử xem
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Thầy rất nhiều! ^^
Gần đây Thầy có vẻ bận rộn hơn thì phải,, hì hì.. Em thấy Thầy ít Oln.
 
Upvote 0
Gần đây Thầy có vẻ bận rộn hơn thì phải,, hì hì.. Em thấy Thầy ít Oln.

Đâu có đâu!
Ngày nào cũng online ít nhất 10h... nhưng mà ít bài hay để mình hứng thú quá
Chờ các bạn nghĩ ra các câu hỏi hay vậy!
ẹc... ẹc...
-------------------
Bây giờ bạn hãy thử code của tôi với dữ liệu tại bài 1 (dữ liệu dạng Time) xem có phải chỉnh sửa gì không?
 
Upvote 0
Đâu có đâu!
Ngày nào cũng online ít nhất 10h... nhưng mà ít bài hay để mình hứng thú quá
Chờ các bạn nghĩ ra các câu hỏi hay vậy!
ẹc... ẹc...
-------------------
Bây giờ bạn hãy thử code của tôi với dữ liệu tại bài 1 (dữ liệu dạng Time) xem có phải chỉnh sửa gì không?

Hihi! Code Thầy Hay thật đấy.. ngay cả khi em quét toàn bộ vùng (C3:C16) Mà nó lại không hiện combox! Chỉ hiện khi Active từng ô một trong vùng này.^^!
-----
A`h mà còn về bài #1 em đã copy code trên của Thầy vào dữ liệu nhập vào không có vấn đề gì..
Nhưng dữ liệu hiển thì trong Combox không giống với định dạng kiểu nguồn (như ảnh kèm ạ).
untitled.JPG

A! Ngoài ra em vẫn còn có một thắc mắc trong bài này:
Cần sự giúp đỡ để hoàn thiện file nhật ký
Thầy xem có cách nào không ạ?Thầy Chỉ cho Em với!
Cảm ơn Thầy rất nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng ComboBox hay Listbox cố gắng hạn chế xài ListFillRange và LinkedCell
Bạn sửa lại như sau:
- Chuyển sang chế độ Design Mode, vào phần Properties của ComboBox, xóa hết các mục LinkedCell và ListFillRange
- Xóa hết code cũ và dùng code dưới đây:
Mã:
Dim arr
Private Sub ComboBox1_Click()
  ActiveCell.Value = ComboBox1.Value
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not IsArray(arr) Then
    arr = Range("TIME")
    Sheet1.ComboBox1.List = arr
  End If
  With Me.ComboBox1
    If Not Intersect(Target, Range("C3:C16")) Is Nothing Then
      If Target.Count = 1 Then
        .Visible = True
        .Top = Target.Top
        .Left = Target.Left
        .Width = Target.Width
        .Height = Target.Height
      Else
        .Visible = False
      End If
    Else
      .Visible = False
    End If
  End With
End Sub
Thử xem

Có đoạn này em hơi thắc mắc:
fsf.JPG
Liệu có phải là lỗi không vậy Thầy?
 
Upvote 0
Xin lỗi Thầy do Em chưa Test kỹ.
Câu trên của Thầy Hiểu đơn giản là save file rồi tắt đi mở lại là ổn ạ.
 
Upvote 0
Xin lỗi Thầy do Em chưa Test kỹ.
Câu trên của Thầy Hiểu đơn giản là save file rồi tắt đi mở lại là ổn ạ.

Trời ơi! Đóng rồi mở file thì nói làm gì chứ
Muốn ComboBox tự cập nhật khi list thay đổi, ta thêm sự kiện DropButtonClick vào
Thay toàn bộ code của bài 6 thành:
Mã:
Private Sub ComboBox1_Click()
  On Error Resume Next
  ActiveCell.Value = ComboBox1.Value
End Sub
Private Sub ComboBox1_DropButtonClick()
  Dim arr
  On Error Resume Next
  arr = Range("TIME")
  Sheet1.ComboBox1.List = arr
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  On Error Resume Next
  With Me.ComboBox1
    If Not Intersect(Target, Range("C3:C16")) Is Nothing Then
      If Target.Count = 1 Then
        .Visible = True
        .Top = Target.Top
        .Left = Target.Left
        .Width = Target.Width
        .Height = Target.Height
      Else
        .Visible = False
      End If
    Else
      .Visible = False
    End If
  End With
End Sub
 
Upvote 0
Thật tuyệt vời Thầy ạ!
Vậy còn trường hợp thắc mắc trong bài #9 của bạn KUMI thì với code của Thầy có cách nào giữ nguyên định dạng giống file nguồn không ạ ?
Cảm ơn Thầy!
 
Upvote 0
Thật tuyệt vời Thầy ạ!
Vậy còn trường hợp thắc mắc trong bài #9 của bạn KUMI thì với code của Thầy có cách nào giữ nguyên định dạng giống file nguồn không ạ ?
Cảm ơn Thầy!

Thì code vầy:
Mã:
Private Sub ComboBox1_Click()
  On Error Resume Next
 [COLOR=#ff0000] ActiveCell.Value = ComboBox1.Text[/COLOR]
End Sub
Private Sub ComboBox1_DropButtonClick()
  Dim arr, [COLOR=#ff0000]lR As Long[/COLOR]
  On Error Resume Next
  arr = Range("TIME")
 [COLOR=#ff0000] For lR = 1 To UBound(arr)
    arr(lR, 1) = Format(arr(lR, 1), "hh:mm:ss")
  Next[/COLOR]
  Sheet1.ComboBox1.List = arr
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  On Error Resume Next
  With Me.ComboBox1
    If Not Intersect(Target, Range("C3:C16")) Is Nothing Then
      If Target.Count = 1 Then
        .Visible = True
        .Top = Target.Top
        .Left = Target.Left
        .Width = Target.Width
        .Height = Target.Height
      Else
        .Visible = False
      End If
    Else
      .Visible = False
    End If
  End With
End Sub
Chổ code màu đỏ là những chổ thêm hoặc sửa lại
 
Upvote 0
Thầy ạ!
Cái đoạn code này dùng cho Sheets nào vậy Thầy:
HTML:
Sheets(1).ComboBox1.List = arr
Sao em thấy (1) cũng được mà (2) cũng được ạ?
Có phải là dùng cho sheets(2) không Thầy?
 

File đính kèm

Upvote 0
Thầy ạ!
Cái đoạn code này dùng cho Sheets nào vậy Thầy:
HTML:
Sheets(1).ComboBox1.List = arr
Sao em thấy (1) cũng được mà (2) cũng được ạ?
Có phải là dùng cho sheets(2) không Thầy?

Sheets(1) là kiểu xác định sheet dựa vào Index (thứ tự từ trái sang phải)
Sheet đầu tiên là Sheets(1), tiếp theo là Sheets(2)
Vậy thôi
Dòng code Sheets(1).ComboBox1.List = arr nằm trong sự kiện ComboBox1_DropButtonClick
ComboBox1 là là 1 Object thuộc sheet chứa nó
Vậy ta có thể viết chung chung thế này
ComboBox1.List = arr
hoặc
ActiveSheet.ComboBox1.List = arr
hoặc
Me.ComboBox1.List = arr
Là chắc ăn nhất (không cần chỉ rõ sheet nào cả)
---------------------
Chú ý: arr = Range("Times") có thể bị lỗi nếu Sheet chưa ComboBox1 không cùng sheet với vùng chứa name "TIMES"
Trường hợp này phải ghi rõ tên sheet vào, ví dụ: arr = Sheet1.Range("Times")
 
Lần chỉnh sửa cuối:
Upvote 0
Sheets(1) là kiểu xác định sheet dựa vào Index (thứ tự từ trái sang phải)
Sheet đầu tiên là Sheets(1), tiếp theo là Sheets(2)
Vậy thôi
Dòng code Sheets(1).ComboBox1.List = arr nằm trong sự kiện ComboBox1_DropButtonClick
ComboBox1 là là 1 Object thuộc sheet chứa nó
Vậy ta có thể viết chung chung thế này
ComboBox1.List = arr
hoặc
ActiveSheet.ComboBox1.List = arr
hoặc
Me.ComboBox1.List = arr
Là chắc ăn nhất (không cần chỉ rõ sheet nào cả)
---------------------
Chú ý: arr = Range("Times") có thể bị lỗi nếu Sheet chưa ComboBox1 không cùng sheet với vùng chứa name "TIMES"
Trường hợp này phải ghi rõ tên sheet vào, ví dụ: arr = Sheet1.Range("Times")

Ồ! Rất chi tiết và Thật chu đáo..hi.Em hiểu thêm ít nhiều nữa về thứ tự của Sheets..Cảm Ơn Thầy ạ!
Em Chúc Thầy luôn vui vẻ & mạnh khỏe!
 
Upvote 0
em có bài hay thế up lên mà k thấy anh ndu96081631trả lời dùm.
hic hic
 
Upvote 0
em có bài hay thế up lên mà k thấy anh ndu96081631trả lời dùm.
hic hic

Bài của bạn ở đâu vậy?
Bạn có kiến nghị gì thì phải đưa đường dẫn hay bài viết của bạn lên,chứ sao nói năng khó nghe vậy?
Có thể bài đó rất cần thiết với bạn nên bạn nghĩ là hay, nhưng với ai đó họ có cách làm khác mà không giống ý tưởng như bạn liệu họ có cho là hay không ạ?
---
Ngoài ra mình xin có đôi lời thêm với bạn không hẳn là bài viết nào cũng có câu trả lời hay là một đáp án chuẩn xác theo ý muốn của người hỏi được.
Câu hỏi của bạn không có đáp án có thể là do hệ thống phần mềm không đáp ứng được mà cũng có thể kiến thức của diễn đàn là có hạn (cái này thì quá hiếm hoi).
Chưa nói là bài viết của Bạn có đúng nội qui hay không?
---
Còn về Thầy ndu96081631 có lẽ bạn nên chịu khó vào Diễn Đàn GPE nhiều thì bạn sẽ hiểu.
Nếu bài của bạn đủ tiêu chí như những gì mình nói ở trên thì không có lý do nào Thầy bỏ qua.Với Thầy ai cũng như ai bạn ạ.Trừ khi bài của bạn Thầy chưa có xem đến.

Với mình: Thầy là thành viên đặc biệt và quan trọng nhất vì qua những bài viết của Thầy mình có cảm nhận Thầy rất nhạy cảm và tuyệt vời..Thầy chính là Trái Tim của GPE!}}}}}|||||
Ước gì mình bằng một góc của Thầy hihi!-\\/.
 
Upvote 0

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

Back
Top Bottom