namkhanh.dangtran
Thành viên mới
![](/diendan/data/PhoToDanhHieu/gold.gif)
- Tham gia
- 5/3/11
- Bài viết
- 17
- Được thích
- 8
Thực ra mình muốn làm vậy để có thể khống chế việc nhập trùng số phiếu và mỗi phiếu có dữ liệu nhiều chỉ nhập 1 lần thui. Không biết còn có cách nào khác tạo nó không?
Theo giao diện mà bạn vừa đưa lên, tôi sửa lại, dùng SpreadSheet sẽ giúp ta đơn giản hóa code rất nhiều:Em mới chỉ nghĩ là làm được thế này thui ah. Anh không biết có thể làm bằng cách khác không? Anh xem dùm cho em với nhé!
Private Sub CommandButton1_Click()
Dim sRng As Range
Set sRng = Sheet1.Range("A65536").End(xlUp).Offset(1)
With Me.Spreadsheet1.Range("A1").CurrentRegion
If .Count > 1 Then
sRng.Offset(, 0).Resize(.Rows.Count, 1).Value = SoPhieu.Text
sRng.Offset(, 1).Resize(.Rows.Count, 1).Value = Ngay.Value
sRng.Offset(, 2).Resize(.Rows.Count, 5).Value = .Value
End If
End With
End Sub
Private Sub Spreadsheet1_SheetChange(ByVal Sh As OWC11.Worksheet, ByVal Target As OWC11.Range)
On Error GoTo ExitSub
If Sh.Name = "Sheet1" Then
If Target.Column = 3 Or Target.Column = 4 Then
Sh.Cells(Target.Row, 5) = Sh.Cells(Target.Row, 3) * Sh.Cells(Target.Row, 4)
End If
End If
ExitSub:
End Sub
Theo giao diện mà bạn vừa đưa lên, tôi sửa lại, dùng SpreadSheet sẽ giúp ta đơn giản hóa code rất nhiều:
View attachment 60914
Với giao diện trên thì code chỉ cần vầy là đủ:
PHP:Private Sub CommandButton1_Click() Dim sRng As Range Set sRng = Sheet1.Range("A65536").End(xlUp).Offset(1) With Me.Spreadsheet1.Range("A1").CurrentRegion If .Count > 1 Then sRng.Offset(, 0).Resize(.Rows.Count, 1).Value = SoPhieu.Text sRng.Offset(, 1).Resize(.Rows.Count, 1).Value = Ngay.Value sRng.Offset(, 2).Resize(.Rows.Count, 5).Value = .Value End If End With End Sub
Đương nhiên bạn vẫn có thể cải tiến thế nào đó tùy ý, chẳng hạn để khống chế nhập trùng, bạn dùng sự kiện Spreadsheet1_SheetChange tại cột A, bằng cách dùng hàm COUNTIF hoặc dùng Dictionary ObjectPHP:Private Sub Spreadsheet1_SheetChange(ByVal Sh As OWC11.Worksheet, ByVal Target As OWC11.Range) On Error GoTo ExitSub If Sh.Name = "Sheet1" Then If Target.Column = 3 Or Target.Column = 4 Then Sh.Cells(Target.Row, 5) = Sh.Cells(Target.Row, 3) * Sh.Cells(Target.Row, 4) End If End If ExitSub: End Sub
------------------------
Nói ngoài lề: Tôi cũng giống ý kiến viethoai và Lê Duy Thương, tôi chỉ dùng Form khi tôi cảm nhận được sự cần thiết đến mức không thể nhập trực tiếp được... Nói thật, với form này, tôi chẳng thấy sự cần thiết của Form nó nằm ở chổ nào nữa (dợt code chơi cho vui thì chẳng nói làm gì) ---> Còn nếu làm form chỉ đê cho nó.. PRO hơn thì thôi... miễn đi
Private Sub Spreadsheet1_SheetChange(ByVal Sh As OWC11.Worksheet, ByVal Target As OWC11.Range)
On Error GoTo ExitSub
If Sh.Name = "Sheet1" Then
If Target.Column = 3 Or Target.Column = 4 Then
Sh.Cells(Target.Row, 5) = Sh.Cells(Target.Row, 3) * Sh.Cells(Target.Row, 4)
End If
End If
ExitSub:
End Sub
Có phải bạn dùng Excel 2007 không nhỉ?Cám ơn anh @ndu nhiều lắm! Nhưng không hiểu sao máy tính của em mở file của anh làm ra thì nó toàn báo lỗi:
Em nghĩ là nó bị lỗi gì đó? Hoặc máy tính của em thiếu phần nào đó mà chưa được cài đặt? Nhờ anh tư vấn thêm!
Có phải bạn dùng Excel 2007 không nhỉ?
Sang topic này, cũng có người thắc mắc trong này hôm nay:
http://www.giaiphapexcel.com/forum/showthread.php?47341-Bị-lỗi-Error-loading-DLL-Nhờ-GPE
Ít ra bạn cũng phải cho tôi xem lỗi ấy là gì chứEm dùng cả 2 anh ah! Cứ khi Click vào nút FORM thì nó báo lỗi vậy. Em cứ nghĩ nó bị lỗi thiếu cái gì đó.
Ít ra bạn cũng phải cho tôi xem lỗi ấy là gì chứ
Private Sub Spreadsheet1_SheetChange(ByVal Sh As OWC11.Worksheet, ByVal Target As OWC11.Range) 'Loi vay do anh ah!
On Error GoTo ExitSub
If Sh.Name = "Sheet1" Then
If Target.Column = 3 Or Target.Column = 4 Then
Sh.Cells(Target.Row, 5) = Sh.Cells(Target.Row, 3) * Sh.Cells(Target.Row, 4)
End If
End If
ExitSub:
End Sub
Bạn ơi, là tôi muốn hỏi cái CÂU THÔNG BÁO LỖI ấyCụ thể lả: Khi em chọn nút FORM thì nó lỗi và hiện luôn:
Vào menu Tools\References xem thử lỗi chổ nào? (có MISSING gì gì đó không?)Vâng anh xem nhé! hình lỗi ở đây:
Thế đường link tôi đưa ở trên bạn đã đọc kỹ chưa? Có download Microsoft Office Web Components về cài chưa?Anh ơi, em đã vào đó tìm rùi nhưng không tìm ra. Anh chỉ dùm em nhé!
Thế đường link tôi đưa ở trên bạn đã đọc kỹ chưa? Có download Microsoft Office Web Components về cài chưa?
http://www.giaiphapexcel.com/forum/showthread.php?47341-B%E1%BB%8B-l%E1%BB%97i-Error-loading-DLL-Nh%E1%BB%9D-GPE&p=302099#post302099
Tôi đoán máy của bạn thiếu thành phần này
Ngoài ra, bạn có kiểm tra cái Form mà tôi thiết kế chưa? Có nhìn thấy SpreadSheet nằm trên Form không? (kiểm tra trong cửa số code chứ không phải chạy code)
------------
Bạn có thể thí nghiệm thế này: Mở file mới, chèn 1 form rồi tự mình vẽ SpreadSheet lên Form... Bạn có làm được điều này không?
Kiểm tra từng đoạn 1 bạn ơi... Tiếc là tôi không ngồi trên máy của bạn, nếu không thì chắc chắn có thể biết được nguyên nhân gì trong 5 phút
Hic...
Không có thì cài vào thôi.. Đã nói ở trên, bạn còn hỏi gì nữaAnh ơi, sao máy tính của em không có thành phần SpreadSheet nhỉ!! Em muốn tìm hiểu nó mà không thấy có? Anh chỉ dùm cho em nhé!
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2