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:
Mọi người cho minh xin đoạn code bẻ khoá unprotection sheet đi ah
 
Upvote 0
Mọi người cho minh xin đoạn code bẻ khoá unprotection sheet đi ah
Bạn dùng các này nhé. Mình chép trên diễn đàn ko biêt của ai nữa lâu quá rồi
[FONT=&quot]Các bạn có thể phá pass của 1 Sheet bị Protect với đoạn code sau :
[/FONT]
[FONT=&quot]
Sub PasswordBreaker()

Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then

ActiveWorkbook.Sheets(1).Select
Range(“a1”).FormulaR1C1 = Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next

End Sub



Cách sử dụng : Các bạn chọn Sheet bị Protect , bấm phải chuột, chọn View Code, hoặc bấm phím tắt Alt + F11
Paste đoạn code trên vào và RUn. Chờ khoảng 1-2 phút là xong. Pass đã bị phá bạn có thể nhập liệu bình thường[/FONT]
 
Upvote 0
Bạn dùng các này nhé. Mình chép trên diễn đàn ko biêt của ai nữa lâu quá rồi
[FONT=&quot]Cách sử dụng : Các bạn chọn Sheet bị Protect , bấm phải chuột, chọn View Code, hoặc bấm phím tắt Alt + F11[/FONT]
[FONT=&quot] Paste đoạn code trên vào và Run. Chờ khoảng 1-2 phút là xong. Pass đã bị phá bạn có thể nhập liệu bình thường[/FONT]
Giả sử người ta protect luôn VBA thì bạn Paste code vào đâu?
Đố biết! Ẹc... Ẹc...
 
Lần chỉnh sửa cuối:
Upvote 0
Giả sử người ta protect luôn VBA thì bạn Paste code vào đâu?
Đố biết! Ẹc... Ẹc...
Hì hì, mấy cái vụ VBA Em chẳng biết tí tẹo nào. Anh có thể nói rõ hơn được ko (cho VD cụ thể ấy để Em còn học hỏi)?. Không biết có phải paste vào module ko?
 
Upvote 0
Hì hì, mấy cái vụ VBA Em chẳng biết tí tẹo nào. Anh có thể nói rõ hơn được ko (cho VD cụ thể ấy để Em còn học hỏi)?. Không biết có phải paste vào module ko?
Tức là thế này:
- Bạn có 1 file bị protect sheet và đang có ý định bẻ khóa
- Bạn "hăm hở" copy đoạn code trên, định dán vào module để chạy ---> Và đường nhiên bạn sẽ làm như sau:
a) Bấm Alt + F11
b) Vào menu Insert, chọn Module
c) Dán code đã copy vào Module vừa chèn
d) Bấm F5 và.. ngồi chờ
Đúng chứ?
Thế nhưng không may cho bạn là đôi khi bạn gặp phải 1 file mà họ protect luôn VBA, đồng nghĩa là bạn không thể chèn module hay chỉnh sửa bất cứ thứ gì... Vậy thì chổ đâu cho bạn dán code?
Gặp trường hợp này, tôi thường dùng cách đi vòng:
- Mở 1 Workbook mới
lưu ý: Workbook mới khác với 1 file Excel mới nha ---> Tức bấm nút bấm nút New hoặc tổ hợp phím Ctrl + N hoặc vào menu File, chọn New
(Mở 1 file Excel mới có nghĩa là khởi động Excel từ Start menu)
- Chèn Module, dán code đã copy vào
- Chuyển sang Workbook mà ta cần bẻ khóa, bấm Alt + F8, chọn tên macro (của file mới) rồi bấm Run
Nói tóm lại:
- Có thể đặt code ở 1 Workbook khác rồi đứng từ Workbook này, gọi macro ở Workbook kia
 
Upvote 0
EM có đoạn code như sau:
Mã:
Function mangtangdan(mangbandau() As Double) As Double()
    Dim lb As Long
    Dim ub As Long
    lb = LBound(mangbandau)
    ub = UBound(mangbandau)
    Dim mangtamthoi() As Double
    mangtamthoi = mangbandau
    Dim tg As Double: Dim i As Long: Dim j As Long
    For i = lb To ub - 1
        For j = i + 1 To ub
            If mangtamthoi(i) > mangtamthoi(j) Then
                tg = mangtamthoi(i)
                mangtamthoi(i) = mangtamthoi(j)
                mangtamthoi(j) = tg
            End If
        Next
    Next
        mangtangdan = mangtamthoi
    Erase mangtamthoi
   
End Function
Cho em hỏi: trong đoạn code trên biến tg tại sao lại có thể bằng mảng mangtamthoi(i) được
giải thích giúp em đoạn :
Mã:
             [B]tg = mangtamthoi(i)
                mangtamthoi(i) = mangtamthoi(j)
                mangtamthoi(j) = tg[/B]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
EM có đoạn code như sau:
Function mangtangdan(mangbandau() As Double) As Double()
Dim lb As Long
Dim ub As Long
lb = LBound(mangbandau)
ub = UBound(mangbandau)
Dim mangtamthoi() As Double
mangtamthoi = mangbandau
Dim tg As Double: Dim i As Long: Dim j As Long
For i = lb To ub - 1
For j = i + 1 To ub
If mangtamthoi(i) > mangtamthoi(j) Then
tg = mangtamthoi(i)
mangtamthoi(i) = mangtamthoi(j)
mangtamthoi(j) = tg
End If
Next
Next
mangtangdan = mangtamthoi
Erase mangtamthoi

End Function
Cho em hỏi: trong đoạn code trên biến tg tại sao lại có thể bằng mảng mangtamthoi(i) được
giải thích giúp em đoạn :
tg = mangtamthoi(i)
mangtamthoi(i) = mangtamthoi(j)
mangtamthoi(j) = tg
Đây là thuật toán về SORT TĂNG DẦN
Có thể giải thích ngắn gọn thế này:
- Duyệt từ đầu đến cuối mảng
- Nếu 2 em nằm cạnh nhau mà em bên trái lớn hơn em bên phải thì đổi chổ chúng cho nhau
- Để đổi chổ, ta phải qua công đoạn phụ:
a) Đặt 1 biến tạm = giá trị em bên trái
B) Đặt em bên trái = giá trị em bên phải
c) Đặt em bên phải = giá trị của biến tạm​
-----------------------------------------------
Thuật toán là thế, còn cách thể hiện của mổi người có khác nhau nhưng đều tuân theo quy luật này
 
Upvote 0
Cho em hỏi trong đoạn mã trên Tg là biến tại sao lại có thể = mangtamthoi(i) được.
Theo em hiểu là:
tg là phần tử
mangtamthoi(i) là tập hợp nên không thể bằng nhau được.
 
Upvote 0
Dim mangtamthoi() As Double
For i = lb To ub - 1
mangtamthoi() là 1 mảng gồm nhiều phần tử, số phần tử là ub - 1 phần tử. Ký hiệu mangtamthoi(i) là phần tử thứ i. Vậy tg có thể so sánh với mangtamthoi(i) vì cùng loại.
 
Upvote 0
Anh chị nào giúp em đoạn code này với chưa học tới nhưng em đang cần mà không hiểu ý nghĩa của nó:
Mã:
Private Sub cmdUpdate_Click()
Dim c As Range
With Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row)
    Set c = .Find(MANV, LookIn:=xlValues, LookAt:=xlPart)
    If Not c Is Nothing Then
        c.Offset(0, 0) = MANV.Text
        c.Offset(0, 1) = HOTEN.Text
        c.Offset(0, 2) = NGAYSINH.Text
        c.Offset(0, 3) = CMND.Text
        c.Offset(0, 4) = DCTT.Text
        
    End If
End With
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Anh chị nào giúp em đoạn code này với chưa học tới nhưng em đang cần mà không hiểu ý nghĩa của nó:
Private Sub cmdUpdate_Click()
Dim c As Range
With Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row)
Set c = .Find(MANV, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
c.Offset(0, 0) = MANV.Text
c.Offset(0, 1) = HOTEN.Text
c.Offset(0, 2) = NGAYSINH.Text
c.Offset(0, 3) = CMND.Text
c.Offset(0, 4) = DCTT.Text

End If
End With
End Sub
Cái này gần giống như ta bấm Ctrl + F để tìm vậy! Nếu tìm thấy có thì điền giá trị gì đó vào các cell bên phải (giá trị dùng để điền được lấy từ MANV, HOTEN...)
Thế thôi
 
Upvote 0
Anh có thể cho em xin công thức của hàm FIND và giải thích hộ em phần With Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row) được không.
Phần đó em chưa học tới.
 
Lần chỉnh sửa cuối:
Upvote 0
Anh có thể cho em xin công thức của hàm FIND và giải thích hộ em phần With Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row) được không.
Phần đó em chưa học tới.

(1) FIND() ở đó không fải là 1 hàm, nó là 1 fương thức; Bạn xem thêm tại chổ ni: http://www.giaiphapexcel.com/forum/showthread.php?15116-Tổng-hợp-về-phương-thức-tìm-kiếm-FIND-(-Find-Method)

(2) Để hiểu dòng lệnh nào đó tôi thường đọc từ fải qua trái

Ví dụ để hiểu Sheet1.Range("a2:a" & Sheet1.[a56536].End(xlUp).Row)

Tôi đọc đoạn màu xanh trước; nó là: Chọn ô [A65536] của trang tính tên là Sheet1 & bấm mũi tên lên đến dòng có dữ liệu cuối cùng của cột [A]
Sau đó đọc tiếp fần còn lại Trang tính sheet1, vùng từ A2 cho đến dòng cuối có chứa dữ liệu của nó;

Nếu có ai đó chân f ương hơn, họ sẽ viết thành vài dòng lệnh như sau
PHP:
 Dim eRw As Long
 eRw = Sheet1.[a56536].End(xlUp).Row
 With Sheet1.Range("a2:a" & eRw)
     . . . . 
 End With

Thì cũng rứa mà thôi!
 
Upvote 0
Vì mình không biết về VB, mình muốn nhờ các cao thủ gỡ rối một đoạn mã sau:
Mã:
Public Sub in_bg()
Dim tu, den As Integer
                    'Xac dinh so in
    tu = Sheet1.Cells(2, 12)
    den = Sheet1.Cells(3, 12)
                    'Xoa trang in
Sheet5.Range("A:AQ").Clear
Application.ScreenUpdating = False
                    'Tao trang in
Ak = 1
For i = tu To den
Sheet1.Cells(1, 14) = i
Sheet4.Rows("1:23").Copy
Sheet5.Cells(Ak, 1).PasteSpecial Paste:=xlPasteValues
Sheet5.Cells(Ak, 1).PasteSpecial Paste:=xlPasteFormats
Ak = Ak + 24
Next
Application.ScreenUpdating = True
Sheet5.Activate
Application.CutCopyMode = False
            'Tuyf banj chon cachs xem
'Sheet5.PrintPreview
Sheet5.Range("I1").Select
End Sub
Mình muốn khi mình Paste sang 2 sheet khác, có kèm thêm điều kiện ô AG22 >3
Rất mong được sự giúp đỡ của các cao thủ!
Xin cảm ơn!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
giúp tôi viết đoạn code : tôi đã tạo một form, giờ muốn nhập dữ liệu vào forms đó và muốn nó tự động lưu vào bảng tính excel . vậy đoạn code đó như thế nào và giải thich giúp tôi
 
Upvote 0
Mình học chiêu thứ 30 của ptm0412 về Sort tự động
Mã:
[COLOR=Navy][COLOR=#000000][COLOR=#0000bb]Sub SortByX[/COLOR][COLOR=#007700]( ) 
[/COLOR][COLOR=#0000bb]Dim i [/COLOR][COLOR=#007700]As [/COLOR][COLOR=#0000bb]Long 
[/COLOR][COLOR=#007700]For [/COLOR][COLOR=#0000bb]i [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000bb]Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Columns[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Count To 1 Step [/COLOR][COLOR=#007700]-[/COLOR][COLOR=#0000bb]1 
Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Sort Key1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000bb]Selection[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000bb]Cells[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]2[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]i[/COLOR][COLOR=#007700]), [/COLOR][COLOR=#0000bb]_ 
Order1[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000bb]xlAscending[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]Header[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000bb]xlGuess[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000bb]Orientation[/COLOR][COLOR=#007700]:=[/COLOR][COLOR=#0000bb]xlTopToBottom 
Next i 
End Sub  [/COLOR][/COLOR][/COLOR]
Bây giờ trong bảng tính của mình có thêm 1 vùng cũng muốn sort tự động như trên, nhưng mình muốn cả 2 vùng đó đều được sort cùng lúc, các bạn giúp mình với nhé
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Mình học chiêu thứ 30 của ptm0412 về Sort tự động

Sub SortByX( )
Dim i As Long
For i = Selection.Columns.Count To 1 Step -1
Selection
.Sort Key1:=Selection.Cells(2, i), _
Order1
:=xlAscending, Header:=xlGuess, Orientation:=xlTopToBottom
Next i
End Sub


Bây giờ trong bảng tính của mình có thêm 1 vùng cũng muốn sort tự động như trên, nhưng mình muốn cả 2 vùng đó đều được sort cùng lúc, các bạn giúp mình với nhé
Vậy thì viết thành 2 code
PHP:
Sub SortVung1()
....
End Sub
PHP:
Sub SortVung2()
....
End Sub
Rồi viết 1 đoạn code nữa để chạy 1 lần 2 đoạn code trên
PHP:
Sub Main()
  SortVung1
  SortVung2
End Sub
Với 2 đoạn code SortVung1SortVung2, bạn phải thay Selection bằng 1 Range cụ thể nào đó
 
Upvote 0
Mình đã làm theo hướng dẫn của bạn ndu.
Chọn 1 vùng để nhập code 1
Chọn 1 vùng khác để nhập code 2

Đã viết đọan code để chạy cùng lúc, trước khi chạy code này thì phải chọn vùng của code 1, vậy bạn chỉ tiếp cho mình: "chọn 1 trong 2 vùng bất kỳ cũng có thể chạy cùng lúc
 
Upvote 0
Em có đoạn mã này nhờ mọi người giải đáp hộ em:
PHP:
Sub su_dung_usedrange()
Dim range As range
Dim str As String
For Each range In ActiveSheet.UsedRange
    If range.Value < 0 Then
    str = str & range.Address & ","
    
    End If
Next
If str <> "" Then
  str = Left(str, Len(str) - 1)
  ActiveSheet.range(str).Select
End If

End Sub
Mong mọi người có thể giải thích cho em đoạn If str <> "" Then
Nhân tiện chỉ dùm em cách chèn tab code trong bài viết.Cái này em thấy mọi người làm nhiều nhưng chưa biết cách.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
1. Giải thích If str <> "" Then
Phần trên là đi tìm trong các cells của vùng dữ liệu, nếu cell nào có giá trị âm thì ghi địa chỉ cell đó lại vào biến str, cách nhau bởi dấu phẩy. Nếu không có ô nào có giá trị âm, nghĩa là không ghi kí rì vào str, thì str trống trơn.

2. Tạo tag code:
- Cách 1: thêm [/php] vào cuối code,
PHP:
[/B] vào đầu code
- Cách 2: Thêm [B][/code][/B] vào cuối code, [B][code][/B] vào đầu code

Ghi chú: tôi nói cuối trước đầu sau, vì nếu nói đầu trước cuối sau thì bản thân câu viết của tôi bị biến thành code mất tiêu.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom