VBA Nâng cao - Class module bổ trợ hiển thị Userform tại ô Excel

Liên hệ QC

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,610
Được thích
4,046
Giới tính
Nam
Hôm nay tôi chia sẻ cho các bạn một lớp trong VBA đã được viết sẵn để giúp cho việc hiển thị một Userform hay một cửa sổ Window tại một ô Excel một cách dễ dàng. Đồng thời tương thích khi sử dụng nhiều màn hình. Dễ dàng tạo mã VBA để viết cho dự án của bạn. Các bạn hãy đọc qua bài viết để biết thêm chi tiết.

Class module trợ giúp hiển thị Userform hoặc cửa sổ tại ô

Với lớp LinkedWindowToRange chúng ta có thể dễ dàng đặt cửa sổ vào đúng vị trí tại ô đang chọn một cách dễ dàng

Ưu điểm của lớp:

  1. Đặt cửa sổ vào vị trí chính xác, kể cả chế độ hiển thị phải sang trái.
  2. Dễ dàng tạo mã VBA để sử dụng lớp.
  3. Tương thích khi sử dụng nhiều màn hình.
  4. Tự động cân chỉnh vị trí khi cửa sổ nằm ngoài màn hình hiển thị.
  5. Nhúng cửa sổ vào cửa sổ Excel7, làm cho Excel7 thành cửa sổ phụ thuộc.
  6. Đặt tiêu đề tiếng Việt cho Form, ẩn hoặc hiện tiêu đề.
  7. Làm mờ cửa sổ.

Hướng dẫn sử dụng lớp LinkedWindowToRange:

Khởi tạo lớp
Ta có thể khai báo toàn cục để truy cập lại, hoặc cục bộ để sử dụng 1 lần duy nhất

JavaScript:
        Dim LinkWindow As LinkedWindowToRange
        Set LinkWindow = New LinkedWindowToRange

Phương thức trong lớp
Phương thức​
Mã viết trong VBA​
Kiểu​
Diễn giải​
newForm
set LinkWindow.newForm = userform1​
Object​
Nhập userform để lớp khởi tạo cho form này​
newWindow
LinkWindow.newWindow = hwnd​
Long​
Nhập hwnd cửa sổ để lớp khởi tạo cho cửa sổ này
(Nếu không sử dụng form, có thể nhập hwnd)​
LinkedWindow
LinkWindow.LinkedWindow = True​
Boolean​
Nhúng cửa sổ vào cửa sổ Excel7, buộc cửa sổ phụ thuộc cửa sổ Excel 7​
Offset
LinkWindow.Offset 5, 5​
Long​
Xê dịch cửa sổ​
Show
LinkWindow.Show Range("A1"), 4​
Hiển thị cửa sổ tại ô, và kiểu hiển thị​
ReShow
LinkWindow.ReShow​
Hiển thị lại cửa sổ, sau khi đã đổi các thiết đặt​
SetTitle
LinkWindow.SetTitle "Tiêu đề cửa sổ"​
Đặt tiêu đề cho cửa sổ (Hỗ trợ ký tự việt)​
ShowTitle
LinkWindow.ShowTitle​
Hiển thị tiêu đề cửa sổ​
HideTitle
LinkWindow.HideTitle​
Ẩn thị tiêu đề cửa sổ​
Transparent
LinkWindow.Transparent 0.7​
Tạo độ mờ cho cửa sổ​
**Không dùng đến nếu bạn đã sử dụng GDI vẽ cửa sổ


Kiểu hiển thị cho phương thức Show

Vị trí bắt đầu
Diễn giải​
RPE_leftTop = 0​
Vị trí bên trái + phía trên​
RPE_leftBottom = 1​
Vị trí bên trái + phía dưới​
RPE_RightTop = 2​
Vị trí bên phải + phía trên​
RPE_RightBottom = 4​
Vị trí bên phải + phía dưới​


Vị trí cửa sổ
Diễn giải​
RPE_WindowRightBelow = 0​
Cửa sổ sẽ nằm ở bên phải + phía dưới​
RPE_WindowRightAbove = 2 ^ 3​
Cửa sổ sẽ nằm ở bên phải + phía trên​
RPE_WindowLeftBelow = 2 ^ 4​
Cửa sổ sẽ nằm ở bên trái + phía dưới​
RPE_WindowLeftAbove = 2 ^ 5​
Cửa sổ sẽ nằm ở bên trên + phía trên​
RPE_FullScreen = 2 ^ 6​
Hiển thị toàn màn hình​


Mặc định cửa sổ sẽ hiển thị RPE_leftTop + RPE_WindowRightBelow
Ví dụ:
JavaScript:
LinkWindow.Show Range("A1"), 0


Thử đặt cửa sổ vị trí bên phải + phía trên ô và cửa sổ nằm bên trái + phía trên
Ví dụ:


JavaScript:
LinkWindow.Show Range("A1"), RPE_RightTop + RPE_WindowLeftAbove

Ví dụ mã đầy đủ cho các phương thức

JavaScript:
Sub ShowForm()
  Dim LinkWindow As LinkedWindowToRange
  Set LinkWindow = New LinkedWindowToRange
  With LinkWindow
     Set .newForm = formRangePosition
    .SetTitle "Tiêu đề"
    .hideTitle
    .linkedWindow = True
    .Offset 0, 0
    .Transparent 0.7
    .Show [B3], RPE_LeftTop + RPE_WindowRightBelow
  End With
End Sub


Các bạn có thể tải và sử dụng mã bên trong tập tin bên dưới đây

(tải tệp cần đăng nhập)
 

File đính kèm

  • RangePosition.xlsm
    184 KB · Đọc: 10
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom