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 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

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

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
Nếu bạn thích, bạn có thể dùng tinh năng Sort của Excel, để ghi lại Macro.
Mình dùng record macro nhưng khi bỏ ................vào thì phát sinh lỗi nên mình không sử sụng
PHP:
For i = 2 To 20
        If Sheets("Pickticket").Range("A" & i).Value <> Empty Then
            Sheets("Pickticket").Range("B" & i).copy
            Sheets("DN").Range("E6").PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
            Dim lastRow As Long
    With Sheets("DN")
        lastRow = .Range("A10").Value
        .PageSetup.PrintArea = "C1:S" & lastRow
.............................
    End With
    With Sheets("DN").PageSetup
        .PrintTitleRows = "$10:$10"
    End With
        Sheets("DN").copy after:=Sheets("DN")
        End If
    Next i
 
Upvote 0
Mình dùng record macro nhưng khi bỏ ................vào thì phát sinh lỗi nên mình không sử sụng
Cứ ghi macro cái thao tác sort đi đã. Làm gì mà đã ghép mấy bài vô rồi.
Không dùng cái dòng nhiều chấm (......) đó, xóa nó đi vì nó đâu là code trong VBA (thêm dấu nháy đơn vào đầu dòng).

'-----
Tình hình hơi căng, chắc phải học lý thuyết trước thôi hoặc tìm người kèm.
 
Upvote 0
Xóa nội dung vì không phù hợp topic
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là toàn bộ code hiện tại mình có, bạn xem có đúng và có thể rút gọn giúp mình không !
Giờ có 2 phương án:
1- Nếu tiếp tục ở box này (Giải đáp thắc mắc...) thì chỉ gửi cái khúc sort lên trước (kèm thêm file cho mọi người dễ xem hơn thì càng tốt).
2- Lập một topic mới, nêu toàn bộ yêu cầu.
 
Upvote 0
Giờ có 2 phương án:
1- Nếu tiếp tục ở box này (Giải đáp thắc mắc...) thì chỉ gửi cái khúc sort lên trước (kèm thêm file cho mọi người dễ xem hơn thì càng tốt).
2- Lập một topic mới, nêu toàn bộ yêu cầu.
mình xin lỗi, mình quên đây là topic giải đáp thắc mắc.
Các Mod xóa giúp mình những bài không liên quan topic này nhé. cám ơn nhiều
 
Upvote 0
Web KT

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

Back
Top Bottom