tranxuanthien nói:
Bác Duyệt đính chính lại giúp tui: hiện tui đang làm việc tại Phòng kế toán Công ty May Trường Giang. Không biết đời sẽ đẩy tui đi những đâu nữa nhưng cho dù đi đâu, tui cũng luôn là bạn với webketoan. Công ty của tui đang dùng hình thức kế toán "Chứng từ ghi sổ cải tiến". Nó dùng bảng kê ghi có để làm chứng từ vào sổ cái. Sổ cái thì lại giống như sổ cái của "Nhật ký chứng từ". Tui có một đoạn mã VBA để cập nhật số liệu từ bảng kê ghi có vào sổ cái định đưa lên webketoan để anh em xem và góp ý nhưng hiện đang ở dịch vụ Internet nên chưa sẵn. Hẹn vài bữa nữa nhe!
Xin lỗi Bác tranxuanthien,
Bác đã chuyển chỗ làm à? Rất mừng khi nghe Bác nói "luôn là bạn với webketoan", nhưng hơi buồn sao không là "EFC"!!! Hu hu hu.
Xin được vài hàng góp ý cùng Anh,
Trong thủ tục của Anh có đọan khai báo như sau:
Dim TKno, TKco, TKco2, TenTK As String
Trong VBA, các biến TKno, TKco, TKco2 sẽ được coi như là biến variant, chứ không phải là String.
Sub DienSoLieuBangKeVaoSoCai()
Dim SoTien
Dim TKno, TKco, TKco2, TenTK As String
Dim Thang As Integer
'Day la Macro mang so lieu tu Bang ke ghi co vao So cai
'Khi chay, hay mo cung luc 2 file: BangKeGhiCo01 (02, 03...) va SoCai(Chinh)
'SoCai(Chinh) la file hoat dong. Dung phim tat: Ctrl+Shift+V de chay macro
ActiveWindow.ActivateNext
Sheets("Tgian").Select
Range("B2").Select
Thang = ActiveCell.Value
Range("A3").Select
TKco = ActiveCell.Value
ActiveCell.Offset(0, 2).Range("A1").Select
TKno = ActiveCell.Value
ActiveCell.Offset(1, 0).Range("A1").Select
SoTien = ActiveCell.Value
ActiveCell.Offset(-1, 0).Range("A1").Select
Do Until TKco = "Stop"
Do Until TKno = "" Or TKno = "0"
ActiveWindow.ActivateNext
Sheets("111").Select
TenTK = ActiveSheet.Name
Do Until TenTK = "PSinh"
If TenTK = TKno Then
Range("A7").Select
TKco2 = ActiveCell.Value
Do Until TKco2 = "" Or TKco2 = "0"
If TKco2 = TKco Then Exit Do
ActiveCell.Offset(1, 0).Range("A1").Select
TKco2 = ActiveCell.Value
Loop
ActiveCell.Value = TKco
ActiveCell.Offset(0, Thang).Range("A1").Select
ActiveCell.Value = SoTien
Exit Do
End If
ActiveSheet.Next.Select
TenTK = ActiveSheet.Name
Loop
ActiveWindow.ActivateNext
ActiveCell.Offset(0, 1).Range("A1").Select
TKno = ActiveCell.Value
ActiveCell.Offset(1, 0).Range("A1").Select
SoTien = ActiveCell.Value
ActiveCell.Offset(-1, 0).Range("A1").Select
Loop
Selection.End(xlToLeft).Select
Selection.End(xlToLeft).Select
ActiveCell.Offset(2, 0).Range("A1").Select
TKco = ActiveCell.Value
ActiveCell.Offset(0, 2).Range("A1").Select
TKno = ActiveCell.Value
ActiveCell.Offset(1, 0).Range("A1").Select
SoTien = ActiveCell.Value
ActiveCell.Offset(-1, 0).Range("A1").Select
Loop
End Sub
Trong chương trình của Anh sử dụng rất nhiều phương thức Select, điều này là không nên trong VBA.
Thông thường trong các thủ tục của VBA người ta thường dùng đọan mã sau để tăng nhanh tốc độ chương trình.
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
.StatusBar = bStatusbar 'Nhằm báo chương trình đang vận hành
End With
Sau khi kết thúc thủ tục bạn sẽ dùng đọan code trên nhưng thay lại các hằng số như sau:
With Application
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
.StatusBar = False
End With
Và còn một chú ý nữa là khi bạn khai báo biến dùng để cho các hàng (Row) thì nên khai báo biến là kiểu Long như bạn Tuanktcdcn đã từng đề cập.
Vài hàng nhận xét.
Chúc bạn thành công.
EFC luôn luôn chào đón bạn, và mong trò chuyện cùng bạn.
Lê Văn Duyệt