Các câu hỏi về Form trong Excel VBA

Liên hệ QC

Tường_Vi

Thành viên tiêu biểu
Tham gia
19/4/10
Bài viết
482
Được thích
121
Nghề nghiệp
Luôn tìm kiếm một vị trí tốt hơn
Private Sub UserForm_Initialize()
.......................
.......................
.......................
End Sub


Em xin hỏi, sự kiện khí nào mình dùng sự kiện này Initialize

Cám ơn
 
OT có một vấn đề sau chưa biết cách xử lý, nhờ các bạn xem và giúp đỡ ạ.
Có trường hợp khi [P8:U9] trống, nhưng [P14:U15] có dữ liệu hay không (Lúc đó ta cần điền dữ liệu lấy từ các ô hàng dưới lên các ô hàng trên hay không?)
 
Upvote 0
Có trường hợp khi [P8:U9] trống, nhưng [P14:U15] có dữ liệu hay không (Lúc đó ta cần điền dữ liệu lấy từ các ô hàng dưới lên các ô hàng trên hay không?)
Vùng N:U là kết quả mong đợi. Dữ liệu đầu vào là D:K

Nhìn D:K thì thấy dòng 10+11 được "bắn" lên trên vào dòng 8+9, và xuống dưới vào dòng 14+15. Tức súng bắn 2 chiều.

Và bây giờ giả sử có:

-dòng 8+9 rỗng
-dòng 10+11 <> rỗng
-dòng 14+15 rỗng.
-dòng 18+19 <> rỗng
-dòng 22+23 rỗng.

Các dòng đều có mã là b.

Ta có thể chấp nhận là 10+11 bắn lên 8+9 chứ không phải là 18+19 bắn lên. Đơn giả là coi 8+9 là vùng "ảnh hưởng" của 10+11 - ngay sát cạnh. Cũng vì thế ta chấp nhận 18+19 bắn xuống 22+23 chứ không phải 10+11 bắn xuống. Nhưng ai sẽ bắn vào 14+15? Vì cả hai, tức 10+11 và 18+19, đều có "quyền" như nhau đối với 14+15. Cả hai đều biết bắn lên bắn xuống.

Tóm lại không biết ai sẽ bắn vào 14+15 vì chủ thớt không nói.

Nếu là tôi thì tôi còn có một loạt câu hỏi nữa. Nhìn dữ liệu thì thấy chủ thới không muốn nhọc công. Nhập 1 chỗ rồi copy/paste vào nhiều nơi - 6 cột y hệt nhau. Trong mỗi cột nếu 2 ô liên tiếp cùng mã thì hoặc là cùng rỗng hoặc cùng khác rỗng. Không biết đó là "tính chất" hay chỉ là sự ngẫu nhiên khi soạn dữ liệu kiểu "càng mất ít thời gian càng tốt". Liệu có thể có trường hợp F6 rỗng và F7 <> rỗng (cùng chung mã a, F6 và F7 "cùng nhà") không? Lúc đó thì bắn thế nào? Bắn từ mã a ở dòng khác (nhà khác) hay bắn F7 vào F6 - "bắn trong cùng nhà"?

Tóm lại với tôi thì còn nhiều cái không rõ ràng :D
 
Upvote 0
Híc con xin lỗi mọi người,
Đêm qua con mải làm báo cáo quá lúc đó các giác quan giường như là đã quá mỏi, thậm trí còn post nhầm chủ đề,đáng lẽ con phải đăng trong chủ đề các câu hỏi về mảng.
Con đã gửi lại câu hỏi ở đây, dữ liệu sẽ lấy ở các mã dưới để điền lên trên ạ. các Bác xem giúp con với ạ.
https://www.giaiphapexcel.com/diend...ảng-trong-vba-array.46834/page-60#post-908461

Các bài viết vừa rồi nhờ BQT xóa giúp (nếu cần thiết ạ).
Xin cảm ơn
 
Upvote 0
em làm file nhập liệu, nhưng viết xong nó hiện chưa như ý, mong các anh chị sửa giúp với ạ.
Ý tưởng là: tìm kiếm dữ liệu đã nhập vào bảng, kết quả được hiện lên listbox sau khi ấn vào nút tìm kiếm. Nếu dòng dữ liệu có sự sai sót thì khi tích vào dòng đó, dữ liệu hiện lại lên phần textbox để cho phép sửa và sửa dữ liệu đó sau khi ấn nút cập nhật.
 

File đính kèm

  • Test 11_3-trunghcsn.xlsm
    241.6 KB · Đọc: 7
Upvote 0
Ý tưởng là: (*) tìm kiếm dữ liệu đã nhập vào bảng, kết quả được hiện lên listbox sau khi ấn vào nút tìm kiếm.
Nếu dòng dữ liệu có sự sai sót thì khi tích vào dòng đó, dữ liệu hiện lại lên phần textbox để cho phép sửa và sửa dữ liệu đó sau khi ấn nút cập nhật.
(*) Bạn cần tìm trên cột nào của CSDL; Đừng nói là tìm ở bất kỳ cột nào trong CSDL đó nha.
(**) Tạm thời bạn đến đây tham khảo cách tìm mã NV: https://www.giaiphapexcel.com/diend...erial-trong-sheet-dữ-liệu.141388/#post-910191
 
Upvote 0
(*) Bạn cần tìm trên cột nào của CSDL; Đừng nói là tìm ở bất kỳ cột nào trong CSDL đó nha.
(**) Tạm thời bạn đến đây tham khảo cách tìm mã NV: https://www.giaiphapexcel.com/diendan/threads/giúp-viết-code-tìm-kiếm-vật-tư-dựa-vào-mã-vật-tư-tên-vật-tư-serial-trong-sheet-dữ-liệu.141388/#post-910191
Đúng là e định tìm bất cứ cột nào ấy. Nhưng cũng có thể thu gọn lại với vài cột thôi cũng dc. Hi
 
Upvote 0
em làm file nhập liệu, nhưng viết xong nó hiện chưa như ý, mong các anh chị sửa giúp với ạ.
Ý tưởng là: tìm kiếm dữ liệu đã nhập vào bảng, kết quả được hiện lên listbox sau khi ấn vào nút tìm kiếm. Nếu dòng dữ liệu có sự sai sót thì khi tích vào dòng đó, dữ liệu hiện lại lên phần textbox để cho phép sửa và sửa dữ liệu đó sau khi ấn nút cập nhật.
Form một đằng, tiêu đề 1 nẽo thì bạn sử dụng nó thế nào?
 
Upvote 0
Bạn thử trãi nghiệm với file này
 

File đính kèm

  • Form.rar
    150.3 KB · Đọc: 30
Upvote 0
Form một đằng, tiêu đề 1 nẽo thì bạn sử dụng nó thế nào?
vâng những phần nhập kia e làm cơ bản rồi. chỉ đang mắc ở chỗ tìm kiếm, sửa, cập nhật thôi ạ.
Bài đã được tự động gộp:

Bạn thử trãi nghiệm với file này
cám ơn bác, e sẽ nghiên cứu file gợi ý của bác. có gì nhờ bác giúp đỡ tiếp nhé
 
Upvote 0
Mình làm trong Form theo yêu cầu của bạn thôi; Chứ thực ra CSDL của bạn vậy mình cho sẽ thất bại nay mai 1 cách sớm nhất!
 
Upvote 0
Xin chào các bạn,
Nhờ các bạn giúp đỡ OT trường hợp trong tập tin gửi kèm với ạ.
 

File đính kèm

  • From.xls
    85.5 KB · Đọc: 19
Upvote 0
Xin chào các bạn,
Nhờ các bạn giúp đỡ OT trường hợp trong tập tin gửi kèm với ạ.
Chỉnh sửa dựa trên code có sẵn.
Thêm 1 code để Enter chọn giá trị tìm thấy đầu tiên, đỡ phải Click chọn:
Mã:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Application.ScreenUpdating = False
    If KeyCode = 13 Then
        KeyCode = 0
        If TextBox1.Value > "" Then
            With ActiveCell
                .Value = ActiveSheet.ListBox1.Column(0, 0)
                .Offset(1, 0) = ActiveSheet.ListBox1.Column(1, 0)
                Hide
                .Offset(1).Select
            End With
        End If
    End If
    Application.ScreenUpdating = True
End Sub
Xem file đính kèm nhe.
 

File đính kèm

  • From.xls
    83 KB · Đọc: 17
Upvote 0
Xin chào các bạn,
Nhờ các bạn giúp đỡ OT trường hợp trong tập tin gửi kèm với ạ.
Chỉnh vài sub
Mã:
Private Sub ListBox1_Click()
    Dim i
    i = ListBox1.ListIndex
    Range("E6") = Sheet1.ListBox1.List(i, 0)
    Range("E7") = Sheet1.ListBox1.List(i, 1)
    Range("E7").Activate
    Hide
End Sub

Private Sub thaydoi()
    With Sheet1.TextBox1
        .Visible = False
        .Visible = True
        .Left = ActiveCell.Left
        .Top = ActiveCell.Top
        .Width = ActiveCell.Width
        .Height = ActiveCell.Height
        .Value = ""
        .Activate
    End With
    With Sheet1.ListBox1
        .Visible = False
        .Visible = True
        .ColumnCount = 2
        .Left = ActiveCell.Offset(, 1).Left
        .Width = ActiveCell.Width * 1.5
        .Height = 150
        .Top = ActiveCell.Offset(, 1).Top
        .Clear
    End With
End Sub

Private Sub loc()
    Dim sArr(), Arr(), Res(), i As Long, k As Long, tmp As String, maHang As String
    With Sheet2
       sArr = .Range("M6:N74").Value
    End With
    ReDim Arr(0 To UBound(sArr), 1 To 2)
    Sheet1.ListBox1.Clear
    tmp = UCase(TV(Sheet1.TextBox1.Value))
    For i = 1 To UBound(sArr)
       maHang = sArr(i, 1)
       If maHang <> "" Then
          If UCase(TV(maHang)) Like "*" & tmp & "*" Then
             Arr(k, 1) = maHang
             Arr(k, 2) = sArr(i, 2)
             k = k + 1
          End If
       End If
    Next
    ReDim Res(0 To k, 1 To 2)
    For i = 0 To k
      Res(i, 1) = Arr(i, 1): Res(i, 2) = Arr(i, 2)
    Next i
    Sheet1.ListBox1.List = Res
End Sub
 
Upvote 0
Chỉnh sửa dựa trên code có sẵn.
Thêm 1 code để Enter chọn giá trị tìm thấy đầu tiên, đỡ phải Click chọn:
Mã:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Application.ScreenUpdating = False
    If KeyCode = 13 Then
        KeyCode = 0
        If TextBox1.Value > "" Then
            With ActiveCell
                .Value = ActiveSheet.ListBox1.Column(0, 0)
                .Offset(1, 0) = ActiveSheet.ListBox1.Column(1, 0)
                Hide
                .Offset(1).Select
            End With
        End If
    End If
    Application.ScreenUpdating = True
End Sub
Xem file đính kèm nhe.
Chưa kiểm tra kỹ, code Enter lấy giá trị trên cùng của Listbox bị lỗi khi Textbox có giá trị không nằm trong dữ liệu.
Lấy lại code sau dùm:
Mã:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Application.ScreenUpdating = False
    If KeyCode = 13 Then
        KeyCode = 0
        If TextBox1.Value > "" Then
            If ActiveSheet.ListBox1.ListCount > 0 Then
                With ActiveCell
                    .Value = ActiveSheet.ListBox1.Column(0, 0)
                    .Offset(1, 0) = ActiveSheet.ListBox1.Column(1, 0)
                    Hide
                    .Offset(1).Select
                End With
            End If
        End If
    End If
    Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • From.xls
    83.5 KB · Đọc: 15
Upvote 0
Xin chào Bác HieuCD, Anh leonguyenz.
Oanh Thơ đã test thử code của Bác và Anh. Kết quả cả 2 đều đúng với mong muốn của OT rồi ạ.
Cảm ơn Bác & Anh , cảm ơn GPE rất nhiều.
 
Upvote 0
Xin chào Bác HieuCD, Anh leonguyenz.

Oanh Thơ muốn đưa thêm dữ liệu số lượng vào ô "E8" loay hoay một hồi chưa được ạ.
Nhờ Bác & Anh giúp đỡ ạ.

Trân trọng cảm ơn.
 
Upvote 0

File đính kèm

  • From.xls
    78 KB · Đọc: 5
Upvote 0

File đính kèm

  • From.xls
    77.5 KB · Đọc: 17
Upvote 0
Web KT
Back
Top Bottom