Ví dụ với đoạn code sau, mình không đưa vào macro được.
Public Sub PhanTichVT(StrSL As String, Rn As Range)
Dim RnDT As Long, RnVT As Long 'Dòng b?t d?u c?a m?ng d? li?u trong b?ng DTCT và b?ng PTVT'
'StrSL là chu?i báo hi?u cho ta bi?t c?n phân tích nh?ng thành ph?n nào'
If StrSL = "" Then Exit Sub 'Không có phân thành ph?n nào du?c ch?n'
Dim MaDinhMuc As String
Sheets("DTCT").Select
RnDT = Rn.Row 'Rn là vùng d? li?u ch?a các công vi?c c?n phân tích trong b?ng DTCT'
Dim StrSelect As String
If InStr(StrSL, "NC") <> 0 And InStr(StrSL, "MAY") <> 0 Then 'Có phân tích nhân công và máy thi công'
StrSelect = " and (DanhMucVatTu.DONVI='Công' or DanhMucVatTu.DONVI='Ca')"
ElseIf InStr(StrSL, "NC") <> 0 And InStr(StrSL, "MAY") = 0 Then 'Ch? phân tích nhân công
StrSelect = " and DanhMucVatTu.DONVI = 'Công'"
ElseIf InStr(StrSL, "NC") = 0 And InStr(StrSL, "MAY") <> 0 Then 'Ch? phân tích máy thi công
StrSelect = " and DanhMucVatTu.DONVI = 'Ca'"
End If
RnVT = 5
While RnDT <= Rn.Rows.Count + Rn.Row - 1
If Cells(RnDT, 1).Value = "" Then
Cells(RnDT, 1).End(xlDown).Select
RnDT = ActiveCell.Row
End If
MaDinhMuc = Cells(RnDT, 3).Value
If MaDinhMuc <> "" Then
Dim KhoiLuongCV As String 'Ð?a ch? ch?a kh?i lu?ng công vi?c'
With Sheets(PTVT)
.Cells(RnVT, 1).Value = Cells(RnDT, 1).Value
.Cells(RnVT, 3).Value = Cells(RnDT, 4).Value
.Cells(RnVT, 4).Value = Cells(RnDT, 5).Value
.Cells(RnVT, 5).Value = Cells(RnDT, 6).Value
End With
KhoiLuongCV = Replace(Cells(RnVT, 5).Address, "$", "")
If DbConDM Is Nothing Then
Set DbConDM = CreateObject("ADODB.Connection")
DbConDM.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\DinhMuc24.mdb"
End If
If RsVT Is Nothing Then Set RsVT = CreateObject("ADODB.RecordSet")
If Cells(RnDT, 2).Value <> "" And FormPhanTichVatTu.ChkVL.Value = True Then 'Checkbox trên form, có th? thay th? b?ng di?u ki?n khác'
'Có s? d?ng v?a'
TruyVanVua MaDinhMuc, Cells(RnDT, 2).Value, KhoiLuongCV
ElseIf FormPhanTichVatTu.ChkVL.Value = True Then
'Khong su dung vua va co phan tich vat lieu'
VatLieuKhac MaDinhMuc, KhoiLuongCV, RnVT
End If
'Truy xuat nhan cong, may'
If FormPhanTichVatTu.ChkNC.Value = True Or FormPhanTichVatTu.ChkMay.Value = True Then
NhanCongMay MaDinhMuc, KhoiLuongCV, RnVT, StrSelect
End If
RnVT = RnVT + 1
End If
With FormPhanTichVatTu.Prg 'Progressbar theo dõi ti?n trình'
If .Value + 1 <= .Max Then .Value = .Value + 1
End With
Cells(RnDT + 1, 1).Select
If Cells(RnDT + 1, 1).Value = "" Then ActiveCell.End(xlDown).Select
RnDT = ActiveCell.Row
Wend
Set RsVT = Nothing
Cells(1, 1).Select
End Sub
Private Sub TruyVanVua(Ma_DM As String, Ma_Vua As String, KLCV As String)
'Cái này có v? chua ?n l?m vì tôi nghi s? có cách s? d?ng câu l?nh SELECT t?i uu hon'
Dim RsDMV As ADODB.Recordset
Set RsDMV = CreateObject("ADODB.RecordSet")
RsDMV.Open "SELECT DinhMucDuToan.MAVT, DinhMucDuToan.KLVT FROM DinhMucDuToan, DanhMucVatTu Where (DinhMucDuToan.MADM = '" & Ma_DM & _
"') and DanhMucVatTu.MAVT=DinhMucDuToan.MAVT and instr(DanhMucVatTu.TENVT, 'V" & ChrW(7919) & "a')=1", DbConDM, adOpenKeyset, adLockPessimistic
If RsDMV.RecordCount = 0 Then Exit Sub
RsDMV.MoveFirst
While Not RsDMV.EOF
RsVT.Open "Select PhuLucVua.MAVT, DanhMucVatTu.TENVT, DanhMucVatTu.DONVI, ''" & _
",PhuLucVua.KLVT, '' From PhuLucVua, DanhMucVatTu Where (PhuLucVua.MAVUA = '" & _
Ma_Vua & "' ) And PhuLucVua.MAVT = DanhMucVatTu.MAVT", DbConDM, adOpenKeyset, adLockPessimistic
If RsVT.RecordCount > 0 Then
ChenDuLieu KLCV
VatLieuKhac Ma_DM, KLCV, RnVT
End If
RsDMV.MoveNext
Wend
RsDMV.Close
Set RsDMV = Nothing
End Sub
Private Sub VatLieuKhac(Ma_DM As String, KLCV As String, RnVT As Long)
RsVT.Open "SELECT DinhMucDuToan.MAVT,DanhMucVatTu.TENVT,DanhMucVatTu.DONVI, '', " & _
"DinhMucDuToan.KLVT FROM DinhMucDuToan, DanhMucVatTu Where DinhMucDuToan.MADM = '" & Ma_DM & _
"' and DanhMucVatTu.MAVT=DinhMucDuToan.MAVT and DanhMucVatTu.DONVI<>'Công' and DanhMucVatTu.DONVI<>'Ca'", DbConDM, adOpenKeyset, adLockPessimistic
If RsVT.RecordCount = 0 Then RsVT.Close: Exit Sub
ChenDuLieu KLCV
End Sub
Private Sub NhanCongMay(Ma_DM As String, KLCV As String, RnVT As Long, StrNC_MAY As String)
RsVT.Open "SELECT DinhMucDuToan.MAVT,DanhMucVatTu.TENVT,DanhMucVatTu.DONVI, '', " & _
"DinhMucDuToan.KLVT FROM DinhMucDuToan, DanhMucVatTu Where DinhMucDuToan.MADM = '" & Ma_DM & _
"' and DanhMucVatTu.MAVT=DinhMucDuToan.MAVT " & StrNC_MAY, DbConDM, adOpenKeyset, adLockPessimistic
If RsVT.RecordCount = 0 Then RsVT.Close: Exit Sub
ChenDuLieu KLCV
End Sub
Private Sub ChenDuLieu(KLCV As String)
Dim I As Integer
I = 1
Sheets(PTVT).Cells(RnVT + 1, 2).CopyFromRecordset RsVT
RsVT.MoveFirst
While Not RsVT.EOF
Sheets(PTVT).Cells(RnVT + I, 7).Value = "=Round(" & KLCV & "*F" & RnVT + I & ",3)"
I = I + 1
RsVT.MoveNext
Wend
RnVT = Sheets(PTVT).Cells(65536, 2).End(xlUp).Row
RsVT.Close
End Sub