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
 
cảm ơn bài làm của bạn ba tê và ý kiến đóng góp của các bạn trong diễn đàn
nhưng ý mình là khi dữ liệu được cập nhật từ sheet1 sang sheet2 thì dòng tổng cộng tự nhảy xuống các dòng tiếp theo mà không bị mất đi và dưới dòng tổng cộng mình có thể chèm thêm thông tin cho người lập và trưởng phòng ký tên vào đó.mình cũng đã thử làm cho dòng tổng cộng cách đó 2 đến 3 nghìn dòng nhưng như vậy mỗi lần xem kết quả và in thì bất tiện quá. rất mong nhận được sự giúp đỡ của các bạn
 
Upvote 0
Về dòng tổng:
Sau khi tổng hợp, chắc chắn sẽ xác định được dòng cuối. Tại dòng cuối + 1 gán 1 công thức FormulaR1C1 chắc không có gì khó.

Về chỗ ký tên:
Tạo sẵn 1 lô những tên họ chức vụ ở đâu đó, dùng code copy paste vào dòng cuối + 2 hoặc dòng cuối + 3. Cũng nhanh thôi.

Tóm lại: Xác định dòng cuối sau khi tổng hợp.
 
Upvote 0
cảm ơn bài làm của bạn ba tê và ý kiến đóng góp của các bạn trong diễn đàn
nhưng ý mình là khi dữ liệu được cập nhật từ sheet1 sang sheet2 thì dòng tổng cộng tự nhảy xuống các dòng tiếp theo mà không bị mất đi và dưới dòng tổng cộng mình có thể chèm thêm thông tin cho người lập và trưởng phòng ký tên vào đó.mình cũng đã thử làm cho dòng tổng cộng cách đó 2 đến 3 nghìn dòng nhưng như vậy mỗi lần xem kết quả và in thì bất tiện quá. rất mong nhận được sự giúp đỡ của các bạn
Yêu cầu và ví dụ không cụ thể nên kết quả không như ý, tự bạn rút kinh nghiệm đi.
leanhtuan.act: Lúc đầu bạn có nói các dòng nguời lập, trưởng phòng ... và cái quái gì đó ở dưới không?
Híc! Chán.
 
Lần chỉnh sửa cuối:
Upvote 0
Hoàn thiện bảng nhập

Rất cần sự giúp đỡ của các bạn
Mình sẽ nói qua cách hoạt dộng của bảng tín: khi bấm nút nhập dữ liệu ta sẽ nhập dữ liệu trong bảng nhập, bằng cách bám nút tạo mới ta bắt đầu nhập, nhập xong bấm nút lưu thêm thì dữ liệu sẽ tự lưu vào các sheet TE, HN, … nó sẽ tự lưu theo 2 giá trị chữ cái đầu của mã thẻ.
Bảng tín của mình đến khúc đó rồi nhưng mình còn một số cái muốn làm thêm cho bảng tín hoàn thiện hơn nên mình viết bài này để mong các bạn giúp.
Ý của mình muốn thêm cho bảng nhập là sau khi nhập với số lượng lớn cho các sheet chi tiết thì cuối mỗi sheet đều có dòng tổng cộng và dòng ghi chú như: người lập, giám đốc… giống như trong sheet CK mình làm ví dụ
Và cho mình hỏi thêm là không biết vì sao trong cột Công khám khi mình kéo Sum thì nó không cho giá trị tổng như các cột khác, nhờ các bạn sửa cho mình với.
 

File đính kèm

  • GPEX.rar
    49.5 KB · Đọc: 106
Lần chỉnh sửa cuối:
Upvote 0
tôi có một file excel gồm 1000 dòng , 5 cột , tôi muốn chia thành 4 file nhỏ .
xin các bạn chỉ cho cách
thank.
 
Upvote 0
Rất cần sự giúp đỡ của các bạn
Mình sẽ nói qua cách hoạt dộng của bảng tín: khi bấm nút nhập dữ liệu ta sẽ nhập dữ liệu trong bảng nhập, bằng cách bám nút tạo mới ta bắt đầu nhập, nhập xong bấm nút lưu thêm thì dữ liệu sẽ tự lưu vào các sheet TE, HN, … nó sẽ tự lưu theo 2 giá trị chữ cái đầu của mã thẻ.
Bảng tín của mình đến khúc đó rồi nhưng mình còn một số cái muốn làm thêm cho bảng tín hoàn thiện hơn nên mình viết bài này để mong các bạn giúp.
1./ Ý của mình muốn thêm cho bảng nhập là sau khi nhập với số lượng lớn cho các sheet chi tiết thì cuối mỗi sheet đều có dòng tổng cộng và dòng ghi chú như: người lập, giám đốc… giống như trong sheet CK mình làm ví dụ
2./ Và cho mình hỏi thêm là không biết vì sao trong cột Công khám khi mình kéo Sum thì nó không cho giá trị tổng như các cột khác, nhờ các bạn sửa cho mình với.
1./ Không cần tạo nhiều sheet, ta chỉ cần tạo 1 sheet để chứa dữ liệu đã trích lọc là được.

Mã:
Private Sub CommandButton6_Click()
Dim strName As String
Dim endR As Integer
    strName = InputBox(Prompt:="Vui long go ma so can trich loc.", _
          Title:="Go ma so trich loc", Default:="CK")
        If strName = vbNullString Then
           Exit Sub
        Else
            Sheets("TrichLoc").Range("A4:L65000").ClearContents
            HS.AutoFilterMode = False
            With HS.Range("A4").CurrentRegion
                .AutoFilter Field:=4, Criteria1:=strName & "*"
                .Copy Sheets("TrichLoc").Range("A4")
            End With
            
            With Sheets("TrichLoc")
                endR = .Range("d65000").End(xlUp).Row + 1
                .Range("A1") = "B" & ChrW(7842) & "NG T" & _
                     ChrW(7892) & "NG H" & ChrW(7906) & "P CP KCB BHYT " & strName
                .Range("B" & endR) = "T" & ChrW(7893) & "ng C" & ChrW(7897) & "ng:"
                For i = 6 To 12
                    .Cells(endR, i).FormulaR1C1 = "=SUM(R[-" & endR - 4 & "]C:R[-1]C)"
                Next
                .Range("J" & endR + 2) = "Ngày     tháng      n" & ChrW(259) & "m"
                .Range("J" & endR + 5) = "Giám " & ChrW(272) & ChrW(7889) & "c"
                .Range("F" & endR + 5) = "Kê Toán Tr" & ChrW(432) & ChrW(7903) & "ng"
                .Range("B" & endR + 5) = "Ng" & ChrW(432) & ChrW(7901) & "i L" & ChrW(7853) & "p"
                .Select
            End With
            
            HS.ShowAllData
        End If
        
End Sub

2./ Do cột đó bạn nhập dữ liệu vào là dạng text nên không cộng được. Cách khắc phục là chuyển về dạng số, code cũng thêm như sau:

Mã:
Private Sub CommandButtonOK_Click()
'..........
With HS
.Cells(i, 2) = UCase(Me.TextName)
.Cells(i, 3) = Me.TextMSHS
.Cells(i, 4) = UCase(Me.txtText & Me.TextNamsinh)
.Cells(i, 5) = CDate(Me.TextSDT.Value)
.Cells(i, 6) = Me.TextDC.Value
.Cells(i, 7) = Me.TextTENCHA.Value
.Cells(i, 8) = Me.TextNGHECHA.Value
.Cells(i, 9) = Me.TextTENME.Value
.Cells(i, 10) = Me.TextNGHEME.Value
.Cells(i, 11) = Me.TextNoisinh[B][COLOR=#ff0000].Value[/COLOR][/B] [COLOR=#008000][B]'CHINH CHO NAY[/B][/COLOR]
.Cells(i, 12) = Me.TextBox1.Value
End With

If Me.dg > Me.Navi1.Max Then Me.Navi1.Max = Me.dg
setsott
xem
'ChuyenDL
End Sub
 

File đính kèm

  • GPEX1.rar
    49 KB · Đọc: 274
Upvote 0
Mình xin mọi người chỉ giúp vấn đề sau:
Trong Form của mình có ComboBox1.
Khi mình khởi động Form lên mình muốn gán 1 giá trị mặc định cho ComboBox1. (Mình dùng ComboBox1.Value = "GiaTriGan")
Rồi khi sự kiện change Combobox1 xảy ra mình sẽ thực hiện 1 thủ tục.
Như vậy khi mình gán giá trị mặc định, nó đã xảy ra sự kiện change Combobox1 và chạy luôn thủ tục.
Mình muốn làm sao để gán giá trị mặc định mà thủ tục đi kèm sự kiện change ComboBox1 không thực thi.

Xin cảm ơn. Không biết mình diễn đạt có kém quá không?
 
Upvote 0
Mình xin mọi người chỉ giúp vấn đề sau:
Trong Form của mình có ComboBox1.
Khi mình khởi động Form lên mình muốn gán 1 giá trị mặc định cho ComboBox1. (Mình dùng ComboBox1.Value = "GiaTriGan")
Rồi khi sự kiện change Combobox1 xảy ra mình sẽ thực hiện 1 thủ tục.
Như vậy khi mình gán giá trị mặc định, nó đã xảy ra sự kiện change Combobox1 và chạy luôn thủ tục.
Mình muốn làm sao để gán giá trị mặc định mà thủ tục đi kèm sự kiện change ComboBox1 không thực thi.

Xin cảm ơn. Không biết mình diễn đạt có kém quá không?
Bạn thử làm thế này xem:
Private Sub UserForm_Initialize()
'DUA DU LIEU VAO FORM
ComboBox1.AddItem "B"
ComboBox1.AddItem "C"
ComboBox1.AddItem "D"
End Sub
 
Upvote 0
Bạn thử làm thế này xem:
Private Sub UserForm_Initialize()
'DUA DU LIEU VAO FORM
ComboBox1.AddItem "B"
ComboBox1.AddItem "C"
ComboBox1.AddItem "D"
End Sub

Cảm ơn bạn đã trả lời giúp.
Nhưng có lẻ do mình diễn đạt tệ quá nên bạn chưa hiểu vấn đề của mình.
Private Sub UserForm_Initialize()
'DUA DU LIEU VAO FORM
ComboBox1.AddItem "B"
ComboBox1.AddItem "C"
ComboBox1.AddItem "D"
' Gán giá trị mặc định là "B"
ComboBox1.Value = "B"

End Sub[/QUOTE]

Private Sub ComboBox1_Change()
Dim Value_Se
Value_Se = ComboBox1.Value
msgbox "Ban quyet dinh chuyen thanh : " &Value_Se
End Sub

Vấn đề là nếu mình viết như trên thì khi khởi động, ComboBox1 gán giá trị mặc định là B thì nó cũng sẽ thực thi thủ tục ComboBox1_Change
Trong khi đó mình muốn thủ tục chỉ xảy ra khi người dùng thay đổi nội dung chọn combobox1 thôi, còn khi gán giá trị mặc định thì không thực thi Sub change này.

Cảm ơn mọi người đã chú tâm! Mong được giúp đỡ
 
Upvote 0
Thử thế này xem sao
Private Sub UserForm_Initialize()
Application.EnableEvents = False
ComboBox1.AddItem "B"
ComboBox1.AddItem "C"
ComboBox1.AddItem "D"
Application.EnableEvents = True
End Sub
 
Upvote 0
Thử thế này xem sao
Private Sub UserForm_Initialize()
Application.EnableEvents = False
ComboBox1.AddItem "B"
ComboBox1.AddItem "C"
ComboBox1.AddItem "D"
Application.EnableEvents = True
End Sub

Không được quanghai1969 ạ.
Bạn xem thử nhé. Mình upload file lên bạn sửa cho nhanh.
Mặc dù Application.EnableEvents = False nhưng vấn chạy ComboBox_change khi mình gán giá trị mặc định bác ạ.
 

File đính kèm

  • GPE.xls
    21 KB · Đọc: 39
Upvote 0
Không được quanghai1969 ạ.
Bạn xem thử nhé. Mình upload file lên bạn sửa cho nhanh.
Mặc dù Application.EnableEvents = False nhưng vấn chạy ComboBox_change khi mình gán giá trị mặc định bác ạ.
Hướng dẫn bạn 1 đường, bạn làm 1 nẻo mà.
 

File đính kèm

  • Copy of GPE.rar
    10 KB · Đọc: 103
Upvote 0
Hướng dẫn bạn 1 đường, bạn làm 1 nẻo mà.

Hic. Bác mắng vậy oan quá.
Vấn đề là sau khi đưa Array vào list thả xuống của ComboBox em muốn mặc định giá trị chọn của ComboBox là thằng "B". Và em muốn khi thực hiện mặc định, nó không thực thi cái Sub ComboBox1_change.
Cái Sub ComboBox1_change chỉ thực thi khi User chọn thay đổi list trong comboBox thôi.

Cảm ơn bác đã nhiệt tình tham gia với em.
 
Upvote 0
Hic. Bác mắng vậy oan quá.
Vấn đề là sau khi đưa Array vào list thả xuống của ComboBox em muốn mặc định giá trị chọn của ComboBox là thằng "B". Và em muốn khi thực hiện mặc định, nó không thực thi cái Sub ComboBox1_change.
Cái Sub ComboBox1_change chỉ thực thi khi User chọn thay đổi list trong comboBox thôi.

Cảm ơn bác đã nhiệt tình tham gia với em.

Hay là muốn thế này.
 

File đính kèm

  • Copy of GPE.rar
    10.2 KB · Đọc: 134
Upvote 0
e muốn trên form Cập nhật TT có:
Nút Thêm : sau khi nhập dl vào ấn nút Thêm thì nó sẽ tự chèn Thông tin vào cuối DS và tự đánh stt cũng như cho dòng TT đó vào Bảng ds
Nút Hủy : sau khi Thêm mà thấy sai thì ấn nút Hủy ạ
Nút save : sau khi Thêm đúng thì ấn nút Save lưu lại

Mới học mong ae chỉ dẫn ạ
e k bít chèn file đính kèn nữa ạ

http://up.4share.vn/f/6b595c5353525c59/BT2.xlsm
 
Lần chỉnh sửa cuối:
Upvote 0
em có tạo 1 combobox userform trong vba excel
code như sau:

Private Sub ComboBox1_DropButtonClick()
with combobox1
.AddItem "Centimeters to Inches"
.AddItem "Hectares to Acres"
.AddItem "Liters to Gallons"
end with
End Sub

nhưng mỗi lần em mở cái combobox ra thì số item trong combobox lại tăng gấp đôi, em đã thử nhiều cách và tham khảo trên mạng nhưng không thấy có hướng dẫn về vấn đề này, mong các anh chị có thể giúp em khắc phục vấn đề này với ạ
 
Upvote 0
em có tạo 1 combobox userform trong vba excel
code như sau:

Private Sub ComboBox1_DropButtonClick()
with combobox1
.AddItem "Centimeters to Inches"
.AddItem "Hectares to Acres"
.AddItem "Liters to Gallons"
end with
End Sub

nhưng mỗi lần em mở cái combobox ra thì số item trong combobox lại tăng gấp đôi


Làm gì có chuyện tăng gấp đôi.

Mỗi lần sẩy ra sự kiện DropButtonClick thì code thêm 3 mục vào Combobox1. Khi ta nhấn nút tamgiác ngược thì danh sách thả xuống được mở ra và sẩy ra sự kiện DropButtonClick nên có 3 mục mới được thêm vào ComboBox1. Khi ta click trên Form để đóng danh sách thả xuống (hoặc chọn mục nào đó trong ComboBox1) thì cũng sẩy ra sự kiện DropButtonClick và có 3 mục mới được thêm vào ComboBox1. Vậy cứ qua 1 chu kỳ "mở - đóng" danh sách thả xuống thì số mục trong ComboBox1 được tăng thêm 6.

Nói cách khác khi danh sách thả xuống được mở lần đầu thì ta đếm được 3 mục, khi mở lần 2, 3, 4, ... thì ta đếm thấy có 9, 15, 21, ... mục.

em đã thử nhiều cách và tham khảo trên mạng nhưng không thấy có hướng dẫn về vấn đề này, mong các anh chị có thể giúp em khắc phục vấn đề này với ạ

Nếu bạn có một lượng nhất định các mục cần có trong ComboBox1 thì bạn thêm chúng vào ComboBox1 bằng 1 lần thao tác thôi. Ví dụ bạn có thể "thao tác" trong UserForm_Initialize

Mã:
Private Sub UserForm_Initialize()
    With ComboBox1
        .AddItem "Centimeters to Inches"
        .AddItem "Hectares to Acres"
        .AddItem "Liters to Gallons"
    End With
End Sub
 
Upvote 0
em cám ơn anh ạ. e đã làm được rồi!
nếu anh chị không phiền cho em hỏi thêm 1 câu nữa ạ
[GPECODE=vb]
Sub Macro1()
ans = MsgBox("Do you want to excute?", vbYesNo, "Caution!")
If ans = vbNo Then
Exit Sub
Else
Call solve1
Range("Q5").Select
Range("q5").Value = "Specified"
Call save1
End If
End Sub
[/GPECODE]

đây là 1 super macro em viết để giải bài toán tối ưu r sau đó save kết quả lại, nếu chay từng macro riêng lẻ thì không có vấn đề gì nhưng khi gộp chúng vào 1 macro thì cái macro Solve1 (dùng để giải bài toán tối ưu) lại k chạy mà chỉ có cái Save1 dùng để save kết quả chạy thôi ạ. mong mọi người giải đáp giúp e
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
em cám ơn anh ạ. e đã làm được rồi!
nếu anh chị không phiền cho em hỏi thêm 1 câu nữa ạ

Sub Macro1()
ans = MsgBox("Do you want to excute?", vbYesNo, "Caution!")
If ans = vbNo Then
Exit Sub
Else
Call solve1
Range("Q5").Select
Range("q5").Value = "Specified"
Call save1
End If

End Sub

đây là 1 super macro em viết để giải bài toán tối ưu r sau đó save kết quả lại, nếu chay từng macro riêng lẻ thì không có vấn đề gì nhưng khi gộp chúng vào 1 macro thì cái macro Solve1 (dùng để giải bài toán tối ưu) lại k chạy mà chỉ có cái Save1 dùng để save kết quả chạy thôi ạ. mong mọi người giải đáp giúp e

Nếu vấn đề thuộc loại: "2 + 2 = 5", tức "bình thường phải là thế này nhưng không hiểu sao nó lại thế kia" thì nói suông không đủ.
Nhiều người gửi mỗi cái ảnh mặt nhăn nhó. Anh A phán: "đau răng?". Anh B: "hôm qua ăn thịt chó?". Tôi không thích đoán mò. Bạn gửi file lên tôi xem xem có con ma nào đang "cò cưa" với ta không
 
Upvote 0
file đây ạ, anh xem giúp em với
 

File đính kèm

  • Project2-Trash-Template.xlsm
    62.4 KB · Đọc: 37
Upvote 0
Web KT
Back
Top Bottom