Chuyên đề giải đáp những thắc mắc về code VBA

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Chào ACE GPE,
em có đoạn code bên dưới, khi run thì không tác dụng, ACE kiểm tra giúp em nhé. em cảm ơn
Mã:
Sub Copy()
..
End Sub
PHP:
Sub Copy()
With Sheets("Pickticket")
    If .Range("A2") <> "" Then
        .Range("B2").Copy
        Sheets("DN").Range("D5").PasteSpecial (xlPasteValues)
        Application.CutCopyMode = False
    End If
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Sub Copy()
With Sheets("Pickticket")
    If .Range("A2") <> "" Then .Range("B2").Copy Sheets("DN").Range("D5").PasteSpecial(xlPasteValues)
End With
End Sub

Em chạy thử thì nó bị lỗi, Em sửa lại thế này thì hết.
http://prntscr.com/fubvh5

PHP:
Sub Copy()
With Sheets("Pickticket")
    If .Range("A2") <> "" Then .Range("B2").Copy
End With
Sheets("DN").Range("D5").PasteSpecial (xlPasteValues)
End Sub
 
Upvote 0
Em chạy thử thì nó bị lỗi, Em sửa lại thế này thì hết.
http://prntscr.com/fubvh5

PHP:
Sub Copy()
With Sheets("Pickticket")
    If .Range("A2") <> "" Then .Range("B2").Copy
End With
Sheets("DN").Range("D5").PasteSpecial (xlPasteValues)
End Sub
Có được không vậy ta, nếu A2 rỗng, lệnh copy sẽ không được thực hiện, mà đằng sau vẫn ra lệnh dán. Ghép lệnh copy và paste vào trong "If" có lẽ sẽ ổn hơn.
 
Upvote 0
Có được không vậy ta, nếu A2 rỗng, lệnh copy sẽ không được thực hiện, mà đằng sau vẫn ra lệnh dán. Ghép lệnh copy và paste vào trong "If" có lẽ sẽ ổn hơn.

Hoàn toàn chính xác, em copy đưa ra mà quên suy nghĩ.Nên đưa nó vào trong cụm If.
 
Upvote 0
Em cám ơn tất cả ACE hỗ trợ phần VBA code trên, hiện tại em đã thực hiện thành công như bên dưới:
Mã:
Sub copy()
Sheets("Pickticket").Select
Dim i As Integer
    For i = 2 To 20
        If Sheets("Pickticket").Range("A" & i).Value <> Empty Then
            Sheets("Pickticket").Range("B" & i).copy
            Sheets("DN").Range("D5").PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
            Sheets("DN").Select
            Sheets("DN").copy after:=Sheets(4)
        End If
    Next i
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Em cám ơn tất cả ACE hỗ trợ phần VBA code trên, hiện tại em đã thực hiện thành công như bên dưới:
Mã:
Sub copy()
Sheets("Pickticket").Select
Dim i As Integer
    For i = 2 To 20
        If Sheets("Pickticket").Range("A" & i).Value <> Empty Then
            Sheets("Pickticket").Range("B" & i).copy
            Sheets("DN").Range("D5").PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
            Sheets("DN").Select
            Sheets("DN").copy after:=Sheets(4)
        End If
    Next i
End Sub
- Cho code vào thẻ [ code]
- Bỏ cái .select đi đỡ nặng.
- Nghiên cứu dùng mảng xem
 
Upvote 0
Chào Anh Chi GPE
em có đoạn code bên dưới, muốn set trang vùng trang in, nhưng run code không chạy được.
Anh chi xem giúp em nhé.
Note: em chỉ muốn giới hạn vùng có dữ liệu thôi nhé. cám ơn anh chị
Mã:
Sub gioihanvungin()
With Sheets(1)
    .PageSetup.PrintArea = Range(Range("B65000").End(xlUp), Range("F1")).Select
End With
End Sub
 

File đính kèm

  • gioihanvungin.xls
    41 KB · Đọc: 6
Upvote 0
Chào Anh Chi GPE
em có đoạn code bên dưới, muốn set trang vùng trang in, nhưng run code không chạy được.
Anh chi xem giúp em nhé.
Note: em chỉ muốn giới hạn vùng có dữ liệu thôi nhé. cám ơn anh chị
Mã:
Sub gioihanvungin()
With Sheets(1)
    .PageSetup.PrintArea = Range(Range("B65000").End(xlUp), Range("F1")).Select
End With
End Sub
Có một dòng thì mình viết liền luôn (tiết kiệm được những 2 dòng):
Mã:
Sheets(1).PageSetup.PrintArea = Range(Range("B65000").End(xlUp), Range("F1")).Select
'Code đúng hay chưa thì chưa xét'
 

File đính kèm

  • gioihanvungin.xls
    37 KB · Đọc: 4
Upvote 0
Mã:
Sub gioihanvungin()
Dim lastRow As Long
With Sheets(1)
    lastRow = .Range("B65000").End(xlUp).Row
    .PageSetup.PrintArea = "$B$1:$F$" & lastRow
End With
End Sub
Có một dòng thì mình viết liền luôn (tiết kiệm được những 2 dòng):
Mã:
Sheets(1).PageSetup.PrintArea = Range(Range("F65000").End(xlUp), Range("F1")).Select
'Code đúng hay chưa thì chưa xét'
Chào befaint,
Mình thấy bạn lấy dòng cuối của cột F, có thể code giúp mình lấy cột cuối của cột B được không?
 
Lần chỉnh sửa cuối:
Upvote 0
Chào befaint,
Có thể code giúp mình set từ cột A qua Cột F được không?
Ý là cột B đó hả? --> Sửa lại thành:
PHP:
.PageSetup.PrintArea = "B1:F" & lastRow
'Với B1 là ô đầu tiên của cột đầu tiên thuộc vùng cần in'
'F_lastRow là ô cuối cùng của cột cuối cùng thuộc vùng cần in'
 
Upvote 0
Ý là cột B đó hả? --> Sửa lại thành:
PHP:
.PageSetup.PrintArea = "B1:F" & lastRow
'Với B1 là ô đầu tiên của cột đầu tiên thuộc vùng cần in'
'F_lastRow là ô cuối cùng của cột cuối cùng thuộc vùng cần in'

befaint lấy dòng cuối của cột B giúp mình nhé.
P/S: cột B có công thức chạy dài xuống.
 
Upvote 0
Thì mình đổi ký tự nào không phải là B thành B là được.
Mã:
lastRow = .Range("B65000").End(xlUp).Row
Mình đổi như bên trên, nhưng cột B của mình có công thức, nên dòng cuối sẽ lấy ô công thức cuối cùng, trong khi dữ liệu mình cần in nằm ở phía trên
 
Upvote 0
Mã:
lastRow = .Range("B65000").End(xlUp).Row
Mình đổi như bên trên, nhưng cột B của mình có công thức, nên dòng cuối sẽ lấy ô công thức cuối cùng, trong khi dữ liệu mình cần in nằm ở phía trên
Vậy sẽ có các cách:
- Dùng mảng duyệt các phần tử ở cột B (từ dưới lên), nếu có giá trị thì lấy từ dòng đó.
- Dùng ô phụ nào đó trong bảng tính để xác định dòng cuối cần in, dùng countif(), match(),max()...
Theo cách 2 cho đơn giản:
Công thức tại [Z1]:
Mã:
Z1=MAX($B$6:$B$9000)+5
Sub:
PHP:
Sub gioihanvungin()
Dim lastRow As Long
With Sheets(1)
    lastRow = .Range("Z1").Value
    .PageSetup.PrintArea = "B1:F" & lastRow
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy sẽ có các cách:
- Dùng mảng duyệt các phần tử ở cột B, nếu có giá trị thì lấy từ dòng đó.
- Dùng ô phụ nào đó trong bảng tính để xác định dòng cuối cần in, dùng countif(), match()...
mình hiểu rồi, code như bên dưới:
Chúc bạn ngủ ngon. cám ơn bạn rất nhiều
Mã:
Sub gioihanvungin()
Dim lastRow As Long
With Sheets(1)
    lastRow = .Range("A5") 'Dùng cột phụ hàm countif()
    .PageSetup.PrintArea = "B1:F" & lastRow
End With
End Sub
 
Upvote 0
Chào Anh Chi GPE
em có đoạn code bên dưới, muốn set trang vùng trang in, nhưng run code không chạy được.
Anh chi xem giúp em nhé.
Note: em chỉ muốn giới hạn vùng có dữ liệu thôi nhé. cám ơn anh chị
Mã:
Sub gioihanvungin()
With Sheets(1)
    .PageSetup.PrintArea = Range(Range("B65000").End(xlUp), Range("F1")).Select
End With
End Sub

Thuộc tính PrinArea trả về String nên bạn viết vậy không đúng cú pháp đâu.
Mã:
Property PrintArea As String
 
Upvote 0
Vậy sẽ có các cách:
- Dùng mảng duyệt các phần tử ở cột B (từ dưới lên), nếu có giá trị thì lấy từ dòng đó.
- Dùng ô phụ nào đó trong bảng tính để xác định dòng cuối cần in, dùng countif(), match(),max()...
Theo cách 2 cho đơn giản:
Công thức tại [Z1]:
PHP:
Sub gioihanvungin()
Dim lastRow As Long
With Sheets(1)
    lastRow = .Range("Z1").Value
    .PageSetup.PrintArea = "B1:F" & lastRow
End With
End Sub
Chào befaint,
Từ cdoe bên dưới mình muốn sort cột D va F theo chiều tăng dần thì sẽ code như thế nào, bạn giúp mình nhé. Cám ơn bạn nhiều.
Sub:
PHP:
Sub gioihanvungin()
Dim lastRow As Long
With Sheets(1)
    lastRow = .Range("Z1").Value
    .PageSetup.PrintArea = "B1:F" & lastRow
End With
End Sub
 
Upvote 0
Web KT
Back
Top Bottom