Tự động giãn cột khi cell nhận focus???

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

nth4

Thành viên mới
Tham gia
1/4/09
Bài viết
1
Được thích
0
Khi người dùng chọn 1 cell thì column của cell tự động giãn ra, qua column khác thì co lại.

Mong các bạn giúp!
 
Khi người dùng chọn 1 cell thì column của cell tự động giãn ra, qua column khác thì co lại.

Mong các bạn giúp!

Bạn nói rõ, giãn ra hay co lại theo cái gì? Phải có cái gì làm mốc chứ!? Ví dụ độ dài ký tự của cell hiện hành, độ dài của Cell tiêu đề (dòng 1), v.v.....
 
Khi người dùng chọn 1 cell thì column của cell tự động giãn ra, qua column khác thì co lại.

Mong các bạn giúp!

Bạn chọn cell, (cột) rồi chọn format cell > (tab) Alignment :

Text alignmetn:

+ Horizontal -> Genaral;
+ Vertical -> Center.

Text control: Chọn Wrap text.

Không biết mình hiểu đúng ý bạn không nữa!!??
 
Không biết bạn dùng để làm gì, tham khảo file "Đu đưa" này xem sao.(Chỉ hiệu lực từ cột A đến cột H Sheet1, Sheet2 toàn sheet)
Bạn có thể dùng code sau cho cả Sheet1
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
For Each Column In Sheet1.Columns
If Column.Width > 8 Then Column.ColumnWidth = 8
Next
Target.ColumnWidth = 40
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Không biết bạn dùng để làm gì, tham khảo file "Đu đưa" này xem sao.(Chỉ hiệu lực từ cột A đến cột H Sheet1, Sheet2 toàn sheet)
Bạn có thể dùng code sau cho cả Sheet1
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
For Each Column In Sheet1.Columns
If Column.Width > 8 Then Column.ColumnWidth = 8
Next
[COLOR=Red]Target.ColumnWidth = 40[/COLOR]
Application.ScreenUpdating = True
End Sub
Tôi nghĩ cái chỗ tô màu đỏ thay thành target.columns.autofit sẽ đẹp hơn không anh sealand?
 
To logica:
Đúng là lệnh đó khá hay đấy(Nhưng với cú pháp của bạn mình test không được cần tìm cách áp dụng ). Mình chưa biết là bạn ấy làm gì nên chỉ tham gia ý tưởng thôi.
 
Lần chỉnh sửa cuối:
Nếu muốn có tác dụng ở cùng nào thì khai báo vùng đó [ô?:ô?] . vd toàn bộ cột A:H
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
[A:H].Columns.AutoFit
End Sub
Nếu muốn có tác dụng toàn bộ bảng tính (theo tôi cách này không thực tế lắm)
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells.Columns.AutoFit
End Sub
 
Không biết bạn dùng để làm gì, tham khảo file "Đu đưa" này xem sao.(Chỉ hiệu lực từ cột A đến cột H Sheet1, Sheet2 toàn sheet)
Bạn có thể dùng code sau cho cả Sheet1
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = False
For Each Column In Sheet1.Columns
If Column.Width > 8 Then Column.ColumnWidth = 8
Next
Target.ColumnWidth = 40
Application.ScreenUpdating = True
End Sub

ý TƯỞNG THẾ NÀY ĐÚNG
nhưng vòng lặp for hơi phí mất thời gian (vì nếu nó đang 8 đặt lại làm gì?) -- và đôi khi thành setup độ rộng các cột còn lại đều là 8 không thực tế

==> nên xử lý ô mới dời khỏi và đặt lại độ rộng cũ của nó trước mở rộng
-- sử dụng biến static để lưu giữ (hoặc biến toàn cục)
.
 
Mình chưa tìm ra địa chỉ con trỏ vừa rời. Nếu không ta chỉ cần co mỗi cột vừa rời là xong
 
Lần chỉnh sửa cuối:
Mình chưa tìm ra địa chỉ con trỏ vừa rời. Nếu không ta chỉ cần co mỗi cột vừa rời là xong

Đoạn code để xác định ô vừa rời đây:

Mã:
Dim Ocu As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error Resume Next
    MsgBox Ocu.Address
    Set Ocu = Target (hoặc ActiveCell)
End Sub
 
Lần chỉnh sửa cuối:
Mình đã hiệu chỉnh lại Sheet1 theo ý kiến chung của mọi người.

Cám ơn anh Hướng đã hướng dẫn.
Nhưng mình xin có 1 số ý kiến anh xem có đúng không.
-Để biến này lưu lại được phải khai báo bằng lệnh Public của cấp module, còn khai báo như ví dụ của anh chỉ tồn tại khi code chưa kết thúc.
-Nên khai báo 1 biến Integer để lưu số hiệu cột thay biến Range lưu cả cột(Biến này chiến bộ nhớ lắm)
-Set như anh hướng dẫn thì sẽ nhận địa chỉ ô Get Focus rồi.
 

File đính kèm

Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom