Nhở sửa code để save vào 1 lúc 3 sheet

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

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.
 
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
Web KT

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

Back
Top Bottom