thay đổi Height của dòng mà không vào Format

  • Thread starter Thread starter ntha
  • Ngày gửi Ngày gửi
Liên hệ QC

ntha

Thành viên mới
Tham gia
2/5/08
Bài viết
14
Được thích
1
Em muốn hỏi các bác về việc thay đổi chiều cao dòng mà ko vào Format, mặc định chiều cao một dòng là 100%, khi mình nhập 30%thì tự động thu nhỏ chiều cao dòng. Bởi vì em đang làm báo cáo tiến độ cần sự thay đổi chiều cao dòng liên tục. Có thể viết một đoạn Code bằng VBA không hả các bác??? Giúp em với....
 
Em muốn hỏi các bác về việc thay đổi chiều cao dòng mà ko vào Format, mặc định chiều cao một dòng là 100%, khi mình nhập 30%thì tự động thu nhỏ chiều cao dòng. Bởi vì em đang làm báo cáo tiến độ cần sự thay đổi chiều cao dòng liên tục. Có thể viết một đoạn Code bằng VBA không hả các bác??? Giúp em với....
Cái đó là thay đổi độ phóng đại của trang chứ đâu phải thay đổi Row Height đâu nhỉ!!! Cách đơn giãn là bấm giữ Ctrl rồi xe nút cuộn của con chuột
ANH TUẤN
 
bác hiểu sai ý của em rồi, ý em là thay đổi Row Height mà không phải và Format/Row/Height để điều chỉnh, vì nếu với số lượng lớn các hàng phải thay đổi ứng với chiều cao khác nhau, sẽ mất nhiều thời gian. Giúp em với....
 
Hi, bạn bôi đen các dòng có chiều cao như nhau cần thay đổi, sau đó kích chuột phải, chọn Row Height ... Và nhập chiều cao dòng. Cách này nhanh hơn cách vào menu một chút. Không biết bác nào còn cách khác không?
 
Hìnhg như tôi hiểu là bạn đang hỏi nếu như dòng của bạn nhập dữ liệu nếu dữ liệu dài hơn trong ô thì tự động nhảy xuống một dòng trong một ô và chiều cao của dòng thay đổi, còn nếu như dòng không dài hết trong một ô thì độ cao của dòng không thay đổi có phải thế không?
Nếu thế thì bạn bôi đen các cột hoặc các dòng cần thay đổi vảo Fomat/cell chọn alignment/ đánh dấu vào Wrap text. các dòng của bạn sẽ tự thay đổi độ chiều cao theo ý của bạn mỗi khi nhập dữ liệu.
 
Tôi vd code tại dòng (hàng) số 5 cao 50, các hàng khác bạn tự chế biến nhé: Rows("5:5").RowHeight = 50
 
bác hiểu sai ý của em rồi, ý em là thay đổi Row Height mà không phải và Format/Row/Height để điều chỉnh, vì nếu với số lượng lớn các hàng phải thay đổi ứng với chiều cao khác nhau, sẽ mất nhiều thời gian. Giúp em với....
Cho hỏi tại sao bạn phải thay đổi chiều cao mỗi hàng khác nhau? Hiểu dc nguyên nhân tại sao có lẽ sẽ dể dàng trợ giúp bạn hơn!
ANH TUẤN
 
Cho hỏi tại sao bạn phải thay đổi chiều cao mỗi hàng khác nhau? Hiểu dc nguyên nhân tại sao có lẽ sẽ dể dàng trợ giúp bạn hơn!
ANH TUẤN

thế này chỉ có nước dùng VBA , và nhập giá trị hàng theo quy luật nào đó - hoặc là nhập từ DL của 1 vùng ô nào đó
.
 
Em có một hạng mục A, đến thời điểm này đã thực hiện đc 70%, còn lại 30%. Em dùng MERGE 2 ô liền kề (mỗi ô thuộc một hàng) để ghi tên hạng mục, còn những ô tiếp theo (trên cùng một hàng) để bôi đen thể hiện tỷ lệ thực hiện.(Sếp bắt em phải làm thế....). Có rất nhiều hạng mục, tỷ lệ thực hiện cũng khác nhau. Cứ mỗi lần làm một hạng mục, em lại phải vào F/R/Height..mệt quá đi.....
 
Em cần trích lọc danh sách để in báo cáo, bình thường thì danh sách của em trong 1 trang in có khoảng 50 dòng + khoảng 10 dòng cố đình giành cho tiêu đền trên, dưới
- khi danh sách có số người thay đổi nhưng em muốn trình bày cho đẹp, chỉ hiển thị trên 1 trang in, do vậy chiều cao dòng cần thay đổi tùy thuộc vào số người trong danh sách được trích rút ra (số người trong danh sách rút ra dao động từ 20 đến 50 người)
- Vậy có cách nào tự động điều chỉnh độ cao dòng để đạt được mục đích ở trên
 
Lần chỉnh sửa cuối:
Em muốn hỏi các bác về việc thay đổi chiều cao dòng mà ko vào Format, mặc định chiều cao một dòng là 100%, khi mình nhập 30%thì tự động thu nhỏ chiều cao dòng. Bởi vì em đang làm báo cáo tiến độ cần sự thay đổi chiều cao dòng liên tục. Có thể viết một đoạn Code bằng VBA không hả các bác??? Giúp em với....
Không biết cái này có đúng ý bạn chưa ?
Khi bạn nhập dữ liệu, thủ tục Workbook_SheetChange sẽ kiểm tra ô mới vừa nhập ký tự cuối cùng có phải là ">" không. Nếu đúng thì định dạng lại chiều cao theo các số phía trước dấu ">"
Ví dụ chiều cao hiện tại là 12, bạn muốn chiều cao mới là 24 thì nhập 200>; chiều cao mới là 6 thì nhập 50>
Lý do thay dấu % bằng > là vì khi nhập % thì ô đó tự động định dạng %, rất bất tiện cho bạn khi nhập số khác.

Mã:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
On Error Resume Next
Dim OldHeigh, NewHeigh
If Right(Target.Value, 1) = ">" Then
  OldHeigh = Target.RowHeight
  NewHeigh = Val(Left(Target.Value, Len(Target.Value) - 1))
  Target.RowHeight = OldHeigh * NewHeigh / 100
End If
End Sub
 

File đính kèm

Hình như có điều gì đó ko ổn thầy Long ơi!
Khi tôi gõ vào 200> thì nó thay đổi độ cao dòng 1 chút.. tôi thay 200> thành 10> thì nó thu nhỏ độ cao lại (đồng ý điều này)... nhưng khi tôi sửa 10> thành 200> thì nó chẳng trã về độ cao giống như ban đầu
???
Vậy là sao?
ANH TUẤN
 
Tại câu lệnh này:
Mã:
[COLOR=red]OldHeigh = Target.RowHeight[/COLOR]
NewHeigh = Val(Left(Target.Value, Len(Target.Value) - 1))
Target.RowHeight = OldHeigh * NewHeigh / 100
Tăng 200% của chiều cao trước đó, chứ không phải 200% của 12 point

Sửa câu lệnh 1 thành
Mã:
OldHeigh = 12
là OK
 
ntha đã viết:
Em có một hạng mục A, đến thời điểm này đã thực hiện đc 70%, còn lại 30%. Em dùng MERGE 2 ô liền kề (mỗi ô thuộc một hàng) để ghi tên hạng mục, còn những ô tiếp theo (trên cùng một hàng) để bôi đen thể hiện tỷ lệ thực hiện.(Sếp bắt em phải làm thế....)
Tỷ lệ hoàn thành có nhiều cách thể hiện, tại sao phải chọn các row height?
Xem file, khi hoàn thành thì màu xanh, chưa hoàn thành thì màu xanh lá, mới bắt đầu (dưới 25% thì màu đỏ)
 

File đính kèm

Trời ơi, hay quá, em cảm ơn các bác......

NewHeigh = Val(Left(Target.Value, Len(Target.Value) - 1))

Các bác giải thích cho em câu lệnh này đc không? ý nghĩa của Len function.?
em bắt đầu mới học VB, giúp em tiến bộ nhé...Thanks
 
Chỉnh sửa lần cuối bởi điều hành viên:
NewHeigh = Val(Left(Target.Value, Len(Target.Value) - 1))

Các bác giải thích cho em câu lệnh này đc không? ý nghĩa của Len function.?
em bắt đầu mới học VB, giúp em tiến bộ nhé...Thanks
Công thức bình thường thôi mà
Bạn thí nghiệm thế này nhé:
1> Gõ 200> vào A1
2> Tại B1 bạn gõ công thức = LEN(A1)
3> Tại C1 bạn gõ công thức = Value(Left(A1,len(A1)-1))
Tương đương hàm trong VBA đấy!
ANH TUẤN
 
Lần chỉnh sửa cuối:
Em có một hạng mục A, đến thời điểm này đã thực hiện đc 70%, còn lại 30%. Em dùng MERGE 2 ô liền kề (mỗi ô thuộc một hàng) để ghi tên hạng mục, còn những ô tiếp theo (trên cùng một hàng) để bôi đen thể hiện tỷ lệ thực hiện.(Sếp bắt em phải làm thế....). Có rất nhiều hạng mục, tỷ lệ thực hiện cũng khác nhau. Cứ mỗi lần làm một hạng mục, em lại phải vào F/R/Height..mệt quá đi.....

Theo mình nghĩ bạn thử dùng biểu đồ ( chart ) có sẵn của excel đi, bạn chỉ cần nhập liệu bêb phần đầu vào thôi, phần còn lại nó sẽ tự tính và thể hiện cho bạn .
 
NewHeigh = Val(Left(Target.Value, Len(Target.Value) - 1))
Các bác giải thích cho em câu lệnh này đc không? ý nghĩa của Len function.?
em bắt đầu mới học VB, giúp em tiến bộ nhé...Thanks
anhtuan đã giải thích hàm len rồi.
Nhưng câu lệnh NewHeigh = Val(Left(Target.Value, Len(Target.Value) - 1)) này do viết quá rập khuôn nên đãi dùng
Left(Target.Value, Len(Target.Value) - 1) để lấy các số phía trước và loại bỏ ký tự ">".
Câu trên chỉ cần viết NewHeigh = Val(Target.Value) là đủ vì hàm Val làm luôn chuyện đó rồi.
Công dụng của hàm Val là cắt các số có nghĩa phía bên trái của chuỗi chuyển thành số
Val("200>") > 200
Val("200>a") > 200
Val("2a200") > 2
Val("a200") > 0
 
Em cần trích lọc danh sách để in báo cáo, bình thường thì danh sách của em trong 1 trang in có khoảng 50 dòng + khoảng 10 dòng cố đình giành cho tiêu đền trên, dưới
- khi danh sách có số người thay đổi nhưng em muốn trình bày cho đẹp, chỉ hiển thị trên 1 trang in, do vậy chiều cao dòng cần thay đổi tùy thuộc vào số người trong danh sách được trích rút ra (số người trong danh sách rút ra dao động từ 20 đến 50 người)
- Vậy có cách nào tự động điều chỉnh độ cao dòng để đạt được mục đích ở trên
Để thủ tục AutoHeight nhận biết dòng cuối cùng của danh sách, ô cuối cùng của cột A phải có dấu hiệu nhận, tôi nhập ô A60 là ZZZ (boyxin có thể thay đổi ký tự khác nhưng nhớ chỉnh ạli trong Sub, chọn màu ZZZ màu trắng để không thấy khi in)
Lần đầu tiên, Boyxin phải canh chỉnh để trang in in đủ 60 dòng, chọn bất kỳ ô nào trong trang in, nhập công thức =PageHeight() để biết tổng chiều cao trang giấy.
Vào module khai báo lại:
Const hpage= chiều cao 60 dòng lấy từ ct PageHeight() cho phù hợp với máy in
Const tieude = số dòng dành cho tiêu đê đầu, cuối trang
Const sodong = số dòng tối đa 1 trang in
3 hằng số này quyết định chiều cao dòng cho các lần in sau.

Sau khi lập danh sách xong bấm vào nút Auto Print để in

Mã:
[FONT=Verdana]Const hpage = 770[/FONT]
[FONT=Verdana]Const tieude = 10[/FONT]
[FONT=Verdana]Const sodong = 60[/FONT]

Mã:
Function PageHeight() As Double
For r = 1 To sodong
PageHeight = PageHeight + Cells(r, 1).RowHeight
Next
End Function

Mã:
[FONT=Verdana][FONT=Verdana]Sub AutoHeight()[/FONT]
[FONT=Verdana]On Error GoTo baoloi[/FONT]
[FONT=Verdana]r = Columns("A:A").Find(What:="[COLOR=red]ZZZ[/COLOR]", After:=Cells(1, 1)).Row[/FONT]
[FONT=Verdana]dulieu = r - tieude[/FONT]
[FONT=Verdana]If dulieu < 20 Or dulieu >= 50 Then[/FONT]
[FONT=Verdana]Cells.RowHeight = hpage / 60[/FONT]
[FONT=Verdana]Else[/FONT]
[FONT=Verdana]Cells.RowHeight = hpage / r[/FONT]
[FONT=Verdana]End If[/FONT]
[FONT=Verdana]Exit Sub[/FONT]
[FONT=Verdana]baoloi:[/FONT]
[FONT=Verdana]MsgBox "Khong tim thay dau cuoi trang ZZZ"[/FONT]
[FONT=Verdana]End Sub[/FONT][/FONT]
 

File đính kèm

Để thủ tục AutoHeight nhận biết dòng cuối cùng của danh sách, ô cuối cùng của cột A phải có dấu hiệu nhận, tôi nhập ô A60 là ZZZ (boyxin có thể thay đổi ký tự khác nhưng nhớ chỉnh ạli trong Sub, chọn màu ZZZ màu trắng để không thấy khi in)
Lần đầu tiên, Boyxin phải canh chỉnh để trang in in đủ 60 dòng, chọn bất kỳ ô nào trong trang in, nhập công thức =PageHeight() để biết tổng chiều cao trang giấy.
Vào module khai báo lại:
Const hpage= chiều cao 60 dòng lấy từ ct PageHeight() cho phù hợp với máy in
Const tieude = số dòng dành cho tiêu đê đầu, cuối trang
Const sodong = số dòng tối đa 1 trang in
3 hằng số này quyết định chiều cao dòng cho các lần in sau.

Sau khi lập danh sách xong bấm vào nút Auto Print để in

Mã:
[FONT=Verdana]Const hpage = 770[/FONT]
[FONT=Verdana]Const tieude = 10[/FONT]
[FONT=Verdana]Const sodong = 60[/FONT]

Mã:
Function PageHeight() As Double
For r = 1 To sodong
PageHeight = PageHeight + Cells(r, 1).RowHeight
Next
End Function

Mã:
[FONT=Verdana][FONT=Verdana]Sub AutoHeight()[/FONT]
[FONT=Verdana]On Error GoTo baoloi[/FONT]
[FONT=Verdana]r = Columns("A:A").Find(What:="[COLOR=red]ZZZ[/COLOR]", After:=Cells(1, 1)).Row[/FONT]
[FONT=Verdana]dulieu = r - tieude[/FONT]
[FONT=Verdana]If dulieu < 20 Or dulieu >= 50 Then[/FONT]
[FONT=Verdana]Cells.RowHeight = hpage / 60[/FONT]
[FONT=Verdana]Else[/FONT]
[FONT=Verdana]Cells.RowHeight = hpage / r[/FONT]
[FONT=Verdana]End If[/FONT]
[FONT=Verdana]Exit Sub[/FONT]
[FONT=Verdana]baoloi:[/FONT]
[FONT=Verdana]MsgBox "Khong tim thay dau cuoi trang ZZZ"[/FONT]
[FONT=Verdana]End Sub[/FONT][/FONT]

Cảm ơn bác phamduylong nhiều nha
 
Web KT

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

Back
Top Bottom