Những câu hỏi về code, xin giải thích các code, đề nghị các bạn gửi vào đây

Liên hệ QC
Status
Không mở trả lời sau này.

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Kể từ hôm nay, tất cả những câu hỏi nhờ giải thích dùm một đoạn code, hay là hỏi những vấn đề linh tinh gì liên quan đến cách viết code, đề nghị các bạn gửi chung vào đây.

Những đề tài mới với tiêu đề: "Nhờ giải thích dùm đoạn code", mà không nói rõ là code gì, code dùng để làm gì, sẽ bị xóa.

BQT

----------------------------------------------------------------------------------------------------------------


Em xin được hỏi 2 đoạn code sau có tương đương nhau ?

Cells(Cells.Rows.Count, 1).End(xlUp).Row có tương đương với [A65000].End(xlup).row

Cám ơn các anh chỉ giáo
 
Chỉnh sửa lần cuối bởi điều hành viên:
XIn các bác chỉ dẫn dùm cho mình vấn đề này:

Trong ổ D:\ của mình có các folder sau : vb1, vb2,.....
Bây giờ mình đánh văn bản mới nếu Cell A1 có chữ vb1 thì khi save nó save tự động vào d:\vb1. Tương tự với vb2
Với tên file là chuỗi bao gồm "tenvanban+ngaythangnam+giophutgiay.xls"
Mong các bác chỉ giáo!!!!

Bạn xen thử file đính kèm xem sao!
 

File đính kèm

  • ca_dafi.rar
    10.4 KB · Đọc: 48
Upvote 0
cám ơn các bạn, mình chỉ muốn hiểu ý nghĩa của đoạn code thôi, còn làm gì mình ko để ý, vì đây là đoạn code trong 1 source mà mình phải tìm hiểu, mình chỉ biết nó sẽ trả về kết quả là địa chỉ của 1 ô nào đó thôi
 
Upvote 0
Hỏi code tạo sổ chi tiết

Mình vận dụng hướng dẫn bài học VBA trên diễn đàn để tạo sổ chi tiết,nhưng làm hoài mà không được ,xin SỬA lại dùm maccro INOSOCHITIET1 để nó có thể chạy được.Chân thành cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
qua kho de giai thich can ke

mình cần hiểu và làm theo nhưng ko biết cách đọc các bạn giúp mình với.
Sub SAVING_data()

If Cells.Find(What:=BL_NO, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False) Is Nothing Then
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Else
Cells.Find(What:=BL_NO, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False).Activate
End If
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Application.CutCopyMode = False
ActiveCell.Select
ActiveWorkbook.Save

End Sub
Sub SAVE_Bien_ban()


BL_NO = Range("s5")
If BL_NO = "" Then
MsgBox ("Yeu cau nhap so BIEN BAN vao S5")
Exit Sub
End If
Range("'Link'!A2:AZ2").Copy
Sheets("Data").Select
Range("A1").Select
Application.Run ("SAVING_data")
Sheets("Bien ban").Select
End Sub
Sub VIEW_bien_ban()
So_xem = Range("a1")
cotdl = 1
Range("s5") = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Cells(11, 7) = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Cells(13, 15) = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Cells(14, 15) = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Cells(15, 15) = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Range("f19") = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Range("o19") = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Range("u19") = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Range("f20") = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Range("o20") = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Range("u20") = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1

For hang = 21 To 29
For cot = 12 To 13
Cells(hang, cot) = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Next cot
Next hang
cotdl = 30
For hang = 30 To 37
Cells(hang, 12) = Application.Index(Range("data!a3:az10000"), So_xem, cotdl)
cotdl = cotdl + 1
Next hang

Range("f5").Select
End Sub

Sub Nhap_Bien_ban_moi()

Sheets("data").Select
Range("a1").Select
Selection.End(xlDown).Select
Bien_ban_moi_so = ActiveCell.Row() - 1
Sheets("Bien ban").Select
Range("g11") = Now()

If Range("a5") = "" Then
MsgBox ("Yeu cau chon LOAI BIEN BAN CAN NHAP roi nhap tiep sau")
Exit Sub
End If
If Range("a5") = 1 Then
Range("S5") = "GX-" & Year(Now) & "-" & Bien_ban_moi_so
Else
If Range("a5") = 2 Then
Range("S5") = "NX-" & Year(Now) & "-" & Bien_ban_moi_so
End If
End If
Range("o15:S15,F19:K20,o19:r20,u19:u20,l21:l29,l21:u29,l30:u35").ClearContents
Range("A6").Select
End Sub
 
Upvote 0
Upvote 0
Private Sub Cmd_Loc_Click()
On Error GoTo ErrorHandling
Dim ConnStr As String, conn As Object
Dim strSQL As String
Dim rs
ConnStr = "driver={Microsoft ODBC for Oracle}; server=QLT; uid=qlt_read; pwd=qlt_read"
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = ConnStr
conn.Open
strSQL = "SELECT QLT_CTU_HDR.TIN, QLT_CTU_HDR.TEN_DTNT, QLT_CTU_DTL.CCG_MA_CAP, QLT_CTU_DTL.CCG_MA_CHUONG, QLT_CTU_DTL.TMT_MA_MUC, QLT_CTU_DTL.TMT_MA_TMUC, QLT_CTU_HDR.SO_CTU, QLT_CTU_DTL.SO_TIEN, QLT_CTU_HDR.NGAY_NOP_KB, QLT_CTU_HDR.DCT_LOAI FROM QLT_OWNER.QLT_CTU_DTL QLT_CTU_DTL, QLT_OWNER.QLT_CTU_HDR QLT_CTU_HDR WHERE QLT_CTU_HDR.ID = QLT_CTU_DTL.CTH_ID AND ((QLT_CTU_HDR.NGAY_NOP_KB Between {ts '2008-11-01 00:00:00'} And {ts '2008-11-30 00:00:00'}) AND (QLT_CTU_HDR.DCT_LOAI='05'))"
Set rs = CreateObject("ADODB.Recordsets")
rs.Open strSQL
If rs Is Nothing Then
MsgBox "Kh«ng cã b¶n ghi nµo tho¶ m·n!", vbExclamation, ThisWorkbook.Name
Else
'Worksheets.Select
Cells(1, 1).Select
n = 0
Do Until n = rs.Fields.Count
Cells(1, n + 1) = rs.Fields.Item(n).Name
n = n + 1
Loop
Cells(2, 1).CopyFromRecordset rs
End If
rs.Close
conn.Close
Exit Sub
ErrorHandling:
MsgBox Err.Description
End Sub
Đoạn code trên bị lỗi khi mở recordset, Ai làm vấn đề này rồi giúp mình với!
 
Upvote 0
Doạn mã trên được sửa lại như sau:
<code>
On Error GoTo ErrorHandling
Dim ConnStr As String, conn As Object
Dim strSQL As String
Dim rs As Object

Range("A10: I2000").Delete ' xóa kết quả cũ đi
Range("A10: I2000").Font.Name = ".VnTime"
Range("A10: I2000").Font.Size = 11
df = Txt_Dfrom.Value
dt = Txt_Dto.Value
tm = Txt_Mst.Text
ConnStr = "driver={Microsoft ODBC for Oracle}; server=QLT; uid=qlt_read; pwd=qlt_read"
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = ConnStr
conn.Open
If tm = "" Then
strSQL = "SELECT QLT_CTU_HDR.TIN, QLT_CTU_HDR.TEN_DTNT, QLT_CTU_DTL.CCG_MA_CAP, QLT_CTU_DTL.CCG_MA_CHUONG, QLT_CTU_DTL.TMT_MA_MUC, QLT_CTU_DTL.TMT_MA_TMUC, QLT_CTU_HDR.SO_CTU, QLT_CTU_DTL.SO_TIEN/1, QLT_CTU_HDR.NGAY_NOP_KB FROM QLT_OWNER.QLT_CTU_DTL QLT_CTU_DTL, QLT_OWNER.QLT_CTU_HDR QLT_CTU_HDR WHERE QLT_CTU_HDR.ID = QLT_CTU_DTL.CTH_ID AND ((QLT_CTU_HDR.NGAY_NOP_KB Between '" & df & "' And '" & dt & "') AND (QLT_CTU_HDR.DCT_LOAI='04'))"
Else
strSQL = "SELECT QLT_CTU_HDR.TIN, QLT_CTU_HDR.TEN_DTNT, QLT_CTU_DTL.CCG_MA_CAP, QLT_CTU_DTL.CCG_MA_CHUONG, QLT_CTU_DTL.TMT_MA_MUC, QLT_CTU_DTL.TMT_MA_TMUC, QLT_CTU_HDR.SO_CTU, QLT_CTU_DTL.SO_TIEN/1, QLT_CTU_HDR.NGAY_NOP_KB FROM QLT_OWNER.QLT_CTU_DTL QLT_CTU_DTL, QLT_OWNER.QLT_CTU_HDR QLT_CTU_HDR WHERE QLT_CTU_HDR.ID = QLT_CTU_DTL.CTH_ID AND ((QLT_CTU_HDR.NGAY_NOP_KB Between '" & df & "' And '" & dt & "') AND (QLT_CTU_HDR.DCT_LOAI='04') AND QLT_CTU_HDR.TIN='" & tm & "')"
End If
' Ngày có thể là kiểu: {ts '2008-01-01 00:00:00'} And {ts '2008-11-30 00:00:00'}
Set rs = CreateObject("ADODB.Recordset")
Set rs = conn.Execute(strSQL)
'rs.Open strSQL
If rs Is Nothing Then
MsgBox "Không có dữ liệu nào thỏa mãn!", vbExclamation, ThisWorkbook.Name
Else
'Worksheets.Select
Cells(10, 1).Select ' Ghi dữ liệu từ dòng 10
n = 0
Do Until n = rs.Fields.Count
Cells(10, n + 1) = rs.Fields(n).Name
n = n + 1
Loop
Cells(11, 1).CopyFromRecordset rs
End If
rs.Close
conn.Close
Range("A10:I10").Delete ' xóa dòng tiêu đề == tên trường
Exit Sub
ErrorHandling:
MsgBox Err.Description ' Msgbox "Không kết nối được CSDL hoặc sai điều kiện"
End Sub
</code>
Mình đã kết nối thành công và có thể đưa bất cứ điều kiện nào vào để lấy ra dữ liệu theo ý muốn.
 
Upvote 0
Doạn mã trên được sửa lại như sau:

Mình đã kết nối thành công và có thể đưa bất cứ điều kiện nào vào để lấy ra dữ liệu theo ý muốn.
Nếu có thể bạn cho 1 ví dụ. Rất cám ơn! Mấy cái này mình rất muốn nghiên cứu mà khó hiểu quá.
 
Upvote 0
Mình muốn select lần lượt từng ô dạng: Cells(i, j) i = X->A; j = Y->B để gán công thức;
Mình dùng code: Range(...). Slelect nhưng thấy nó chỉ cho range ô cụ thể.
Có thể cho Range(...). Select chạy với dạng ô (i,j) ở trên được ko nhỉ. Hay có code tương đương ko ?
Các bạn chỉ giúp.
Thanks a lot
 
Upvote 0
Các bác chỉ dùm em trong VB có hàm nào giống hàm date trong excel không a?
 
Upvote 0
Hi All,

Hai doan code nay minh hoc duoc tren giaiphapexcel, nhung khi ap dung vao cung 1 workbook thi khong biet ghep nhu the nao cho dung. Cac ban xem giup voi nhe. (Minh khong ranh lam ve VBA.. :)). Many thanks, lnt

** doan code nay dung de xoa cac sheet trong workbook neu ngay hien tai nho hon ngay duoc chi dinh
Private Sub Workbook_Open()
Dim ws As Worksheet
Application.DisplayAlerts = False
If Date > #12/30/2008# Then
For Each ws In Worksheets
On Error Resume Next
ws.Delete
Next
Range("a:eek:").Clear
Application.DisplayAlerts = True
End If
End Sub

** Doan code nay cho phep su dung tinh nang Group and Outline tren bang tinh bi khoa
Private Sub Workbook_Open()
With Sheet1
.Protect Password:="Secret", UserInterfaceOnly:=True
.EnableOutlining = True
End With
End Sub
 
Upvote 0
em muốn tính ngày cuối cùng của tháng là ngày nào, trong excel thì em làm được như sau: day(date(year(x),month(x)+1,0)
nhưng em không biết làm thế nào trong VB, vì không có hàm date.
Em thử hàm now của bác nhưng chưa được, nhờ bác chỉ chi tiết với a!
 
Upvote 0
em muốn tính ngày cuối cùng của tháng là ngày nào, trong excel thì em làm được như sau: day(date(year(x),month(x)+1,0)
nhưng em không biết làm thế nào trong VB, vì không có hàm date.
Em thử hàm now của bác nhưng chưa được, nhờ bác chỉ chi tiết với a!
Trong VB bạn có thể dùng hàm này DateSerial. Cấu trúc cũng giống với hàm Date của excel.
 
Upvote 0
em muốn tính ngày cuối cùng của tháng là ngày nào, trong excel thì em làm được như sau: day(date(year(x),month(x)+1,0)
nhưng em không biết làm thế nào trong VB, vì không có hàm date.
Em thử hàm now của bác nhưng chưa được, nhờ bác chỉ chi tiết với a!
Ah... xin lổi... đọc nhoáng qua, cứ tưởng là TODAY()... Vậy thì dùng DATESERIAL như Rollover79 vừa nói
 
Upvote 0
Chào các bạn , mình có đoạn code này , chẳng biết sai gì mà chạy không đúng ý đồ , mời các bạn xem file và giúp dùm , cảm ơn

Sub DmTG()
dm = 0
For i = 7 To 21
On Error Resume Next
k = Application.WorksheetFunction.Match("*" & Cells(i, 3) & "*", [I8:I10], 0)
If k > 0 Then
h = Cells(i, 4)
End If
dm = h + dm
Next
Cells(12, 10) = dm
End Sub
 

File đính kèm

  • Book1.xls
    23.5 KB · Đọc: 34
Upvote 0
Chào các bạn , mình có đoạn code này , chẳng biết sai gì mà chạy không đúng ý đồ , mời các bạn xem file và giúp dùm , cảm ơn

Sub DmTG()
dm = 0
For i = 7 To 21
On Error Resume Next
k = Application.WorksheetFunction.Match("*" & Cells(i, 3) & "*", [I8:I10], 0)
If k > 0 Then
h = Cells(i, 4)
End If
dm = h + dm
Next
Cells(12, 10) = dm
End Sub
Sửa lại:
PHP:
Sub DmTG()
  Dim i As Long, dm As Double
  For i = 7 To 21
    If WorksheetFunction.CountIf([I8:I10], "*" & Cells(i, 3) & "*") > 0 Then
      dm = Cells(i, 4) + dm
    End If
  Next
  Cells(12, 10) = dm
End Sub
Làm chi mà nhiều biến thế chứ
Thêm nữa... bài này công thức cũng ra mà:
PHP:
=SUMPRODUCT((COUNTIF($I$8:$I$10,"*"&$C$7:$C$21&"*"))*($D$7:$D$21))
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ Hoangdanh và anh em

Tôi có một file (c:\dulieu\doanhso.xls) có trường Doanhso và trường Tenhang, và file (c:\dulieu\tonghop.xls) có trường Tenhang,TongDT. tôi muốn tính tổng doanh số của từng mặt hàng bên file doanhso.xls rồi ghi giá trị sang file tổng hợp nhưng không muốn mở thủ công file doanhso.xls làm cách nào mong bạn và các chuyên gia Excel giúp đỡ.
Có file đính kèm!
 

File đính kèm

  • dulieu.zip
    8.5 KB · Đọc: 37
Upvote 0
Tôi có một file (c:\dulieu\doanhso.xls) có trường Doanhso và trường Tenhang, và file (c:\dulieu\tonghop.xls) có trường Tenhang,TongDT. tôi muốn tính tổng doanh số của từng mặt hàng bên file doanhso.xls rồi ghi giá trị sang file tổng hợp nhưng không muốn mở thủ công file doanhso.xls làm cách nào mong bạn và các chuyên gia Excel giúp đỡ.
Có file đính kèm!
Cái này dùng Consolidate là nhanh gọn nhất ---> Khỏi cần Open source file
PHP:
Sub TongHop()
  Dim SrcRng As String
  SrcRng = "'" & ThisWorkbook.Path & "\[doanhso.xls]Sheet1'!R2C2:R1000C3"
  With Range("A1").CurrentRegion.Offset(1)
    .Clear
    .Consolidate SrcRng, 9, , True
  End With
End Sub
 

File đính kèm

  • TH_Dulieu.rar
    8.4 KB · Đọc: 94
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom