code in giấy ngang (1 người xem)

Liên hệ QC

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

Rùa Con 1080

Thành Viên Sao Chép 2
Tham gia
4/5/16
Bài viết
351
Được thích
47
Giới tính
Nữ
Chào mọi người!
Em có đoạn code của AC trên DD giúp cho khi nhấn vào thì in(PrintOut)
Mã:
With Worksheets("Bao cao").PageSetup
 .PrintTitleRows = "$1:$4"
 .PrintTitleColumns = "$A:$G"
End With
    Worksheets("Bao cao").Range("A1:G" & ListBox7.ListCount + 4).PrintOut
nhưng khi in là in theo mặc định giấy khổ đứng.
Mong các AC giúp cho một nút để tùy chọn khổ giấy là ngang hay đứng.
Thân chào.
 
Đọc code mà không hiểu lại cứ đòi Form có code, đòi tập tin.
Người ta đã gửi code mà trong đó có dòng nằm tơ hơ ra

Nhìn vào là biết sẽ in một vùng trên sheet: từ cột A tới cột G và từ dòng 1 tới dòng nào đó. Thế thì sao cứ đòi Form, tập tin? In 1 vùng trên sheet là in 1 vùng trên sheet. Chả nhẽ nếu người ta nhập dữ liệu bằng tay thì in khác, đổ dữ liệu từ Form xuống sheet thì in khác, mà nhập dữ liệu từ tập tin ngoài vào sheet thì in khác? Người ta muốn in 1 vùng trên sheet và đã từng in bình thường, tức thành công, chỉ có điều tới thời điểm này toàn in trên giấy đứng

Bây giờ người ta muốn thêm/sửa code để in ngang hoặc đứng

Chỉ có thế thôi. Đọc không hiểu mà cứ đòi Form, tập tin. Dữ liệu có rồi, không quan trọng là đã nhập từ Form, nhập tay hay đọc từ tập tin ngoài, và người ta đã in nhiều lần thành công. Người ta chỉ muốn có thêm lựa chọn chiều giấy in thôi.
nếu vậy thì code chỉ vầy thôi là cho bạn ấy sự lựa chọn trang dọc hay ngang rồi thầy. có gì đâu mà không áp dụng được.
hôm nay tạm khỏe lại rồi. bạn rùa con xem ok chưa he
Mã:
Private Sub cmd_in6_Click()
    Dim Arr, rng As Range, r As Long, c As Long
    Dim a As Byte
r = Worksheets("Bao cao").Range("A65536").End(xlUp).Row 'chon dong cuoi cung cua cot A
With Worksheets("Bao cao").Range("A5:G" & r) 'lam viec voi vung "A5:G" & r
    .ClearContents 'xoa du lieu cu
   'xoa vien thi chi 1 dong nhu vay duoc roi
    .Borders.LineStyle = xlNone 'xoa ke vien
End With
Worksheets("Bao cao").Range("D2").Value = cb_thang6.Value 'dien gia tri cua cb_thanng 6 xuong o D2 Sheet BaoCao
Arr = ListBox7.List 'gan mang bang gia tri cua listbox7
ReDim Preserve Arr(LBound(Arr) To UBound(Arr), LBound(Arr, 2) To ListBox7.ColumnCount - 1) 'khai bao lai mang giu nguyen gia tri cu
For r = LBound(Arr) To UBound(Arr) ' vong lap tu dau den cuoi bang
    For c = LBound(Arr, 2) + 3 To UBound(Arr, 2) 'vong lap tu cot dau den cot cuoi cua bang
        Arr(r, c) = CDbl(Arr(r, c)) 'chuyen gia tri cua mang sang kieu double
    Next c
Next r
With Worksheets("Bao cao").Range("A5").Resize(UBound(Arr) - LBound(Arr) + 1, UBound(Arr, 2) - LBound(Arr, 2) + 1) ' lam viec voi vung moi
    .Value = Arr ' dien gia tri xuong
   'ke bang thi chi 1 dong nhu vay duoc roi
    .Borders.LineStyle = xlContinuous 'ke bang
End With
'Worksheets("Bao cao").Range("A2").Resize(UBound(Arr) - LBound(Arr) + 4, UBound(Arr, 2) - LBound(Arr, 2) + 1).Columns.AutoFit'chinh lai chieu cao dong
'    in bao cao
With Worksheets("Bao cao").PageSetup 'dinh dang trang tinh
    a = MsgBox("Chon trang ngang hay doc" & ChrW(10) & "YES: Trang doc" & "NO: Trang ngang", vbYesNo, "Thông báo") 'lua chon trang ngang hoac doc
    If a = vbYes Then
        .Orientation = xlPortrait    ' doc
    ElseIf a = vbNo Then
        .Orientation = xlLandscape    ' ngang
    End If
    'gan tieu de ngang va doc
    .PrintTitleRows = "$1:$4"
    .PrintTitleColumns = "$A:$G"
End With
Worksheets("Bao cao").Range("A1:G" & ListBox7.ListCount + 4).PrintOut 'xuat lenh in tai vung A1:G xxxx
End Sub
 
Upvote 0
Xin các AC giúp em chổ Sub Select_abc(), khi chọn "CanCel" thì thoát Sub Select_abc () đồng thời cũng thoát luôn sub cmd_in6_Click(), em thử thế này mà không được:
Mã:
Private Sub Select_abc()
    Dim a As String
    a = MsgBox("Chon trang ngang hay doc", vbYesNoCancel, "Thong bao")
    If a = vbYes Then
        ActiveSheet.PageSetup.Orientation = xlPortrait    ' doc
        'ActiveWindow.SelectedSheets.PrintOut
        ActiveWindow.SelectedSheets.PrintPreview
    ElseIf a = vbNo Then
        ActiveSheet.PageSetup.Orientation = xlLandscape    ' ngang
        'ActiveWindow.SelectedSheets.PrintOut
        ActiveWindow.SelectedSheets.PrintPreview
Exit_cmd_in6_Click: <-------them cho nay
        Exit Sub
    End If
End Sub


PHP:
Sub Select_abc()
    Dim a As String
    a = MsgBox("Chon trang ngang hay doc", vbYesNoCancel, "Thong bao")
    If a <> vbYes And a <> vbNo Then
        Exit Sub
    ElseIf a = vbYes Then
        ActiveSheet.PageSetup.Orientation = xlPortrait    ' doc
        'ActiveWindow.SelectedSheets.PrintOut
        ActiveWindow.SelectedSheets.PrintPreview
    ElseIf a = vbNo Then
        ActiveSheet.PageSetup.Orientation = xlLandscape    ' ngang
        'ActiveWindow.SelectedSheets.PrintOut
        ActiveWindow.SelectedSheets.PrintPreview
        Exit Sub
    End If
End Sub

Nếu đưa điều kiện đầu tiên để xử lý khi chọn Cancel thì được không,
 
Upvote 0
sao code của bạn phulien1902 mình coppy vào thì lỗi đỏ dòng:
Mã:
If a <> vbYes And a <> vbNo Then
Cám ơn Anh langtuchungtinh360, code anh chạy được rồi.
 
Upvote 0
PHP:
Sub Select_abc()
    Dim a As String
    a = MsgBox("Chon trang ngang hay doc", vbYesNoCancel, "Thong bao")
    If a <> vbYes And a <> vbNo Then
        Exit Sub
    ElseIf a = vbYes Then
        ActiveSheet.PageSetup.Orientation = xlPortrait    ' doc
        'ActiveWindow.SelectedSheets.PrintOut
        ActiveWindow.SelectedSheets.PrintPreview
    ElseIf a = vbNo Then
        ActiveSheet.PageSetup.Orientation = xlLandscape    ' ngang
        'ActiveWindow.SelectedSheets.PrintOut
        ActiveWindow.SelectedSheets.PrintPreview
        Exit Sub
    End If
End Sub

Nếu đưa điều kiện đầu tiên để xử lý khi chọn Cancel thì được không,
đâu cần viết dài dòng thế bạn
chỉ cần vầy được rồi
Mã:
if a = 6 then' YES
elseif a = 7 then' NO
else'truong hop con lai CANCEL = 2
end if
nếu bạn ấy muốn thêm cancel nữa thì code sẽ vầy. không đọc bài nên thiếu yêu cầu
Mã:
Private Sub cmd_in6_Click()
   Dim Arr, rng As Range, r As Long, c As Long
   Dim a As Byte
r = Worksheets("Bao cao").Range("A65536").End(xlUp).Row 'chon dong cuoi cung cua cot A
With Worksheets("Bao cao").Range("A5:G" & r) 'lam viec voi vung "A5:G" & r
   .ClearContents 'xoa du lieu cu
   'xoa vien thi chi 1 dong nhu vay duoc roi
   .Borders.LineStyle = xlNone 'xoa ke vien
End With
Worksheets("Bao cao").Range("D2").Value = cb_thang6.Value 'dien gia tri cua cb_thanng 6 xuong o D2 Sheet BaoCao
Arr = ListBox7.List 'gan mang bang gia tri cua listbox7
ReDim Preserve Arr(LBound(Arr) To UBound(Arr), LBound(Arr, 2) To ListBox7.ColumnCount - 1) 'khai bao lai mang giu nguyen gia tri cu
For r = LBound(Arr) To UBound(Arr) ' vong lap tu dau den cuoi bang
   For c = LBound(Arr, 2) + 3 To UBound(Arr, 2) 'vong lap tu cot dau den cot cuoi cua bang
       Arr(r, c) = CDbl(Arr(r, c)) 'chuyen gia tri cua mang sang kieu double
   Next c
Next r
With Worksheets("Bao cao").Range("A5").Resize(UBound(Arr) - LBound(Arr) + 1, UBound(Arr, 2) - LBound(Arr, 2) + 1) ' lam viec voi vung moi
   .Value = Arr ' dien gia tri xuong
   'ke bang thi chi 1 dong nhu vay duoc roi
   .Borders.LineStyle = xlContinuous 'ke bang
End With
'Worksheets("Bao cao").Range("A2").Resize(UBound(Arr) - LBound(Arr) + 4, UBound(Arr, 2) - LBound(Arr, 2) + 1).Columns.AutoFit'chinh lai chieu cao dong
'    in bao cao
With Worksheets("Bao cao").PageSetup 'dinh dang trang tinh
   a = MsgBox("Chon trang ngang hay doc" & ChrW(10) & "YES: Trang doc" & "NO: Trang ngang" & ChrW(10) & "CANCEL: Bo Qua", 3, "Thông báo") 'lua chon trang ngang, doc hoac bo qua
   If a = 6 Then
       .Orientation = xlPortrait    ' doc
   ElseIf a = 7 Then
       .Orientation = xlLandscape    ' ngang
  Else
Exit Sub
   End If
   'gan tieu de ngang va doc
   .PrintTitleRows = "$1:$4"
   .PrintTitleColumns = "$A:$G"
End With
Worksheets("Bao cao").Range("A1:G" & ListBox7.ListCount + 4).PrintOut 'xuat lenh in tai vung A1:G xxxx
End Sub
 
Upvote 0
sao lúc trước em có them
Mã:
Em có them vào code:
' in bao cao
With Worksheets("Bao cao").PageSetup
.Orientation = xlLandscape
.PrintTitleRows = "$1:$4"
.PrintTitleColumns = "$A:$G"
End With
Worksheets("Bao cao").Range("A1:G" & ListBox7.ListCount + 4).PrintOut

nhưng bị lỗi "438" "Object doesn't support this property or method"
Mong các AC giúp đỡ.
Mà không được, ah mà anh chỉ em cách nhân F8 để xem code thực hiện, thì em làm nó cư hiện cái form làm sao xem sheet được.
 
Upvote 0
sao lúc trước em có them
Mã:

Mà không được, ah mà anh chỉ em cách nhân F8 để xem code thực hiện, thì em làm nó cư hiện cái form làm sao xem sheet được.
Google nhé bạn. Xem code trên được chưa, đã bổ xung thêm nút cancel cho bạn rồi
 
Upvote 0
Anh langtuchungtinh360 có thể giải thích cho em chổ số 3 trong code :
Mã:
For r = LBound(Arr) To UBound(Arr) ' vong lap tu dau den cuoi bang
   For c = LBound(Arr, 2) + 3 To UBound(Arr, 2) 'vong lap tu cot dau den cot cuoi cua bang
       Arr(r, c) = CDbl(Arr(r, c)) 'chuyen gia tri cua mang sang kieu double
   Next c
Next r
theo em nghỉ là có phải từ cột số 4 của bang định dạng là kiểu số
 
Upvote 0
Xin lỗi, em gỏ lộn, mong anh giải thích số 3 trong code trên.
 
Upvote 0
Anh langtuchungtinh360 có thể giải thích cho em chổ số 3 trong code :
Mã:
For r = LBound(Arr) To UBound(Arr) ' vong lap tu dau den cuoi bang
   For c = LBound(Arr, 2) + 3 To UBound(Arr, 2) 'vong lap tu cot dau den cot cuoi cua bang
       Arr(r, c) = CDbl(Arr(r, c)) 'chuyen gia tri cua mang sang kieu double
   Next c
Next r
theo em nghỉ là có phải từ cột số 4 của bang định dạng là kiểu số
Thì là số 4 đúng rồi bạn
LBound(Arr, 2) = 1
1+3=4
Còn bạn muốn biết gì thêm thì gửi file đó lên.
Còn đây là chỉ nhìn code mà đoán thôi.
 
Upvote 0
Thì là số 4 đúng rồi bạn
LBound(Arr, 2) = 1
LBound(Arr, 2) = 1 là sai vì nhìn thấy rõ ràng người ta lấy từ ListBox. Không cần có tập tin cũng biết là sai

Bạn này không nói rõ thôi. 4 là cột thứ 4. Mà cột thứ 4 trong mảng có chỉ số là 3.
Do Arr lấy từ ListBox mà trong ListBox chỉ số dòng và cột tính từ 0 nên
LBound(Arr, 2) = 0
0+3 = 3 (chỉ số 3 của cột thứ 4)

Còn tại sao +3 thì tự suy nghĩ thôi, có gì mà hỏi.
Giả dụ trong ListBox 3 cột đầu không phải là số (vd. Tên, Mã, ĐVT), còn từ cột thứ 4 là số (vd. Tồn đầu, Nhập, Xuất, Tồn cuối) thì rõ ràng phải +3, vì cột 0, 1, 2 không được phép biến đổi thành số. Còn từ cột 3 bắt buộc phải biến thành số.
Nếu vd. +2
Mã:
For c = LBound(Arr, 2) + 2 To UBound(Arr, 2)
       Arr(r, c) = CDbl(Arr(r, c))
Next c
Thì sẽ sai với c = 2 (LBound(Arr, 2) + 2 = 0 + 2 = 2), vì lúc đó CDbl(Arr(r, c)) = CDbl(Arr(r, 2)) = CDbl(ĐVT) <- sai vì ĐVT không là số.

Còn nếu vd. +4 thì chỉ biến đổi từ cột Nhập đến cuối (c = LBound(Arr, 2) + 4 = 0 + 4 = 4). Cột có chỉ số 4 là cột thứ 5 trong mảng, và là cột Nhập. Như thế là thiếu thao tác cho cột Tồn đầu.

Tất nhiên những cột nào là số, là chữ thì chỉ có người hỏi mới biết vì họ không đính kèm tập tin. Nhưng chỉ cần nhìn dữ liệu của mình thì sẽ biết + mấy. Chịu suy nghĩ chút thì ra, bởi vấn đề không khó. Thậm chí nếu không biết thì thử không cộng gì, +1, +2 thì khi chạy code sẽ bị lỗi. Còn nếu +4 thì nhìn kết quả sẽ thấy cột Tồn đầu không được convert. Những thao tác này nằm trong khả năng của người hỏi. Còn không suốt đời đi hỏi những vấn đề thuộc loại A, B, C. Tức những vấn đề vỡ lòng. Làm gì cũng phải suy nghĩ. Không thể ngoài đời thì suy nghĩ ghê lắn, khôn ngoan đủ kiểu, nhưng cứ mở Excel ra là cất luôn cái đầu vào tủ.
 
Upvote 0
LBound(Arr, 2) = 1 là sai vì nhìn thấy rõ ràng người ta lấy từ ListBox. Không cần có tập tin cũng biết là sai

Bạn này không nói rõ thôi. 4 là cột thứ 4. Mà cột thứ 4 trong mảng có chỉ số là 3.
Do Arr lấy từ ListBox mà trong ListBox chỉ số dòng và cột tính từ 0 nên
LBound(Arr, 2) = 0
0+3 = 3 (chỉ số 3 của cột thứ 4)

Còn tại sao +3 thì tự suy nghĩ thôi, có gì mà hỏi.
Giả dụ trong ListBox 3 cột đầu không phải là số (vd. Tên, Mã, ĐVT), còn từ cột thứ 4 là số (vd. Tồn đầu, Nhập, Xuất, Tồn cuối) thì rõ ràng phải +3, vì cột 0, 1, 2 không được phép biến đổi thành số. Còn từ cột 3 bắt buộc phải biến thành số.
Nếu vd. +2
Mã:
For c = LBound(Arr, 2) + 2 To UBound(Arr, 2)
       Arr(r, c) = CDbl(Arr(r, c))
Next c
Thì sẽ sai với c = 2 (LBound(Arr, 2) + 2 = 0 + 2 = 2), vì lúc đó CDbl(Arr(r, c)) = CDbl(Arr(r, 2)) = CDbl(ĐVT) <- sai vì ĐVT không là số.

Còn nếu vd. +4 thì chỉ biến đổi từ cột Nhập đến cuối (c = LBound(Arr, 2) + 4 = 0 + 4 = 4). Cột có chỉ số 4 là cột thứ 5 trong mảng, và là cột Nhập. Như thế là thiếu thao tác cho cột Tồn đầu.

Tất nhiên những cột nào là số, là chữ thì chỉ có người hỏi mới biết vì họ không đính kèm tập tin. Nhưng chỉ cần nhìn dữ liệu của mình thì sẽ biết + mấy. Chịu suy nghĩ chút thì ra, bởi vấn đề không khó. Thậm chí nếu không biết thì thử không cộng gì, +1, +2 thì khi chạy code sẽ bị lỗi. Còn nếu +4 thì nhìn kết quả sẽ thấy cột Tồn đầu không được convert. Những thao tác này nằm trong khả năng của người hỏi. Còn không suốt đời đi hỏi những vấn đề thuộc loại A, B, C. Tức những vấn đề vỡ lòng. Làm gì cũng phải suy nghĩ. Không thể ngoài đời thì suy nghĩ ghê lắn, khôn ngoan đủ kiểu, nhưng cứ mở Excel ra là cất luôn cái đầu vào tủ.
vâng, chỉ là em đoán mò thôi mà. hên thì trúng không thì thôi :v. với lại em chỉ xem cú pháp chứ chưa để ý những cái khác.
em cũng mới vừa nhận được file nên mới biết. chứ em có để ý là code làm cho công việc gì đâu mà biết nó như thế nào để xử lý.
bạn tải file này về copy toàn bộ code trong đó rồi vào form xóa tất cả đi dán đè lên nhé.
 

File đính kèm

Upvote 0
cũng chưa đúng ý em, anh langtuchungtinh360 ơi !
Code của anh là in chỉ 1 trang duy nhất (lúc đó chữ và số nó sẽ nhỏ lại).
Ý của em là in đầy đủ dữ lieu từ cột STT đến cột ghi chú.
Ví dụ như chọn "Thun 2.5Cm Đen TS14" có STT tới 43 thì in trang ngang , ra là 3 trang.
Mong anh xem giúp.
 
Upvote 0
cũng chưa đúng ý em, anh langtuchungtinh360 ơi !
Code của anh là in chỉ 1 trang duy nhất (lúc đó chữ và số nó sẽ nhỏ lại).
Ý của em là in đầy đủ dữ lieu từ cột STT đến cột ghi chú.
Ví dụ như chọn "Thun 2.5Cm Đen TS14" có STT tới 43 thì in trang ngang , ra là 3 trang.
Mong anh xem giúp.
bạn có chép code mới thay thế code cũ chưa.
code mới đó tôi chạy ra vầy nè
upload_2017-6-12_21-17-32.png
còn bạn chạy không được thì tôi thua. vừa đủ số cột bạn yêu cầu nhé.
còn lý do tại sao chữ nhỏ lại thì giải thích bạn thế này
bạn làm 1 file sau khi xuất y như vậy
BƯỚC 1. chỉnh sang chế độ như này
upload_2017-6-12_21-21-20.png
bạn làm như thế mà thấy khác của tôi đúng không (của tôi 6 trang, của bạn 9 trang)
BƯỚC 2: vào pageSetup
tôi đã bỏ chỗ này đi
upload_2017-6-12_21-22-43.png
tôi không biết bạn cài đặt thêm cái đó làm gì trong khi không cần thiết.
làm như vậy xong đóng đi
rồi làm như vầy nữa
BƯỚC 3:
upload_2017-6-12_21-25-6.png
rồi bạn xem kết quả đi
nó sẽ như vậy
upload_2017-6-12_21-25-32.png
đó là kết quả làm thủ công.
tất cả đều ghi macro lại được
và tôi đã làm sẵn trong code gửi cho bạn rồi
bạn chỉ cần làm bước 2 bỏ cột tiêu đề đi.
là thỏa lòng mong ước của bạn nhé
đây đều là kiến thức cơ bản trong excel của. trên diễn đàn cũng có hướng dẫn
bạn vui lòng tìm hiểu trước nhé.
xin lỗi nếu nói như thế làm bạn buồn. tôi làm dân xây dựng nên không có khiếu ăn nói, lời thật mất lòng, mà thật quá thì mất luôn bạn.
còn bạn muốn nhấn F8 để xem từng bước thì làm như vầy
upload_2017-6-12_21-34-59.png
làm y vầy rồi bạn làm các bước bạn muốn rồi nhấn IN
sẽ hiện ra vầy
upload_2017-6-12_21-36-51.png
rồi nhấn F8 xem mà tận hưởng đi

code cũ ở #32
phục bạn luôn
bạn là thành viên thứ 2 mà tôi nghĩ khoái VBA mà không biết VBA mà tôi biết trên diễn đàn này ấy
thắc mắc gì thì lấy điện thoại ra quét QRCODE liên lạc vs tôi sẽ hướng dẫn những gì tôi biết cho, còn người kia tôi không khoái nên chả giúp.
thế nhé, giờ về ngủ đây.
 

File đính kèm

  • upload_2017-6-12_21-31-19.png
    upload_2017-6-12_21-31-19.png
    245.9 KB · Đọc: 8
Upvote 0
Untitled.png Cám ơn Anh, em đã coppy code mới của Anh (#32) sao chỉ hiện có 1 trang, không biết sao nữa.
 
Upvote 0
Chào Anh langtuchungtinh360!
Em ngồi quậy cả buổi thì mới được, bằng cách làm thủ công như Anh hướng dẫn rồi mới cài code.
Em cứ tưởng code nó làm hết.
 
Upvote 0
Web KT

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

Back
Top Bottom