Nhở sửa code để save vào 1 lúc 3 sheet (1 người xem)

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

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

khamha

Không có việc gì khó...
Tham gia
4/6/10
Bài viết
662
Được thích
846
Nghề nghiệp
CNVC Laos
nhờ các bạn sửa lại cho nó save một lúc vào 03 sheet là sheet "SL" , sheet "N_Ma" và sheet "D_Ni"

Code:

Sub UpdateLogWorksheet()

Dim historyWks As Worksheet
Dim inputWks As Worksheet

Dim nextRow As Long
Dim oCol As Long

Dim myRng As Range
Dim myCopy As String
Dim myCell As Range

'cells to copy from Input sheet - some contain formulas
myCopy = "O8,M3,M4,E6,M6,E7,N7,B8,D9,D10,H9,H10,N9,N10,N21,F12,F13,N12,F14,N13,N14,F15,N15,F16,N16,F17,N17,F18,N18,F19,N19,F20,N20,A23,D25,J25,C26,J26,D27,J27,G28,N28,D29,D30,L30,D31,G32,G33,J31,L31,D34,H34,M34"

Set inputWks = Worksheets("Form")
Set historyWks = Worksheets("SL")

With historyWks
nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
End With

With inputWks
Set myRng = .Range(myCopy)

If Application.CountA(myRng) <> myRng.Cells.Count Then
MsgBox "KhamHa KeoTaVen: Please fill in all!"
Exit Sub
End If
End With

With historyWks
With .Cells(nextRow, "A")
.Value = Now
.NumberFormat = "mm/dd/yyyy hh:mm:ss"
End With
.Cells(nextRow, "B").Value = Application.UserName
oCol = 3
For Each myCell In myRng.Cells
historyWks.Cells(nextRow, oCol).Value = myCell.Value
oCol = oCol + 1
Next myCell
End With

'clear input cells that contain constants
With inputWks
On Error Resume Next
With .Range(myCopy).Cells.SpecialCells(xlCellTypeConstants)
.ClearContents
Application.GoTo .Cells(1) ', Scroll:=True
End With
On Error GoTo 0
End With
End Sub

cảm ơn các bạn.
 
Bạn gửi cái file lên đi, làm đến đâu còn Test đến đó chứ đoán chừng vừa nhức mắt vừa không đảm bảo.
 
Upvote 0
Bạn xem thêm trong file kèm theo

PHP:
Option Explicit
Sub UpdateLogWorksheet()
 On Error GoTo GPE
 Dim Sh, historyWks As Worksheet, inputWks As Worksheet
 Dim nextRow As Long, oCol As Long:             Dim myCopy As String
 Dim myRng As Range, myCell As Range
'cells to copy from Input sheet - some contain formulas'
 myCopy = "O8,M3,M4,E6,M6,E7,N7,B8,D9,D10,H9,H10,N9,N10,N21,F12,F13,N12,F14,N13,"
 myCopy = myCopy & "N14,F15,N15,F16,N16,F17,N17,F18,N18,F19,N19,F20,N20,A23,D25,J25,"
 myCopy = myCopy & "C26,J26,D27,J27,G28,N28,D29,D30,L30,D31,G32,G33,J31,L31,D34,H34,M34"
 Set inputWks = Worksheets("Form"):             Set historyWks = Worksheets("SL")
'    inputWks.Range(myCopy).Interior.ColorIndex = 38
'    For Each myCell In inputWks.Range(myCopy)
'      myCell.Value = "GPE" & CStr(oCol)
'      oCol = oCol + 1
'    Next myCell:          exit sub
'    With historyWks
1 '        nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row
'    End With
 With inputWks
   Set myRng = .Range(myCopy)
   If Application.CountA(myRng) <> myRng.Cells.Count Then
      MsgBox "KhamHa KeoTaVen: Please fill in all!":            Exit Sub
   End If
 End With
 For Each Sh In Worksheets
   Application.ScreenUpdating = False
   If Sh.Name <> "Form" Then
      With Sh.[A65500].End(xlUp).Offset(1)
         .Value = Now():         .NumberFormat = "mm/dd/yyyy hh:mm:ss"
         .Offset(, 1).Value = Application.UserName
         oCol = 2
2        For Each myCell In myRng.Cells
            .Offset(, oCol).Value = myCell.Value
            oCol = oCol + 1
         Next myCell
      End With
   End If
   Application.ScreenUpdating = True
 Next Sh
 
 Exit Sub
    With inputWks
'      On Error Resume Next
3         With .Range(myCopy).Cells.SpecialCells(xlCellTypeConstants)
              .ClearContents
              Application.Goto .Cells(1) ', Scroll:=True
         End With
  '    On Error GoTo 0
    End With
Err_:          Exit Sub
GPE:
   MsgBox Error, , Err
   GoTo Err_
End Sub
 

File đính kèm

Upvote 0
cảm ơn bạn SA_DQ đã giúp đỡ,nhưng mình gặp phải vẩn đề là không thể dùng code sửa dữ liệu được vì nó chỉ sửa dữ liệu trong sheet "SL" nhờ bạn làm ơn sửa lại cho mình với.
mình muốn là khi sửa nó sẽ sửa cả 03 sheet luôn.
Code:

Private Sub worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [F1]) Is Nothing Then
Dim Sh As Worksheet, Rng As Range, sRng As Range

Set Sh = Sheets("SL")
Set Rng = Sh.Range(Sh.[C3], Sh.[C65536].End(xlUp))
Set sRng = Rng.Find([F1].Value, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then
[C3].Resize(, 52).Value = sRng.Resize(, 52).Value
Else
MsgBox "Nothing"
End If
End If
Target.EntireColumn.AutoFit
End Sub
 
Upvote 0
Code trên là chép thêm các trị từ trang 'Form' sang 3 trang tính còn lại;

Chứ không fải sửa dữ liệu trong 3 trang tính còn lại đâu. Đoạn code của bạn cũng là chép từ 'Form' nhưng chỉ sang trang 'SL' mà thôi.

Trong đoạn

PHP:
For Each Sh In Worksheets  'Duyệt Tất Các Trang Tính'
   Application.ScreenUpdating = False
   If Sh.Name <> "Form" Then    'Nếu Tên Trang Tính # "FORM"'
      With Sh.[A65500].End(xlUp).Offset(1) 'Chép Vô Ô Đầu Của Dòng chọn:'
         .Value = Now():         .NumberFormat = "mm/dd/yyyy hh:mm:ss"
         .Offset(, 1).Value = Application.UserName  'Ô Tại Cột "B" Của Dòng Chọn'
         oCol = 2
2        For Each myCell In myRng.Cells 'Chép Lần Lượt Vùng Dữ Liệu Từ "FORM" Sang tuần Tự Các '
        ' Ô Từ Trái Sang Fải Kể Từ Cột "C" Trở Đi Cho Đến Hết:'
            .Offset(, oCol).Value = myCell.Value
            oCol = oCol + 1    
         Next myCell
      End With
   End If
   Application.ScreenUpdating = True
 Next Sh

Quả thật chưa hiểu í bạn sửa sẽ là sửa như thế nào đây?


Còn vấn đề nữa là trang 'FORM' do bị khóa nên macro sẽ báo lỗi nếu ta không dùng câu lệnh
On Error Rêsume Next
 
Upvote 0
Code trên là chép thêm các trị từ trang 'Form' sang 3 trang tính còn lại;

Chứ không fải sửa dữ liệu trong 3 trang tính còn lại đâu. Đoạn code của bạn cũng là chép từ 'Form' nhưng chỉ sang trang 'SL' mà thôi.

Trong đoạn

PHP:
For Each Sh In Worksheets  'Duyệt Tất Các Trang Tính'
   Application.ScreenUpdating = False
   If Sh.Name <> "Form" Then    'Nếu Tên Trang Tính # "FORM"'
      With Sh.[A65500].End(xlUp).Offset(1) 'Chép Vô Ô Đầu Của Dòng chọn:'
         .Value = Now():         .NumberFormat = "mm/dd/yyyy hh:mm:ss"
         .Offset(, 1).Value = Application.UserName  'Ô Tại Cột "B" Của Dòng Chọn'
         oCol = 2
2        For Each myCell In myRng.Cells 'Chép Lần Lượt Vùng Dữ Liệu Từ "FORM" Sang tuần Tự Các '
        ' Ô Từ Trái Sang Fải Kể Từ Cột "C" Trở Đi Cho Đến Hết:'
            .Offset(, oCol).Value = myCell.Value
            oCol = oCol + 1    
         Next myCell
      End With
   End If
   Application.ScreenUpdating = True
 Next Sh
Quả thật chưa hiểu í bạn sửa sẽ là sửa như thế nào đây?


Còn vấn đề nữa là trang 'FORM' do bị khóa nên macro sẽ báo lỗi nếu ta không dùng câu lệnh
On Error Rêsume Next

ý của mình la sheet "Lao" sẽ để lọc dữ liệu của tháng này còn sheet "NS" để lọc dữ liệu của tháng trước (khi làm bản báo cáo),còn vấn đề sửa là vì tất cả cảc sheet sẽ bị
khoá để không cho người khác sửa cấu trúc của bảng tính, trong trường hợp nhập dữ liệu sai thì sẽ dùng 1 sheet có chứa Code như đã nêu ở trên để sửa dữ liệu, nếu dùng ̣để sửadữ liệu ở trong sheet "SL" thì nó hoạt động rất tốt,nhưng vì lý do là tất cả dữ liệu ở trong 03 sheet phải giống nhau nên khi muốn sửa thì phải sửa cả 03 thì
khi tổng kếtmới đúng được. mong các bạn giúp mình sửa lại Code trên để nó có thể sửa được dữ liệu đồng thời trong 03 sheet với, hoặc có Code nào có thể đưa dữ liệu từ bảng tính raForm để sửa thì hay biết mấy,cảm ơn các bạn nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Ý́ của mình la sheet "Lao" sẽ để lọc dữ liệu của tháng này còn sheet "NS" để lọc dữ liệu của tháng trước (khi làm bản báo cáo),
1./ Lọc từ trang tính nào vậy bạn? Lọc từ 'SL", phải không?

Còn vấn đề sửa là vì tất cả cảc sheet sẽ bị
khoá để không cho người khác sửa cấu trúc của bảng tính, trong trường hợp nhập dữ liệu sai thì sẽ dùng 1 sheet có chứa Code như đã nêu ở trên để sửa dữ liệu, nếu dùng ̣để sửadữ liệu ở trong sheet "SL" thì nó hoạt động rất tốt,nhưng vì lý do là tất cả dữ liệu ở trong 03 sheet phải giống nhau nên khi muốn sửa thì phải sửa cả 03 thì khi tổng kết mới đúng được.
Mong các bạn giúp mình sửa lại Code trên để nó có thể sửa được dữ liệu đồng thời trong 03 sheet với, hoặc có Code nào có thể đưa dữ liệu từ bảng tính raForm để sửa thì hay biết mấy,cảm ơn các bạn nhiều.

Fía trên bạn nói 3 trang tính chứa dữ liệu các tháng khác nhau kia mà? Sao giống nhau được (Phiền bạn giải thích thêm chổ này)

Code của bạn cũng như code bài trên đang chỉ là chép mới từ 1 sô ô chỉ định trong 'Form' sang 1 hay 3 trang còn lại;
Nếu nói là sửa số liệu đã có trên 3 trang tính còn lại thì cần biết địa chỉ của những nơi cần sửa. (Mà địa chỉ đó mình đoán là ô thuộc cột 'A' ghi ngày tháng nhập trước đó!?)
Chờ tin từ bạn!



(húc cho tình hữu nghị Lào - Việt đời đời bền vững!
 
Upvote 0
Chào Bạn,Đọc Những Câu Hỏi Của Bạn Xong Nghĩ Lại Mới Thấy Là Mình Sai Bét Từ Đầu,Dữ Liệu Của Mình Cần Phải Được Lọc Như Sau Thì Mới Tổng Kết Được:
VíDụ: Tổng Kết Tháng 08 / 2010 Thì Cần Phải Lọc Như Sau:
1. Sheet "SL" Phải Lọc Được Dữ Liệu Từ Tháng 10 / 2009 Đến Tháng 07 / 2010 ( Kinh Phí Năm 2010 Được Tính Từ Tháng 10 / 2009 Đến Tháng 09 / 2010 )
2. Sheet "Lao" Để Lọc Dữ Liệu Của Tháng 08 / 2010 Cái Này Chắc Không Thành Vấn Đề.
3. Vì Vậy Khi Nhập Dữ Liệu Từ Form Vào Bảng Mà Sai Thì Phải Sửa Dữ Liệu Cả Trong 02 Sheet Thì Khi Tổng Kết Mới Đúng Được.
4. Ý Của Mình Là Như Thế,Nhờ Bạn Làm Quân Sư Giúp Mình Với,Cảm Ơn Bạn Nhiều.
 
Upvote 0
VíDụ: Tổng Kết Tháng 08 / 2010 Thì Cần Phải Lọc Như Sau:
1. Sheet "SL" Phải Lọc Được Dữ Liệu Từ Tháng 10 / 2009 Đến Tháng 07 / 2010 ( Kinh Phí Năm 2010 Được Tính Từ Tháng 10 / 2009 Đến Tháng 09 / 2010 )
2. Sheet "Lao" Để Lọc Dữ Liệu Của Tháng 08 / 2010 Cái Này Chắc Không Thành Vấn Đề.
3. Vì Vậy Khi Nhập Dữ Liệu Từ Form Vào Bảng Mà Sai Thì Phải Sửa Dữ Liệu Cả Trong 02 Sheet Thì Khi Tổng Kết Mới Đúng Được.
4. Ý Của Mình Là Như Thế,Nhờ Bạn Làm Quân Sư Giúp Mình Với,Cảm Ơn Bạn Nhiều.

Thường thì khi vận hành 1 CSDL (cơ sở dữ liệu) có các quá trình sau:

(*) Nhập mới ;
Ở đây dường như nhập mới từ 'Form' & từ 'Form' này ta chuyển sang 'SL'

(*) Sửa, xóa dữ liệu;
Mình cho rằng 'Lao' là dữ liệu của 1 tháng nào đó; Còn ở 'SL' là dữ liệu của năm (học hay tài khóa)
Như vậy, nếu cần sửa của tháng có ở 'Lao' thì fải tiến hàng sửa cả ở trang 'SL'. Nhưng cũng có khi chỉ cần sửa trong 'SL' mà thôi.
& bạn muốn sửa bằng cách chuyển chúng qua 'Form' & sau khi sửa xong, tùy thuộc vào việc cần đem chúng về lại 'SL' hay cả 'Lao' mà ta thực hiện theo yêu cầu.

(*) Báo cáo/tổng kết;
Chắc là trang tính tôi chưa đề cập đến tại bài này.

(**) Đến đây mình fải xin lỗi bạn là mình chưa hề đọc được font chữ trong các trang tính của bạn;
Hay thế này đi:
Bạn dùng chức năng [Table ]. . . [/table] để giới thiệu nội dung các trường trong các trang tính giúp nha.

Sau đây mình làm ví dụ cho bạn

STT|MaSV|HoTen|GDQP|GDTC|Triet|Toan1|Lý|Hoa|THoc|VeKT|NNgu|CoLT|. . .|
01|C6X001|Kham Sày|7.8|8.4|7.9|6.9|9.5|10|7.9|8.5|10|6.9|. . .|
02|6SX016|Xà Lam |9.4|7.9|6.9|9.5|10|7.9|8.5|10|6.9|8.9|. . .|

Chúng ta trao đổi thông suốt cái này trước nha.


( & mình sẽ đề nghị để tách fần các bài của chúng ta ra riêng 1 topic để tiện hơn trong trao đổi)

Thân ái
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Tôi có 1 bảng sau
25965134.jpg

Tại ô AG18 có hàm là =INDEX(T!$1:$65536,38,langID), tôi muốn đổi tên Hertha BSC thành Kaiserslautern thì phải làm thế nào.
Cái LangID có ý nghĩa là j vậy, mong các cao thủ chỉ giúp.
Thanks!
 
Upvote 0
Cảm Ơn Bạn Đã Giúp Đỡ,Hiện mình Đang Sửa Bảng Tính Của Mình Thành Tiếng Việt Để Tiện Cho Các Bạn Giúp Đỡ,Khi Nào Xong Mình Sẽ Đưa Lên Và Mình Cũng Nhất Trí
Với Bạn Về việc Tách Phần Bài Của Chúng Ta Ra Riêng 1 Topic.
 
Upvote 0
Chào bạn HYen17 ,Mình Đã Dịch Toàn Bộ Bảng Tính Sang Tiếng Việt,Bạn Xem Và Cho Y Kiến Giúp Mình Với.
Cảm Ơn Bạn.
 

File đính kèm

Upvote 0
Chúng ta tuần tự lại từ đầu cho chắc ăn, hén!

Trước tiên ta nói đến nút 'Save' trên 'Form' & gán với nó là macro 'UpdateLogWorksheet'
Hình như bạn muốn khi bấn nút này, thì dữ liệu đã có trên các ô mà macro đã liệt kê sẽ đem sang 2 trang 'Thang' & 'Nam' (Mình đã tự í đổi tên 2 trang này)
Nếu chép sang theo kiểu nhập dòng mới thì cũng fải viết/sửa lại macro;
Nếu chỉ chép sang 1 trang 'Thang' hay 'Nam' thì bạn cũng cho biết để còn cùng hoàn chỉnh với bạn nút lệnh này;

Ta fải hoàn chỉnh khâu nhập liệu trước tiên cho 1 cơ sở dữ liệu, điều này bạn fải đồng í thôi!
Bạn có thể ghi thêm lên bài cũ của bạn & nhấn nút cảm ơn lên bài này & chờ kết quả nha.

Chúc thêm 1 ngày vui mới!
 
Upvote 0
Trước tiên ta nói đến nút 'Save' trên 'Form' & gán với nó là macro 'UpdateLogWorksheet'
Hình như bạn muốn khi bấn nút này, thì dữ liệu đã có trên các ô mà macro đã liệt kê sẽ đem sang 2 trang 'Thang' & 'Nam' (Mình đã tự í đổi tên 2 trang này)
Nếu chép sang theo kiểu nhập dòng mới thì cũng fải viết/sửa lại macro;
Nếu chỉ chép sang 1 trang 'Thang' hay 'Nam' thì bạn cũng cho biết để còn cùng hoàn chỉnh với bạn nút lệnh này;

Ta fải hoàn chỉnh khâu nhập liệu trước tiên cho 1 cơ sở dữ liệu, điều này bạn fải đồng í thôi!
Bạn có thể ghi thêm lên bài cũ của bạn & nhấn nút cảm ơn lên bài này & chờ kết quả nha.

Chúc thêm 1 ngày vui mới!

Chào Bạn SA_DQ,Theo Mình Nghĩ Để Làm Cho Bảng Tính Rút Gọn Hơn Mình Làm Theo Cách Sau:
1. Mình Tạo Form Nhập Liệu Bằng User Form Thì Có Thể Đưa Dữ Liệu Từ Bảng Ra Sửa Một Cách Rễ
Hơn Và Bỏ Được Sheet “Sửa”.
2. Trong Hai Bảng Dữ Liệu Mình Quy Định Cho Nó Lọc Dữ Liệu Như Sau: Ví Dụ Tổng Kết Tháng 08/10
2.1. Sheet “Nam” Dùng Để Lọc Dữ Liệu Từ Tháng 10 / 2009 Đến Tháng 07 / 2010
2.2. Sheet “Thang” Dùng Để Lọc Dữ Liệu Tháng 08 / 2010
3. Trong Sheet “Baocao” Có Các Nút Lọc Như Sau: Năm,Tháng, Bộ Phận Nộp, Hình Thức K/D , Hình Thức Nộp
4. Vấn Đề Cảm Ơn Là Chuyện Nhỏ,Mình Định Xong Vụ Này Sẽ Hậu Tạ Các Bạn ( Cack Của Viettel )
Nơi Mình Ở Giáp Biên Giới Với Việt Nam,Cách Biên Giới 12 Km Và Ở Đây Chỉ Có Cack Của Viettel.
Ở Trên Là Ý Của Mình Các Bạn Xem Lại Có Thể Làm Được Như Vậy Không,Chân Thành Cảm Ơn
CácBạn.
* Nhân Đây Mình Cũng Gửi Luôn Cái User Form Để Các Bạn Làm Giúp Mình Với.
 

File đính kèm

Upvote 0
Khoan nói fần báo cáo, ta đang ở fần nhập dữ liệu thôi.

Như bạn mô tả, thì trang 'Nam' sẽ là trang lưu dữ liệu của bạn; Trang này lưu tất tần tật các records được nhập từ trang 'Fom' hay form nhập liệu mà bạn dự định hình thành và giới thiệu.

Khi đó, trang 'Thang' sẽ như báo cáo mà thôi; ta có thể rút trích dữ liệu bất kỳ tháng nào tư trang 'Nam' ra trang 'Thang' hay trang 'BCao' (Hay gộp chỉ 1 trang là được.)

Nhập từ form nhập liệu hay nhập từ trang tính thì ta cũng đều có thể kêu từ CSDL (ở 'Nam') ra chỉnh sửa & cập nhật lại cho nó vô CSDL.

Ta nên thực hiện ngay 2 bước sau:
1./ Đổi trang 'Nam' thành 'Data' hay tiếng Việt là 'CSDL'
2./ Đi vào xét macro nhập liệu đã đúng hết chưa. & Nhập thử vài chục records (12 tháng khác nhau kể từ 10/2009 trở lại đây


Còn chuyện nhập bằng form hay nhập bằng trang tính thì nó thế này:

Nhập bằng form nhập liệu sẽ ít nhiều khó khăn cho bạn khi cần bảo trì, chỉnh sửa form. (Chuyện này là tất yếu của 1 CSDL đang hoạt động).

Nhập bằng trang tính thì dễ bảo trì hơn, thân thiện hơn so với trình độ VBA của bạn hiện nay.

Vài lời cùng bạn & chúng ta hỗ trợ nhau thôi, đừng ấy nấy về chuyện hậu tạ.
 
Upvote 0
Cảm Ơn Bạn,Theo Mình Thì Nhập Dữ Liệu Từ USer Form Vào Bảng Tính Data Thì Hay Hơn Vì Lý Do:
1. Mình Có Thể Rễ Hơn Trong Việc Bảo Vệ Cấu Trúc Của Bảng Tính,Nếu Nhập Dữ Liệu Bằng Bảng Tính Thì Khi Ta Khóa Bảng Tính Thì Khi Sử Dụng Rất Hay Bị Lỗi.
2. Nhìn Đẹp Hơn Và Chuyên Nghiệp Hơn.
Hay Là Bạn Cứ Giúp Mình Tạo Form Nhập Liệu Bằng USer Form Mà Mình Gửi Lên Xem Sao.
Cảm Ơn Bạn.

Mình Nghĩ Nhập Liệu Bằng user Form Thì Nhìn Nó Đẹp Hơn,Chuyên Nghiệp Hơn,Còn Vấn Đề Rút Gọn Trang Tính Như Bạn Nói Mà Vẫ Đáp Ứng Được Khi Lọc Dữ Liệu Thì
Càng Tốt,Hay Bạn Cứ Làm Giúp Mình Nhập Liệu Bằng user Form Mà Mình Đã Gửi Lên Cũng Được,Cảm Ơn Bạn.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cảm Ơn, Hay Là Bạn Cứ Giúp Mình Tạo Form Nhập Liệu Bằng USer Form Mà Mình Gửi Lên Xem Sao.
Cảm Ơn Bạn.

Mình Nghĩ Nhập Liệu Bằng user Form Thì Nhìn Nó Đẹp Hơn,Chuyên Nghiệp Hơn,
Giúp Mình Nhập Liệu Bằng user Form Mà Mình Đã Gửi Lên Cũng Được,Cảm Ơn Bạn.

Bạn xem & viết tiếp trong macro xem sao nha!
 

File đính kèm

Upvote 0
Hôm Qua Mình Có Tải 01 File USerForm Về Và Sửa,Không Biết Nó Sai Ở Đoạn Nào Mà Không Dùng Được Các Bạn Làm Ơn Kiểm Tra Và Sửa Lại Cho Mình Với,Cảm Ơn Các Bạn
 

File đính kèm

Upvote 0
Chúng ta vừa được SMOD Thành Mỹ cho ra ở riêng, Chân thành cảm ơn Thành Mỹ nhiều.

Mình vừa thử tải file về thử & mở lên thấy bình thường mà.

Có xung đột vể font chữ gì không, File đó dùng unicode & Bạn thử mở lại bằng WINRAR xem sao?
 
Upvote 0
Xin Chân Thành Cảm Ơn Bạn Và SMOD Thành Mỹ Đã Giúp Đỡ Và Tạo Điều Kiện Cho Mình...Hôm Qua Mình Mày Mò Sửa Lại Cái USer Form Mà Mình Đã Đưa Lên,Ham Quá Sửa
Đến 06 Giờ Sáng Ngày Hôm Nay Mới Xong Được Khoảng 80 % ,Mình Chạy Thử Thấy Rất OK,Chỉ Riêng Cái Phần Code Bẫy Lỗi Khi Nhập Dữ Liệu Không Đầy Đủ Là Không Ổn Thôi,Nếu Xóa Nó Đi Thì Form Chạy Bình Thường Mình Lên Diễn Đàn Định Hỏi Các Bạn Nhưng Không Thấy Cái Chủ Đề Đấy Đâu ,Nên Mình Lại Tạo Chủ Đề Mới,mình Phải Công
Nhận Cái Excel Này Càng Làm Càng Thấy Hay Và Ham.
Theo Mình Thấy Nhập Dữ Liệu Bằng Cái Form Này Là Rất Ổn,Hôm nào mình Làm Xong Sẽ Đưa Lên Nhờ Bạn Kiể Tra Và Hoàn Chỉnh Cho Mình,Về Vấn Đề Bảng Lọc Dữ Liệu
Bạn Đã Nghĩ Ra Cách Làm Giúp Mình Chưa Có Tiến Chuyển Gì Bạn Báo Tin Cho Mình Nha...Đợi Tin Vui Từ Bạn.
Tiện Đây Bạn Cho Mình Hỏi Là Trong Form Nhập Liệu Kiểu Này Thì Có Thể Cộng Hoặc Trừ Được Không (Mình Định Cộng Tất Cả Các Loại Thuế Lại Sau Đó Trừ Cho Khoản
Thuế Đã Nộp Trước Và Thuế Còn Nợ Lại,Cái Này Nếu Mà Làm Trong Bảng Tính Thì Nặng Máy Lắm) Nếu Được Bạn Hướng Dẫn Cho Mình Với,Cảm Ơn Bạn Nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Xin lỗi vì sự trể nải

Hoàn Chỉnh Cho Mình,Về Vấn Đề Bảng Lọc Dữ Liệu
(2) Bạn Đã Nghĩ Ra Cách Làm Giúp Mình Chưa Có Tiến Chuyển Gì Bạn Báo Tin Cho Mình Nha...Đợi Tin Vui Từ Bạn.
(1) Tiện Đây Bạn Cho Mình Hỏi Là Trong Form Nhập Liệu Kiểu Này Thì Có Thể Cộng Hoặc Trừ Được Không (Mình Định Cộng Tất Cả Các Loại Thuế Lại Sau Đó Trừ Cho Khoản
Thuế Đã Nộp Trước Và Thuế Còn Nợ Lại,Cái Này Nếu Mà Làm Trong Bảng Tính Thì Nặng Máy Lắm) Nếu Được Bạn Hướng Dẫn Cho Mình Với,Cảm Ơn Bạn Nhiều.

(1) Bạn thử thêm câu lệnh như sau:
PHP:
.Offset(, 48).Value = CLng(Me!ThueKD) + CDbl(Me!ThueGTGT) + CDbl(Me!ThueTD) + CDbl(Me!ThueLTDN) _
      + CDbl(Me!ThueTD) - CDbl(Me!ThueCF)

Nói thêm:
(*) Vì trị trong các textBox dạng chuỗi, nên ta dùng hàm CLng() hay CDbl() chuyển chúng sang dạng ký số
(*) Dùng Clng() khi biết chắc dữ liệu ô đó không thể có số thập fân; Chắc ăn nhất thì dùng tất tần tật là CDbl()

(2) Mình chưa hình dung ra lọc sang bảng tháng theo ngày tháng của trường nào:
[Ngày,Thàng,NămH/T] hay [Ngày]
Với lại bạn hãy cho biết có trường nào chứa mã duy nhất của dữ liệu hay không?
(*) Hỏi thêm bạn là bạn có quy định, rằng khi nhập thiếu dữ liệu trường nào đó thì sẽ không nhập toàn bộ số liệu của Record đó không?
(Đây là tôi giả dụ: Nếu ta không nhập [Số theo dõi] thì record đó sẽ không được nhập, hay có sự nhắc nhỡ cần thiết, để người nhập sẽ fải nhập lại.)

Tựu chung lại là ta OK xong bước nhập liệu đã bạn à!

Vài lời cùng bạn & chúc ngày nghỉ cuối tuần vui vẻ!
 
Upvote 0
Bạn ChanhTQ@ Thân Mến,Mình Đọc Hướng Dẫn Của Bạn Xong Rồi Mà Chả Hiểu Cái Gì Cả ( Do Trình Độ Excel Của Mình Còn Kém Lắm ) Bạn Cho Mình Hỏi:
1. Cái Này:

.
Offset(, 48).Value = CLng(Me!ThueKD) + CDbl(Me!ThueGTGT) + CDbl(Me!ThueTD) + CDbl(Me!ThueLTDN) _ + CDbl(Me!ThueTD) - CDbl(Me!ThueCF)
Dùng Để Cộng Và Trừ Số Tiền Vào Ô 48 ?
Nếu Đúng Thì Mình Đưa Cái Code Đấy Vào Chỗ Nào ?
2. Cái Này:
Nói thêm:
(*) Vì trị trong các textBox dạng chuỗi, nên ta dùng hàm CLng() hay CDbl() chuyển chúng sang dạng ký số
(*) Dùng Clng() khi biết chắc dữ liệu ô đó không thể có số thập fân; Chắc ăn nhất thì dùng tất tần tật là CDbl()

Có Phải Sửa Tất Cả Các TextBox Để Nhập Số,Ví Dụ: TextThueKD Thì Đổi Thành CDblThueKD
3. Cách Lọc: Chúng Ta Bỏ Trường Thuế Của Tháng Và Gộp Nội Dung Để Lọc Vào Trường Thuế Của Năm ( Gọi Là Trường: Thuế Của Tháng,Năm)
Khi Ta Nhập Dữ Liệu Vào Trường Này Thì Phải Nhập Như Sau: VíDụ: Tháng 08 / 2010 Thì Nhập Là: 82010,Như Vậy Là Khi Ta Lọc Dữ Liệu Thì Sẽ Có Hình
Thức Như Sau: Ví Dụ: Tổng Kết Tháng 08 / 2010 Thì Sẽ Lọc:
Trong Sheet"Nam" Sẽ Lọc Dữ Liệu Từ Tháng 10 /2009 (102009) Đến Th́ang 7/2010 (72010)
Trong Sheet"Thang" Sẽ Lọc Dữ Liệu Tháng 8 /2010 (82010)
4.Mình Muốn Quy Định Khi Nhập Dữ Liệu Vào Form Như Sau: Những Ô Nhập Dữ Liệu Bằng Số Thì Bắt Buộc Phải Nhập Số,Trong Trường Hợp Không Có Dữ Liệu
Để Nhập Thì Phải Nhập Số 0 "Không" và Sẽ Hiện Nên Hướng Dẫn Là Phải Nhập Số ( Nếu Không Nhập Số Thì Sẽ Không Cho Nhập Ở Các Ô Tiếp Theo )
Trong Ô Ngày,Tháng,Năm Sẽ Hiện Nên Lic̣h Để Trọn.
5.Mình Muốn Thêm Có Code Va Nút Print Trong From Để In Tài Liệu ( In From )
Các Bạn Cố Găng Giúp Mình Với.Thank
 
Upvote 0
Để nhập liệu tính toán luôn thì bạn dùng sự kiện
Private Sub Textbox_Change()
On Error Resume Next
' Ở đây tôi chỉ đưa vào ví dụ thôi nghe còn bạn phải đưa vào code của bạn đấy
.Offset(, 48).Value = CLng(Me!ThueKD) + CDbl(Me!ThueGTGT) + CDbl(Me!ThueTD) + CDbl(Me!ThueLTDN) _ + CDbl(Me!ThueTD) - CDbl(Me!ThueCF)

End Sub

Còn tôi thường dùng nhân với 1 chứ không dùng CDbl()
 
Upvote 0
(1)
PHP:
Private Sub CommandButton6_Click()
 Dim Sh As Worksheet, Rng As Range
 Dim eRw As Long
   
 Set Sh = Sheets("CSDL"):                 Set Rng = Sh.[A65500].End(xlUp).Offset(1)
 eRw = Rng.Row
 With Rng
   .Value = Date:                         .Offset(, 1).Value = Application.UserName
   .Offset(, 3).Value = Me!Number:        .Offset(, 4) = Me!Ngay
   .Offset(, 6).Value = Me!SoDNghiep:     .Offset(, 7).Value = Me!TheoDoi
   .Offset(, 8).Value = Me!HoTen:         .Offset(, 9).Value = Me!DThoai
   .Offset(, 10).Value = Me!CuNgu:        .Offset(, 11).Value = Me!Nam
   .Offset(, 12).Value = Me!BFanNop:      .Offset(, 13).Value = Me!LoaiHinhKD
   .Offset(, 14).Value = Me!HThucNop:     .Offset(, 15).Value = Me!TGianNop
   .Offset(, 17).Value = Me!ThueKD
   .Offset(, 18).Value = Me!ThueGTGT:     .Offset(, 19).Value = Me!ThueTD:
   .Offset(, 20).Value = ThueLTDN:        .Offset(, 21).Value = Me!ThueLT
   .Offset(, 22).Value = Me!ThueMin:      .Offset(, 23).Value = Me!ThueCF
   .Offset(, 27).Value = Me!LeFiTem
   .Offset(, 28).Value = Me!LeFiMB:       .Offset(, 29).Value = Me!ThueCDg
   .Offset(, 30).Value = Me!LeFi3:        .Offset(, 31).Value = Me!FiDVu
   
   .Offset(, 48).Value = CLng(Me!ThueKD) + CDbl(Me!ThueGTGT) + CDbl(Me!ThueTD) + CDbl(Me!ThueLTDN) _
      + CDbl(Me!ThueTD) - CDbl(Me!ThueCF)
 End With
  
 Me!HoTen = "GPE"

End Sub

Sẽ nhập vô cột thứ 49, đó là trường [TổngSốTiềnThuếNộpCho KhoBạc,Thuế], & dù sao đây cũng là thử nghiệm cho bạn tính tổng trong macro nhập dữ liệu
 
Upvote 0
Không Đượ́c Bạn Ơi,Cái Code Của Mình Nó Khác Của Bạn,mìmh Đưa Lên Bạn Sửa Cho Mình Nha.
1. 33 = 16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32
2. 47 = 33-45-46
Code:

Private Sub CommandButton1_Click()
On Error GoTo loi
Me.Navi1 = Me.Navi1 - 1
Exit Sub
loi:
MsgBox "KhamHa: STop"
End Sub
Private Sub CommandButton2_Click()
On Error GoTo loi
Me.Navi1 = Me.Navi1 + 1
Exit Sub
loi:
MsgBox "KhamHa: STop"
End Sub
Private Sub CommandButton3_Click()
Me.dg = Me.Navi1.Max + 1
Me.CDblLThi.SetFocus
sua
End Sub
Private Sub CommandButton4_Click()
HS.Rows(Val(Me.dg)).EntireRow.Delete
Me.Navi1 = 5
Me.Navi1.Max = Me.Navi1.Max - 1
setsott
End Sub
Sub setsott()
Dim cl As Range
For Each cl In HS.Range("A5:A" & HS.[b65536].End(xlUp).Row)
cl = Val(cl.Offset(-1)) + 1
Next
End Sub
Private Sub CommandButton5_Click()
Dim kt
kt = MsgBox("KhamHa:DeLete", vbOKCancel, "SaMoay Tax")
If kt = 1 Then HS.Rows(Me.dg).EntireRow.Delete
If Me.Navi1.Max > 1 Then
Me.Navi1.Max = Me.Navi1.Max - 1
Else
Me.Navi1.Max = 1
End If
End Sub
Private Sub CommandButtoncancel_Click()
Me.dg = Me.Navi1
loaddata
xem
End Sub
Private Sub CommandButtonOK_Click()
Dim i As Long, ctr As Control
Dim ch, ch1, tb
ch1 = "TextLThi;TextLVThi;TextLHKDPy;TextLPCTua;TextLTTam;TextBTho;TextXu;TextTJu;LHPy;PSMop;KNTLKit;HCMop;LNMACon;PPACon;NTy;BKhuan;NDuon;MMau;KXau;PPhuan;MKPhom;XXay;TSut;STem;OTTho;TNThang;TNiem03;B LCan03;TNTBACon;PMCACon;PMUUn;LHUUn;LNhot;ATB;CNSNSKha;KSNNho;HNNDuon;KXPLit;MKNOc;MKUUn;VTKSong;LMLec;BCNSKha;BSKMHot;ACTHac;ACTKMop;ACMTChing;CNNPTNSu;TBHNKhong;LThi2;LVThi2"
tb = Split(ch1, ";")
For i = 0 To UBound(tb) - 1
If Me.Controls(tb(i)) = "" Then
MsgBox " Kiem tra: " & tb(i), , "KhamHa KeoTaven"
Me.Controls(tb(i)).SetFocus
Exit Sub
End If
Next
If Not IsNumeric(Me.TextLThi) Then
MsgBox "LecThi", , "KhamHa KeoTaven"
Me.TextLVThi.SetFocus
Exit Sub
End If
'Phan nhap
i = Val(Me.dg)
With HS
.Cells(i, 2) = Me.TextLThi
.Cells(i, 3) = Me.TextLVThi
.Cells(i, 4) = Me.TextLHKDPy
.Cells(i, 5) = Me.TextLPCTua
.Cells(i, 6) = Me.TextLTTam
.Cells(i, 7) = Me.TextBTho
.Cells(i, 8) = Me.TextXu
.Cells(i, 9) = Me.TextTJu
.Cells(i, 10) = Me.ComboLHPy
.Cells(i, 11) = Me.ComboPSMop
.Cells(i, 12) = Me.ComboKNTLKit
.Cells(i, 13) = Me.ComboHCMop
.Cells(i, 14) = Me.TextLNMACon
.Cells(i, 15) = Me.TextPPACon
.Cells(i, 16) = Me.TextNTy
.Cells(i, 17) = Me.TextBKhuan
.Cells(i, 18) = Me.TextNDuon
.Cells(i, 19) = Me.TextMMau
.Cells(i, 20) = Me.TextKXau
.Cells(i, 21) = Me.TextPPhuan
.Cells(i, 22) = Me.TextMKPhom
.Cells(i, 23) = Me.TextXXay
.Cells(i, 24) = Me.TextTSut
.Cells(i, 25) = Me.TextSTem
.Cells(i, 26) = Me.TextOTTho
.Cells(i, 27) = Me.TextTNThang
.Cells(i, 28) = Me.TextTNiem03
.Cells(i, 39) = Me.TextBLCan03
.Cells(i, 30) = Me.TextTNTBACon
.Cells(i, 31) = Me.TextPMCACon
.Cells(i, 32) = Me.TextPMUUn
.Cells(i, 33) = Me.TextLNhot
.Cells(i, 34) = Me.ComboATB
.Cells(i, 35) = Me.TextCNSNSKha
.Cells(i, 36) = Me.TextKSNNho
.Cells(i, 37) = Me.TextHNNDuon
.Cells(i, 38) = Me.TextKXPLit
.Cells(i, 39) = Me.TextMKNOc
.Cells(i, 40) = Me.TextMKUUn
.Cells(i, 41) = Me.TextVTKSong
.Cells(i, 42) = Me.TextLMLec
.Cells(i, 43) = Me.TextBCNSKha
.Cells(i, 44) = Me.TextBSKMHot
.Cells(i, 45) = Me.TextACTHac
.Cells(i, 46) = Me.TextACTKMop
.Cells(i, 47) = Me.TextACMTChing
.Cells(i, 48) = Me.TextCNNPTNSu
.Cells(i, 49) = Me.ComboTBHNKhong
.Cells(i, 50) = Me.TextLThi2
.Cells(i, 51) = Me.TextLVThi2

End With
If Me.dg > Me.Navi1.Max Then Me.Navi1.Max = Me.dg
setsott
xem
End Sub
Private Sub CommandButtonSua_Click()
sua
End Sub
Private Sub dg_Change()
If Me.dg < 5 Then Me.dg = 5
loaddata
End Sub
Private Sub Navi1_Change()
Me.dg = Me.Navi1
End Sub
Private Sub UserForm_Initialize()
With Me
.Navi1.Min = 5
.Navi1.Max = HS.[b65536].End(xlUp).Row
.Navi1.Value = 5
End With
xem
End Sub
Sub loaddata()
Dim i
i = Val(Me.dg)
With HS
Me.TextLThi = .Cells(i, 2)
Me.TextLVThi = .Cells(i, 3)
Me.TextLHKDPy = .Cells(i, 4)
Me.TextLPCTua = .Cells(i, 5)
Me.TextLTTam = .Cells(i, 6)
Me.TextBTho = .Cells(i, 7)
Me.TextXu = .Cells(i, 8)
Me.TextTJu = .Cells(i, 9)
Me.ComboLHPy = .Cells(i, 10)
Me.ComboPSMop = .Cells(i, 11)
Me.ComboKNTLKit = .Cells(i, 12)
Me.ComboHCMop = .Cells(i, 13)
Me.TextLNMACon = .Cells(i, 14)
Me.TextPPACon = .Cells(i, 15)
Me.TextNTy = .Cells(i, 16)
Me.TextBKhuan = .Cells(i, 17)
Me.TextNDuon = .Cells(i, 18)
Me.TextMMau = .Cells(i, 19)
Me.TextKXau = .Cells(i, 20)
Me.TextPPhuan = .Cells(i, 21)
Me.TextMKPhom = .Cells(i, 22)
Me.TextXXay = .Cells(i, 23)
Me.TextTSut = .Cells(i, 24)
Me.TextSTem = .Cells(i, 25)
Me.TextOTTho = .Cells(i, 26)
Me.TextTNThang = .Cells(i, 27)
Me.TextTNiem03 = .Cells(i, 28)
Me.TextBLCan03 = .Cells(i, 29)
Me.TextTNTBACon = .Cells(i, 30)
Me.TextPMCACon = .Cells(i, 31)
Me.TextPMUUn = .Cells(i, 32)
Me.TextLNhot = .Cells(i, 33)
Me.ComboATB = .Cells(i, 34)
Me.TextCNSNSKha = .Cells(i, 35)
Me.TextKSNNho = .Cells(i, 36)
Me.TextHNNDuon = .Cells(i, 37)
Me.TextKXPLit = .Cells(i, 38)
Me.TextMKNOc = .Cells(i, 39)
Me.TextMKUUn = .Cells(i, 40)
Me.TextVTKSong = .Cells(i, 41)
Me.TextLMLec = .Cells(i, 42)
Me.TextBCNSKha = .Cells(i, 43)
Me.TextBSKMHot = .Cells(i, 44)
Me.TextACTHac = .Cells(i, 45)
Me.TextACTKMop = .Cells(i, 46)
Me.TextACMTChing = .Cells(i, 47)
Me.TextCNNPTNSu = .Cells(i, 48)
Me.ComboTBHNKhong = .Cells(i, 49)
Me.TextLThi2 = .Cells(i, 50)
Me.TextLVThi2 = .Cells(i, 51)
End With
End Sub
Sub xem()
With Me
.CommandButton1.Visible = True
.CommandButton2.Visible = True
.CommandButton3.Visible = True
.CommandButton5.Visible = True
.CommandButtonSua.Visible = True
.Navi1.Visible = True
.CommandButtoncancel.Visible = False
.CommandButtonOK.Visible = False
End With
End Sub
Sub sua()
With Me
.CommandButton1.Visible = False
.CommandButton2.Visible = False
.CommandButton3.Visible = False
.CommandButton5.Visible = False
.CommandButtonSua.Visible = False
.Navi1.Visible = False
.CommandButtoncancel.Visible = True
.CommandButtonOK.Visible = True
End With
End Sub
 
Upvote 0
Hình như bạn đang cần thiết lập:
1. 33 = 16+17+18+19+20+21+22+23+24+25+26+27+28+29+30+31+32
2. 47 = 33-45-46?
Nhưng các ô 33 & 47 bạn lại bắt chúng lấy giá trị bạn nhập vô mà, phải không?

PHP:
.Cells(i, 32) = Me.TextPMUUn
.Cells(i, 33) = Me.TextLNhot:                     .Cells(i, 34) = Me.ComboATB

.Cells(i, 46) = Me.TextACTKMop
.Cells(i, 47) = Me.TextACMTChing:            .Cells(i, 48) = Me.TextCNNPTNSu
Hay là mình chưa hiểu ý của bạn lắm?

Nếu bạn cần có trong 2 ô thuộic cột 33 & 47 có dữ liệu tổng như trên, thì áp dụng cách của YeuDoi hay cách trên vào nó.
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm Ơn Hai Bạn Đã Giúp,Mình Nghĩ Các Bạn Làm Ví Dụ Thì Phài Dựa Vào Cái Code Mà Mình Đã Đưa Lên Thì Mình Mới Hiểu Được...Làm Mãi Mà Có Được Đâu.
 
Upvote 0
Tôi đang sử dụng excel 2003 nhưng lại gặp một lỗi nhỏ không sửa được, nhờ các bạn tư vấn dùm:'
Mỗi lần tôi chèn một sheet mới thì giao diện của sheet mới lại hiển thị ngược, nghĩa là các cột sắp xếp theo thứ tự A, B, C từ bền phải sang. Do vậy tôi không thể làm gì được
 
Upvote 0

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

Back
Top Bottom