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:
Chào các bạn! nhờ các bạn vui lòng chỉ giúp cách nhận biết những câu lệnh trong code đang chiếm giữ bộ nhớ; câu lệnh để giải phóng bộ nhớ và vị trí đặt chúng trong code (ví dụ trong đoạn code sau thì viết như thế nào ?).
Mã:
[FONT=&quot]Sub   CopyErrorSua()
      Dim iC As Long
      iC = Sheet1.Range("B65000").End(xlUp).Row
      If iC < 2 Then Exit Sub
      Sheet2.Range("A2:B" & iC).Value =   Sheet1.Range("A2:B" & iC).Value
      MsgBox "Copy thanh cong"
  End Sub[/FONT]
Code trên của bạn chưa tường minh về khai báo, hơn nữa thiếu 1 dòng lệnh giải phóng bộ nhớ khi Copy xong[FONT=&quot]

[/FONT]Xin cảm ơn !

Code này không có copy gì cả bạn à! Mà là gán giá trị của một vùng bằng giá trị của một vùng khác tương ứng! Nên không cần phải giải phóng bộ nhớ gì cả. Code bên trên đã tường minh rồi. Bạn còn muốn khai báo thêm gì nữa!?

From TrungChinh:
Cảm ơn Ca_difi ! mình lấy ví dụ từ bài 15 nhưng copy nhầm code (đã sửa lại). Ý mình muốn hỏi: cách chung hoặc tổng quát để nhận biết những câu lệnh trong code đang chiếm giữ bộ nhớ; câu lệnh để giải phóng bộ nhớ và vị trí đặt chúng trong code.
Thanks !
 
Upvote 0
Bạn sửa lại :
PHP:
Sub CopyErrorSua()
    Dim iC As Long
    iC = Sheet1.Range("B65000").End(xlUp).Row
    If iC < 2 Then Exit Sub
    Sheet2.Range("A2:B" & iC).Value = Sheet1.Range("A2:B" & iC).Value
    MsgBox "Copy thanh cong"
End Sub
Code trên của bạn chưa tường minh về khai báo, hơn nữa thiếu 1 dòng lệnh giải phóng bộ nhớ khi Copy xong



Chúc vui.

Cần gì phải giải phóng bộ nhớ, chỉ cần dùng:

application.cutcopymode=false

là ỌK!!!
 
Upvote 0
Nhờ giải thích giùm dòng code !

Mình có đoạn code :

Mã:
[B]Private Sub CommandButton1_Click()[/B]
[COLOR="Blue"]'MsgBox Me.UsedRange.Address, vbOKOnly[/COLOR]
[COLOR="blue"]'a = InStr("$", Me.UsedRange.Address, 0)[/COLOR]
On Error GoTo er
Dim i, b, curDam, k, curRow, copytoRow, q, crMta, crMtd, crMpa, _
        crMpd, crMna, crMnd As Integer
Dim curP, curPtmp, curDL, L, Mta, Mpa, Mna, Mtd, Mpd, Mnd As Double
Dim a, a1, addP, a2, a3 As String
Dim Dam(0 To 100) As Integer
b = 0
'Range("C3:I3").Copy Range("K3:s3")
[COLOR="blue"]' Lay tong so dong trong SAP[/COLOR]
For i = 10 To 0 Step -1
    a = Right(Me.UsedRange.Address, i)
    k = Val(a)
    If k <> 0 Then
        b = i
        i = 0
    End If

Mình không hiểu dòng Me.UsedRange.Address có ý nghĩa gì
có cách nào record macro để xuất hiện dòng trên, vì mình tra trong phần helf cũng không tìm thấy, mà search trên google cũng không tìm hiểu được gì ! nhờ các bác giải thích giúp mình xin cảm ơn nha !
 
Upvote 0
Mình có đoạn code :

Private Sub CommandButton1_Click()
'MsgBox Me.UsedRange.Address, vbOKOnly
'a = InStr("$", Me.UsedRange.Address, 0)
On Error GoTo er
Dim i, b, curDam, k, curRow, copytoRow, q, crMta, crMtd, crMpa, crMpd, crMna, crMnd As Integer
Dim curP, curPtmp, curDL, L, Mta, Mpa, Mna, Mtd, Mpd, Mnd As Double
Dim a, a1, addP, a2, a3 As String
Dim Dam(0 To 100) As Integer
b = 0
'Range("C3:I3").Copy Range("K3:s3")
' Lay tong so dong trong SAP
For i = 10 To 0 Step -1
a = Right(Me.UsedRange.Address, i)
k = Val(a)
If k <> 0 Then
b = i
i = 0
End If

Mình không hiểu dòng Me.UsedRange.Address có ý nghĩa gì
có cách nào record macro để xuất hiện dòng trên, vì mình tra trong phần helf cũng không tìm thấy, mà search trên google cũng không tìm hiểu được gì ! nhờ các bác giải thích giúp mình xin cảm ơn nha !

UsedRange là vùng đã sử dụng trên sheet. Vùng này bạn có thể xác định bằng tay, bằng cách: Tại sheet hiện hành ấn Ctrl+End, con trỏ chỉ tới ô cuối cùng của vùng đã sử dụng đấy bạn.

Bạn làm thử một ví dụ là sẽ hiểu ngay thôi:
Gõ vài chữ, vài hàng, vài cột vào sheet hiện hành, sau đó chép đoạn code này vào Module, quay ra sheet hiện hành ấn Alt+F8 chạy Sub này nhé!
PHP:
Sub Test()
MsgBox ActiveSheet.UsedRange.Address
End Sub
 
Upvote 0
Đây là phần Help của Excel nói như vậy!
Mã:
[B]UsedRange Property[/B]
 
See AlsoApplies To[URL="mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\1033\VBAXL10.CHM::/html/xlproUsedRange1.htm#example"][COLOR=#800080]Example[/COLOR][/URL]Specifics
Returns a [URL="mk:@MSITStore:C:\Program%20Files\Microsoft%20Office\OFFICE11\1033\VBAXL10.CHM::/html/xlobjRange1.htm"][B][COLOR=#0000ff]Range[/COLOR][/B][/URL] object that represents the used range on the specified worksheet. Read-only.
[B]Example[/B]
 
This example selects the used range on Sheet1.
Worksheets("Sheet1").Activate
ActiveSheet.[B]UsedRange[/B].Select
Theo mình hiểu thì .UsedRange dùng để chỉ 1 vùng đã được bạn thao tác trên 1 sheet.
.UsedRange.Address dùng đế lấy địa chỉ của vùng mà bạn đã thao tác trên bảng tính.
Còn chữ Me của bạn thì chắc bạn có tên 1 sheet nào đó được đặt là Me.

Bạn có thể thử với dòng ActiveSheet.UsedRange.Select này sẽ thấy liền!
Thân
 
Upvote 0
Mình không hiểu dòng Me.UsedRange.Address có ý nghĩa gì
có cách nào record macro để xuất hiện dòng trên, vì mình tra trong phần helf cũng không tìm thấy, mà search trên google cũng không tìm hiểu được gì!

Bạn có thể tìm hiểu thêm về UsedRange trong chữ ký của Nick Sa_DQ​

Chúc vui!:-=
 
Upvote 0
Còn chữ Me của bạn thì chắc bạn có tên 1 sheet nào đó được đặt là Me.
Hông phải PoPikachu ơi, Me đại diện cho cái chỗ code đang đứng:
- Đứng ở sheet nào thì Me là sheet đó
- Đứng ở Form nào thì Me là Form đó
- Đứng ở wbook nào thì Me là Wbook đó

thí dụ đứng ở sheet1:
me.cells = sheet1.cells = sheets("sheet1").cells

Đứng ở Form Nhaplieu:
Me.textbox1 = Forms("nhaplieu").textbox1
 
Upvote 0
Hông phải PoPikachu ơi, Me đại diện cho cái chỗ code đang đứng:
- Đứng ở sheet nào thì Me là sheet đó
- Đứng ở Form nào thì Me là Form đó
- Đứng ở wbook nào thì Me là Wbook đó

thí dụ đứng ở sheet1:
me.cells = sheet1.cells = sheets("sheet1").cells

Đứng ở Form Nhaplieu:
Me.textbox1 = Forms("nhaplieu").textbox1
Em thấy không đúng đâu! Ví dụ Sub này thì ở Sheet 1 nó báo lỗi ngay chữ Me. Thì sao?
PHP:
Sub thu()
Me.UsedRange.Select
End Sub
Me ở đây chỉ dùng trong Userform là đúng thôi! Còn các trường hợp khác bác test lại xem! Trên máy em nó báo lỗi rồi?!$@!!
Thân.
 
Upvote 0
Em thấy không đúng đâu! Ví dụ Sub này thì ở Sheet 1 nó báo lỗi ngay chữ Me. Thì sao?
PHP:
Sub thu()
Me.UsedRange.Select
End Sub
Me ở đây chỉ dùng trong Userform là đúng thôi! Còn các trường hợp khác bác test lại xem! Trên máy em nó báo lỗi rồi?!$@!!
Thân.

Code này bạn để ở đâu? Nếu bạn để trong Module thì nó báo lỗi là đúng rồi! Code trên phải để trong sheet thì Me ở đây excel mới hiểu.
Giống như trong Form, bạn cũng phải viết code và đặt ngay trong Form thì excel mới hiểu.
Giống như ở tại nhà ta thì ta nói Me, ta tự hiểu được; còn ra ngoài đường lớn, đường Quốc lộ, tự dưng nói Me, chẳng ai hiểu Me là ai cả!
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Vâng, em đã hiểu rồi!
Em cứ nghĩ là đang Active Sheet nào thì code sẽ tự Active chứ! Nào ngờ.!!
Sorry!
Thân.
 
Upvote 0
Kiểm tra giúp code khi chạy thì báo lỗi

Chào các bác.
Nhờ các bác xem giúp (trong file đính kèm:
rar.gif
BANGGIA boyxin.rar )

  1. Sau khi List 1 -> List 2, quay lại chọn lại List 1 thì báo lỗi
  2. Sau khi List 1 -> List 2 -> List 3, quay lại chọn lại List 1 hoặc List 2 thì báo lỗi
Em tìm mãi mà không rõ nguyên nhân, cách khắc phục? Mong các bác sớm hồi âm
 
Upvote 0
Upvote 0
Chào các anh
Trong cấu trúc vòng lặp em thừong thấy i = i+1 (...đại loại thế)
Nhưng sao cấu trúc trên lại là


Các anh chỉ giáo

ST
Cells(rc, 1).EntireRow.Delete Shift:=xlUp
Dòng này ie delte dòng từ dưới lên. Thông thường với vòng lặp, nếu bạn duyệt từ đầu đến cuối, thỏa điều kiện, bạn delete dòng, lúc ấy Rc, bạn cứ thử thực hiện sẽ thấy.
Từ đó => nếu muốn dele row thì bạn nến quét từ cuối lên đầu. =>Rc=Rc-1.
 
Upvote 0
1. Giả sử mình chọn 1 vùng bất kỳ, Sau đó muốn dùng Code để chọn Cell dưới cùng ở cột đầu tiên của vùng thì có code nào duy nhất 1 code làm được điều này không?

2. Mình thì không biết làm, nên mượn Resize để làm hộ chuyện ấy:
PHP:
Selection.Resize(, 1)(Selection.Resize(, 1).Count).Select
Nhưng thấy cách làm này thủ công và chưa ưu việt lắm, Mong cao kiến của các bạn?
 
Upvote 0
Bạn suy ra từ đây

PHP:
Sub LastSelection()
 Range([A3], [B65500].End(xlUp)).Select
 MsgBox Cells(Selection.Rows.Count, "A").Address
End Sub
 
Upvote 0
1. Giả sử mình chọn 1 vùng bất kỳ, Sau đó muốn dùng Code để chọn Cell dưới cùng ở cột đầu tiên của vùng thì có code nào duy nhất 1 code làm được điều này không?

2. Mình thì không biết làm, nên mượn Resize để làm hộ chuyện ấy:
PHP:
Selection.Resize(, 1)(Selection.Resize(, 1).Count).Select
Nhưng thấy cách làm này thủ công và chưa ưu việt lắm, Mong cao kiến của các bạn?
Bạn nghiên cứu code sau
PHP:
Sub thu()
Dim MyRng As Range, iR As Long, iC As Long, iRng As Long
Set MyRng = [a2:c10]
iR = MyRng.Rows.Count
iC = MyRng.Columns.Count
iRng = (iR - 1) * iC + 1
MsgBox MyRng(iRng).Address
MsgBox MyRng.Cells(iR, 1).Address
MsgBox MyRng.Resize(, 1)(MyRng.Resize(, 1).Count).Address

End Sub
 
Upvote 0
Câu dưới này không hẳn là ưu việt, nhưng có thể chọn ô bất kỳ trong vùng chọn. Khi dùng Cells(), tham chiếu dòng cột của Cells là số thứ tự dòng, cột tính từ ô trên cùng bên trái của vùng chọn, và vùng chọn là bất kỳ:

PHP:
Selection.Cells(Selection.Rows.Count,1).Select
 
Upvote 0
KKLUFRE009708
KKLUSYD08215
KKLUMEL088062
KKLUBNE0005060

Các huynh giúp em viết một code sao cho tại cột A (sheet active) các vận đơn tàu khi gặp các ký tự bôi đậm như trên thì 4 chữ cái đầu tiền đổi về KLIS (thay thế cho KKLU)

Bình thường công thức em vẫn làm như sau

{=IF(MID(A2;5;3)={"FRE";"SYD";"MEL";"BNE"};SUBSTITUTE(A2;A2;"KLIS"&RIGHT(A2;LEN(A2)-4));A2)}

Cám ơn các huynh
 
Lần chỉnh sửa cuối:
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom