Em muốn nhờ các anh các chị giải thích cho em đoạn code VBA này với (1 người xem)

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

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

lehuyen

Thành viên mới
Tham gia
18/3/08
Bài viết
3
Được thích
1
Em xin chào mọi người ,chẳng là em có muốn làm 1 file về quản lý công nợ của Cá nhân nên muốn viết 1 cái bảng nhập dữ liệu trong excel cho tiện ,em cũng đã tìm được 1 đoạn code tương đối phù hợp với việc của em nhưng do em vừa làm vừa mò mẫm nên cũng không biết gì vì vậy em muốn nhờ các anh các chị giải thích đoạn code dưới giúp em . các biến được gán , và các dòng lệnh trong vòng if else end if . rất mong anh chị nào giúp em với em cám ơn nhiều .

Mã:
Dim wS As Worksheets <---- biến wS gán cho Worksheets
Dim iRow As Long <--- biến irow gán Long
Set sw = Worksheets("Ket Qua")
iRow = sw.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row <- đoạn này em không hiểu 
If Me.TextBox1.Value = "" Or Me.TextBox2.Value = "" Then
MsgBox "Hay nhap day du du lieu", , "Chu y"
Me.TextBox1.SetFocus
Else
sw.Cells(iRow, 1).Value = Format(Me.TextBox3.Value, "MM/dd/yyyy")
sw.Cells(iRow, 2).Value = Me.TextBox1.Value
sw.Cells(iRow, 3).Value = Me.TextBox2.Value
Me.TextBox1.Value = ""
Me.TextBox2.Value = ""
Me.TextBox1.SetFocus
End If
 
Em xin chào mọi người ,chẳng là em có muốn làm 1 file về quản lý công nợ của Cá nhân nên muốn viết 1 cái bảng nhập dữ liệu trong excel cho tiện ,em cũng đã tìm được 1 đoạn code tương đối phù hợp với việc của em nhưng do em vừa làm vừa mò mẫm nên cũng không biết gì vì vậy em muốn nhờ các anh các chị giải thích đoạn code dưới giúp em . các biến được gán , và các dòng lệnh trong vòng if else end if . rất mong anh chị nào giúp em với em cám ơn nhiều .

Mã:
Dim [COLOR=#ff0000][B]wS [/B][/COLOR]As [COLOR=#ff0000][/COLOR][COLOR=#0000ff][B]Worksheet[/B][/COLOR][COLOR=#ff0000][B]s [/B][/COLOR]<---- biến wS gán cho Worksheets
Dim iRow As Long <--- biến irow gán Long

Set [COLOR=#ff0000][B]sw [/B][/COLOR]= Worksheets("Ket Qua")

[COLOR=#ff8c00]iRow = sw.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row [/COLOR][COLOR=#008000]<- đoạn này em không hiểu[/COLOR][COLOR=#ff8c00] [/COLOR]

If Me.TextBox1.Value = "" Or Me.TextBox2.Value = "" Then
MsgBox "Hay nhap day du du lieu", , "Chu y"
Me.TextBox1.SetFocus
Else
sw.Cells(iRow, 1).Value = Format(Me.TextBox3.Value, "MM/dd/yyyy")
sw.Cells(iRow, 2).Value = Me.TextBox1.Value
sw.Cells(iRow, 3).Value = Me.TextBox2.Value

Me.TextBox1.Value = ""
Me.TextBox2.Value = ""
Me.TextBox1.SetFocus
End If

1) Biến wS là biến đối tượng (Worksheet) chứ không phải "gán cho worksheet" nha bạn, và tôi nghĩ khi khai báo biến thì không có S sau Worksheet nhé.

Tương tự biến iRow có kiểu dữ liệu (data type) là Long, chứ không phải là "gán".

2) Biến wS sử dụng cho mục đích gì trong thủ tục này? trong khi biến sw lại xuất hiện liên tục mà không được khai báo vậy bạn?

3) Giải thích: Tôi nói nôm na như thế này:

Cells(Rows.Count, 1): Cells(Row, Column) là đối tượng thuộc Range, Rows.Count là phương thức để tính tổng số hàng mà một sheet có được (Với Excel 2003: 65536 dòng, với 2007 trở về sau: 1048576 dòng).

Nếu ta sử dụng Excel 2003 ta có thể hiểu Cells(Rows.Count, 1) sẽ bằng với Cells(65536, 1), tức tại ô A65536

.End(xlUp): là một phương thức của Range để "di chuyển nhanh" từ ô định sẳn (tức là ô A65536) đến ô có chứa dữ liệu đầu tiên từ dưới lên trên. Nó giống như ta đặt con trỏ vào một ô và bấm Ctrl+Mũi tên lên vậy (tương tự với xlDown, xlRight, xlLeft).

.Offset(Row, Column): là một phương thức của Range để "định vị" cho Range thay đổi vị trí hiện tại đến số hàng và số cột trong đối số của Offset, trong trường hợp này .Offset(1, 0) là dịch chuyển ô xuống dưới một dòng.

.Row: là phương thức lấy số hàng tại Range đang hiện hành.

Như vậy, phát biểu toàn câu đó là:

iRow lấy giá trị hàng của ô A65536 di chuyển từ dưới tính lên trên cho đến khi gặp ô có dữ liệu và dịch chuyển xuống một hàng của ô này rồi xác định số hàng tại đó.
 
Upvote 0
iRow = sw.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row <- đoạn này em không hiểu

[/CODE]

nó dòng ra dòng cuối cùng trong cột A có chưa dữ liệu

1- rows.count=65536 (dòng cuối cùng của ex2003)
2-Cells(Rows.Count, 1) cell cuối cùng trong cột A
3- dò ngược từ đó lên end(xlup)
4- sau khi thấy hàng cuối cùng đó nó sẻ dời xuống 1 dòng offset(1)
5- ".row" để lấy số dòng
 
Upvote 0

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

Back
Top Bottom