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
 
Đã sửa cột số lượng, xem trong file đính kèm nhe.

Xin chào Anh leonguyenz ,
Trong "ListBox1" hiện đang có 3 cột dữ liệu . OT muốn set kích thước riêng cho mỗi cột thì code sẽ thêm dòng nào ạ.
Làm sao để tổng kích thước của "ListBox1" vẫn là: .Width = ActiveCell.Width * 1.5
Cảm ơn Anh.
 
Upvote 0
Xin chào Anh leonguyenz ,
Trong "ListBox1" hiện đang có 3 cột dữ liệu . OT muốn set kích thước riêng cho mỗi cột thì code sẽ thêm dòng nào ạ.
Làm sao để tổng kích thước của "ListBox1" vẫn là: .Width = ActiveCell.Width * 1.5
Cảm ơn Anh.
Thêm dòng sau vào nhé:
Mã:
.ColumnWidths = "40;100;50"
Với thông số cột.
 
Upvote 0
Thêm dòng sau vào nhé:
Mã:
.ColumnWidths = "40;100;50"
Với thông số cột.
Cảm ơn Anh leonguyenz, nhiều ạ.
Anh cho OT hỏi thêm trong trường hợp OT muốn hiển thị tiêu đề của "ListBox1" thì sẽ xử lý thế nào ạ.
OT đã thêm:
.ColumnHeads = True
và sửa:
Mã:
With Sheet2
       dl = .[M6:P74].Value
End With
thành:
Mã:
With Sheet2
       dl = .[M5:P74].Value
End With
Mà chưa được ạ, nhờ Anh xem và giúp đỡ.
 
Upvote 0
Cảm ơn Anh leonguyenz, nhiều ạ.
Anh cho OT hỏi thêm trong trường hợp OT muốn hiển thị tiêu đề của "ListBox1" thì sẽ xử lý thế nào ạ.
OT đã thêm:
.ColumnHeads = True
và sửa:
Mã:
With Sheet2
       dl = .[M6:P74].Value
End With
thành:
Mã:
With Sheet2
       dl = .[M5:P74].Value
End With
Mà chưa được ạ, nhờ Anh xem và giúp đỡ.
Cái zu listbox tiêu đề này trong diễn đàn nói nhiều rồi đó bạn kiếm thử xem
 
Upvote 0
Cái zu listbox tiêu đề này trong diễn đàn nói nhiều rồi đó bạn kiếm thử xem
Cảm ơn thuyyeu99 đã quan tâm,
OT cũng đã tìm hiểu trong trường hợp này có thể sẽ không thể xử lý được vì:
ColumnHeads chỉ áp dụng khi dùng chung với RowSource.
Không biết có phải vậy không ạ? , nếu đúng như vậy thì trường hợp muốn sử dụng với RowSource thì code phải ra sao. Híc
 
Upvote 0
Cảm ơn thuyyeu99 đã quan tâm,
OT cũng đã tìm hiểu trong trường hợp này có thể sẽ không thể xử lý được vì:

Không biết có phải vậy không ạ?
Hihi lâu rồi mình không dùng tới mấy cái control trong excel nên mình cũng không nhớ rõ nữa. Mình nhớ mang máng bài viết của anh hoàng trong nghĩa có úp code đo, còn nếu bạn muốn đẹp thì dùng listview de hiển thị (ma nó không hien thi duoc unicode), còn gán dữ liệu thì cứ từ array ma gán xuống sheet
 
Upvote 0
Tiêu đề Listbox lấy trên Range thì được.
Chưa thấy cách lấy trực tiếp từ mảng.
 
Upvote 0
Hihi lâu rồi mình không dùng tới mấy cái control trong excel nên mình cũng không nhớ rõ nữa. Mình nhớ mang máng bài viết của anh hoàng trong nghĩa có úp code đo, còn nếu bạn muốn đẹp thì dùng listview de hiển thị (ma nó không hien thi duoc unicode), còn gán dữ liệu thì cứ từ array ma gán xuống sheet
Dạ vâng, OT cảm ơn leonguyenz đã giúp đỡ.
Dữ liệu đưa ra ngoài sheet (cột MNO, đang để ẩn).
 

File đính kèm

  • From.xls
    85.5 KB · Đọc: 19
Upvote 0
Dữ liệu đưa ra ngoài sheet (cột MNO, đang để ẩn).
OT Thấy rồi ạ, :D
Một ý tưởng rất hay ạ, code cũng không thấy chậm thêm tý nào :)
Mã:
Tmp = Sheet1.Range("M6").Resize(j, 3).Address(0, 0)
        'ActiveSheet.ListBox1.List = kQ
        ActiveSheet.ListBox1.ListFillRange = Tmp
Cảm ơn Anh leonguyenz rất nhiều.
 
Upvote 0
Em có 1 vấn đề như sau, rất mong mọi người chỉ giúp em:

Em tạo ra 1 form, trên đó có 1 textbox mã khách hàng và 1 nút tạo mã khách hàng. Em muốn khi click vào nút mã khách hàng thì nó sẽ tự động tạo ra 1 mã khách hàng mới và hiển thị lên ô textbox theo quy tắc như sau:
1. Nó sẽ tìm trong: sheet1.Range("B2 : B"& dong_cuoi) để lấy mã khách hàng cuối cùng.
2. Nó sẽ tạo ra mã khách hàng tăng 1 đơn vị, nhưng mã khách hàng được format như sau: "ABC"+2 số cuối của năm hiện tại+000
Ví dụ: các mã KH hiện có: ABC19001, ABC19002 ==> mã mới khi tạo ra sẽ là ABC19003 . Và nếu sang năm 2020 thì mã khách hàng đầu tiên của năm mới đc tạo sẽ phải tự reset 3 số cuối để đc mã ABC20001

Rất mong mọi người bớt chút thời gian giúp đỡ em.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tham khảo cái này của mình & tùy cơ hiệu chỉnh lại nếu muốn
Mã KH gồm 7 kí tự, trong đó 3 ký tự đầu không đổi;
Kí tự thứ 4 chỉ năm hiện hành; "I" là biểu thị năm 2019; Năm sau sẽ là "J"
Cuối là 3 kí số sẽ tăng dần theo tuần tự.
Chúc bạn tuần làm việc nhiều hiệu quả.
 

File đính kèm

  • Mã.rar
    11.3 KB · Đọc: 14
Upvote 0
Rãnh rỗi viết thêm cho bạn phương án tạo mã KH theo ngày liên lạc (NLL) đầu tiên
Mã gồm chỉ 5 ký tự
Kí tự đầu chỉ năm của NLL; Ký ự thứ 2 chỉ tháng của NLL & thứ 3 chỉ ngày
2 ký số cuối để phân biệt sự tăng dần vế NLL trong 1 ngày
Trang tính ban đầu có dạng:
214879
Sau khi chạy macro có nội dung:
PHP:
Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Sub ymdID()
 Dim MaKH As String, MaYMD As String, MaTam As String, MyAdd As String
 Dim Cls As Range, Rng As Range, sRng As Range
 Dim Rws As Long, Num As Integer
 On Error Resume Next
 
 With Sheets("YMD")
    Rws = .[d1].CurrentRegion.Rows.Count
    Set Rng = .[B1].Resize(Rws)
    Rng.Offset(, -2).Value = Space(0)
    For Each Cls In .Range(.[d2], .[d2].End(xlDown))
        MaYMD = idYMD(Cls.Value)
        Set sRng = Rng.Find(MaYMD, , xlFormulas, xlPart)
        If sRng Is Nothing Then
            Cls.Offset(, -2).Value = MaYMD & "00"
        Else
            MyAdd = sRng.Address
            Do
                MaTam = sRng.Value
                Set sRng = Rng.FindNext(sRng)
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
            Num = CInt(Right(MaTam, 2)) + 1
            Cls.Offset(, -2).Value = MaYMD & Right("0" & CStr(Num), 2)
            Num = 0
        End If
    Next Cls
 End With
End Sub
Mã:
Function idYMD(Optional Dat As Date)
If Dat = 0 Then Dat = Date
idYMD = Mid(Alf, Year(Dat) - 2000, 1) & Mid(Alf, Month(Dat) + 1, 1)
idYMD = idYMD & Mid(Alf, Day(Dat) + 1, 1)
End Function

Ta thu được kết quả mã KH (ở cột 'B') như hình sau:

214881
 

File đính kèm

  • 1554642582792.png
    1554642582792.png
    54.3 KB · Đọc: 2
Lần chỉnh sửa cuối:
Upvote 0
Anh chị cho em hỏi. Làm thế nào để 02 userform cùng chạy song song, kiểu như 01 userform chính và 01 userform phụ ấy
 
Upvote 0
Mình tham khảo File theo dõi công văn của tác giả be09. Mình thực hiện theo nhưng khi nhập lớp tìm kiếm và lick vào listbox thì bị lỗi. Nhờ các bạn chỉ giúp cách sửa lỗi. Xin cảm ơn.
 

File đính kèm

  • Book1.xlsm
    31.5 KB · Đọc: 9
Upvote 0
Xin mọi người giúp em với:

File của em có 2 sheet như sau:
- Sheet 1 là sheet Đơn hàng: là sheet tổng hợp các đơn hàng trong 1 năm hoặc nhiều năm. Các đơn hàng khác nhau sẽ có mã đơn hàng khác nhau. Nhưng 1 đơn hàng mà có nhiều sản phẩm thì mỗi sản phẩm lại nằm trên 1 dòng khác nhau và có chung nhau mã đơn hàng.
- Sheet 2 là sheet In đơn hàng: ở sheet này em có tạo 1 khung sẵn các dữ liệu cột cần lấy ra từ sheet Đơn Hàng. Em muốn là khi em nhập 1 mã đơn hàng bất kì thì nó sẽ tự động tìm kiếm trong sheet đơn hàng và điền thêm các dòng vào khung có sẵn.
Ví dụ: Đơn hàng mã ABC03 có 3 sản phẩm thì nó sẽ tự động thêm 3 dòng vào khung ở sheet 2, đơn hàng mã ABC01 có 1 sản phẩm thì thêm 1 dòng.

Chốt lại vấn đề là em muốn tạo 1 cái khung để in đơn hàng, nhưng số dòng thể hiện các sản phẩm đc linh hoạt theo thực tế chứ ko phải tạo sẵn để thừa rồi tìm kiếm dữ liệu điền vào sau.
Thật sự là do trình độ kém nên em cũng ko biết phải xử lý cái này kiểu gì luôn. Mong mọi người chỉ bảo giúp em.
 

File đính kèm

  • Book1.rar
    12.1 KB · Đọc: 6
Upvote 0
Mình tham khảo File theo dõi công văn của tác giả be09. Mình thực hiện theo nhưng khi nhập lớp tìm kiếm và lick vào listbox thì bị lỗi. Nhờ các bạn chỉ giúp cách sửa lỗi. Xin cảm ơn.
Chổ
Mã:
For ii = 1 To 5
thay bằng
Mã:
For ii = 1 To 9
 
Upvote 0
Web KT
Back
Top Bottom