LocalizeXL v1.73 - Làm nổi bật ô đang chọn và cuộn trang tự động (4 người xem)

Liên hệ QC

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

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,729
Được thích
4,302
Giới tính
Nam

***** CẬP NHẬT v1.73 MỚI NHẤT 14/01/2025*****​

Chia sẻ ứng dụng làm nổi bật vùng ô Excel đang chọn.

#LocalizeXL Add-in

Mục đích của ứng dụng này được sinh ra là để ta cho cái nhìn trực quan hơn khi ta chọn một ô Excel, hoặc ta có thể biết được vùng ô trước đó đã chọn, ta cũng có thể dùng để đối chiếu hàng và cột một cách dễ dàng hơn.


Các lệnh thực thi để đóng mở và cài đặt thông số:​

Thực thiHàmGiá trị của tham số
Mở=Localize_On()
Tắt=Localize_Off()
Mở form cài đặt=Localize_Settings()
Kiểu khung=Localize_Style(1)Có 4 kiểu khung, 0:ngang dọc, 1:ngang, 2:dọc, 3:trái và trên
Thay đổi độ mờ=Localize_SetOpacity(40)Số từ 20 đến 255
Tắt/Mở mờ dần=Localize_SetFading(400)mili giây từ 0 đến 15000
Bật tự động cuộn=Localize_Scroll_On()
Tắt tự động cuộn=Localize_Scroll_Off()
Chuyển Add-in hoặc Book=Localize_Spin()
Đặt lại mặc định=Localize_Reset()
Đóng Add-in=Localize_Quit()
Hủy cài đặt Add-in=Localize_Uninstall()



CỬA SỔ CÀI ĐẶT:

LocalizeXL_form_settings.png

Trong bảng chọn màu chép mã màu #FFFFFF hệ thập lục phân (hexadecimal)

1719926918058.png

Ảnh minh họa​

LocalizeXL.gif

Kiểu khung nổi bật:​

LocalizeXL

Cuộn tự động khi rê chuột:

Rê chuột đến đầu, cuối, trái, hoặc phải của vùng được Highlight để tự động cuộn.

vba%20localize%20auto%20scroll.gif

LƯU Ý:​

Nếu ứng dụng có Code VBA đang hoạt động theo thời gian thực, thì nên tắt ứng dụng LocalizeXL đi, để tránh sung đột, bằng cách gõ vào ô trống hàm =Localize_Off()



Hướng dẫn cài đặt Add-in:​

Cách 1:
Trong thẻ Deverloper (Mở thẻ Deverloper: chuột phải vào thanh Ribbon, chọn Customize the Ribbon)
Chọn Excel Add-ins, sau đó chọn nút Browse...
vào thư mục chứa tệp Add-in LocalizeXL_vX.X.xlam
đánh dấu Add-in vừa thêm và chọn nút OK
Cách 2:
Với đường dẫn: %AppData%\Microsoft\Excel\XLSTART
Nhấn Win+R, chép đường dẫn vào và nhấn Enter để mở
Chép tệp Add-in hoặc Tạo một shortcut từ tệp Add-in dán vào thư mục XLSTART của Excel

--------------------------------------------------------------------------------------
Các bạn có thể tham khảo thêm hàm tạo định dạng có điều kiện để làm nổi bật ô chọn tại bài viết:

Chia sẻ thêm:
Làm nổi bật ô đang chọn cho Google Spreadsheets với
Chrome Extend:

Hướng dẫn tại github và mã nguồn:
--------------------------------------------------------------------------------------

Liên hệ Facebook Messenger: Vo Truong Anh Tuan
Liên hệ Zalo: 0384170514
Quét QRCode Zalo:

z4135340916408_08dfdd87080de540fdaecdacb9209bd3.jpg

(***Cần đăng nhập để tải, Add-in mật khẩu mã VBA là 1)
(Tệp Add-in chỉ nhẹ 174 kb. Tệp zip bao gồm hướng dẫn và hình ảnh.)
(Bỏ Unblock tệp nếu có trước khi cài đặt vào Add-ins Excel)
 

File đính kèm

Lần chỉnh sửa cuối:
Giải pháp
Trên Excel365 cập nhật chế độ Focus Cell để làm nổi bật ô đang chọn.
Tuy nhiên nhược điểm, không có chế độ tự động nhận diện không gian màu sắc để tự động đổi màu cho phù hợp khi màu nền thuộc giải màu sắc sáng tối khác nhau. Chỉ hỗ trợ tô 1 màu cho dòng và cột. Trong khi LocalizeXL cho phép tùy chọn màu riêng biệt cho dòng và cột.
Cũng như không có chế độ tự động mờ dần trong một khoảng thời gian ngắn.


Excel's New Focus Cell Feature Makes It Easier to Read Data

Ở phiên bản mới của LocalizeXL tôi đã cố gắng phát triển một giao diện nổi bật, thước kẻ, không gian màu, tùy chọn đường kẻ nét đứt hoặc tô nền.
Tùy chọn tạo thước kẻ với Centimet...
Nhìn vào những điều trên, không có hiệu ứng phần mềm
 

File đính kèm

  • GIF.gif
    GIF.gif
    43.3 KB · Đọc: 3
Upvote 0
Nhìn vào những điều trên, không có hiệu ứng phần mềm
Bạn tải lại tệp ở trên, có thể lệnh Auto Open trên Win11 không được kích hoạt khi mở Add-in.
hoặc bạn có thể chia sẻ UltraView qua tin nhắn cá nhân được không?
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn tải lại tệp ở trên, có thể lệnh Auto Open trên Win11 không được kích hoạt khi mở Add-in.
hoặc bạn có thể chia sẻ UltraView qua tin nhắn cá nhân được không?
Máy tính của tôi là Win11 64-bit, Excel2016 là 64-bit, tôi đã tải xuống lại và nó vẫn không hiển thị.
 
Upvote 0
Bản update đã sử dụng được cho win10 Enterprise LTSC ( Bản cũ không hỗ trợ)
Thank
 
Upvote 0
@125479980 Bạn tải lại, tôi có sửa đoạn mã OnTime, thành Timer API để khởi động chương trình, có thể là do lỗi gọi OnTime
 
Upvote 0
Bỏ chặn tệp, nếu không tệp sẽ không được cài đặt. Thông báo lỗi được hiển thị, loại tệp được bảo vệ
Có phải máy tính của bạn dùng 2 màn hình không?
Tôi cho thực hiện tắt chức năng hỗ trợ 2 màn hình. Tôi sẽ mở lại khi 2 màn hình, nhưng 2 màn hình phải khác vùng trình chiếu.
 
Upvote 0
Có phải máy tính của bạn dùng 2 màn hình không?
Tôi cho thực hiện tắt chức năng hỗ trợ 2 màn hình. Tôi sẽ mở lại khi 2 màn hình, nhưng 2 màn hình phải khác vùng trình chiếu.
Em đang đưa Useform vào góc phải màn hình và hiện tại Em cũng đang chưa giải quyết được bài toán khi có màn hình phụ thì giải quyết như thế nào. Anh cho em từ khóa nghiên cứu về vấn đề 2 màn hình và một vài lưu ý được không
 
Upvote 0
Em đang đưa Useform vào góc phải màn hình và hiện tại Em cũng đang chưa giải quyết được bài toán khi có màn hình phụ thì giải quyết như thế nào. Anh cho em từ khóa nghiên cứu về vấn đề 2 màn hình và một vài lưu ý được không
Sử dụng hàm API EnumMonitor hoặc lấy màn hình tại vị trí trỏ chuột hoặc lấy Monitor của cửa sổ.
Các hàm dưới đây tôi đã viết sẵn, bạn chỉ cần đọc hiểu.
Type MonitorInfo sẽ chứa các thông tin kích thước và vị trí của Màn hình. apiGetMonitorInfo sẽ xuất và ghi vào type này của màn hình chứa trỏ chuột hiện hành.
Từ đó bạn sẽ biết được đặt UserForm vào đâu, với hàm API MoveWindow hoặc SetWindowPos
Có các API không có ở dưới mã, bạn tự tìm hiểu thêm.

JavaScript:
"Option Explicit

#If VBA7 = 0 Then
  Private Enum LongLong: [_]: End Enum
  Private Enum LongPtr: [_]: End Enum
#End If
Private Const PtrNull As LongPtr = 0

Private Type POINTAPI
  x As Long
  y As Long
End Type

Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type


Private Type MonitorInfo
  cbSize As Long
  rcMonitor As RECT
  rcWork As RECT
  dwFlags As Long
End Type

#If VBA7 Then
Private Declare PtrSafe Function GetMonitorInfo Lib ""user32"" Alias ""GetMonitorInfoW"" (ByVal hMonitor As LongPtr, ByRef lpmi As LongPtr) As Boolean
Private Declare PtrSafe Function GetCursorPos Lib ""user32"" (lpPoint As POINTAPI) As Long
Private Declare PtrSafe Function GetClassName Lib ""user32"" Alias ""GetClassNameA"" (ByVal hwnd As LongPtr, ByVal lpClassName As String, ByVal nMaxCount As LongPtr) As Long
#Else
Private Declare Function GetMonitorInfo Lib ""user32"" Alias ""GetMonitorInfoW"" (ByVal hMonitor As Long, ByRef lpmi As Long) As Boolean
Private Declare Function GetCursorPos Lib ""user32"" (lpPoint As POINTAPI) As Long
Private Declare Function GetClassName Lib ""user32"" Alias ""GetClassNameA"" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
#End If

#If -VBA7 And -Win64 Then
  Private Declare PtrSafe Function MonitorFromPoint64 Lib ""user32.dll"" Alias ""MonitorFromPoint"" (ByVal pt As LongPtr, ByVal dwFlags As Long) As LongPtr
  Private Declare PtrSafe Function AccessibleObjectFromPoint64 Lib ""oleacc"" Alias ""AccessibleObjectFromPoint"" (ByVal lXY As LongPtr, ppacc As Any, pvarChild As Variant) As Long
  Private Declare PtrSafe Function WindowFromPoint64 Lib ""user32"" Alias ""WindowFromPoint"" (ByVal Point As LongPtr) As LongPtr
  Private Declare PtrSafe Function ChildWindowFromPoint64 Lib ""user32"" Alias ""ChildWindowFromPoint"" (hwnd As LongPtr, ByVal Point As LongPtr) As LongPtr
#ElseIf VBA7 Then
  Private Declare PtrSafe Function MonitorFromPoint32 Lib ""user32.dll"" Alias ""MonitorFromPoint"" (ByVal x As Long, ByVal y As Long, ByVal dwFlags As Long) As LongPtr
  Private Declare PtrSafe Function AccessibleObjectFromPoint32 Lib ""oleacc"" Alias ""AccessibleObjectFromPoint"" (ByVal lX As Long, ByVal lY As Long, ppacc As Office.IAccessible, pvarChild As Variant) As Long
  Private Declare PtrSafe Function WindowFromPoint32 Lib ""user32"" Alias ""WindowFromPoint"" (ByVal xPoint As Long, ByVal yPoint As Long) As LongPtr
  Private Declare PtrSafe Function ChildWindowFromPoint32 Lib ""user32"" Alias ""ChildWindowFromPoint"" (hwnd As LongPtr, ByVal xPoint As Long, ByVal yPoint As Long) As Long
#Else
  Private Declare Function MonitorFromPoint32 Lib ""user32.dll"" Alias ""MonitorFromPoint"" (ByVal X As Long, ByVal Y As Long, ByVal dwFlags As Long) As Long
  Private Declare Function AccessibleObjectFromPoint32 Lib ""Oleacc"" Alias ""AccessibleObjectFromPoint"" (ByVal lX As Long, ByVal lY As Long, ppacc As Office.IAccessible, pvarChild As Variant) As Long
  Private Declare Function WindowFromPoint32 Lib ""user32"" Alias ""WindowFromPoint"" ( ByVal xPoint As Long, ByVal yPoint As Long) As Long
  Private Declare Function ChildWindowFromPoint32 Lib ""user32"" Alias ""ChildWindowFromPoint"" (hwnd As Long, ByVal xPoint As Long, ByVal yPoint As Long) As Long
#End If

#If Win64 Then
Private Type POINTAPI64
  Value As LongPtr
End Type
#End If

Private Function WindowFromCursor(Optional ByVal byclass&) As LongPtr
  Dim p As POINTAPI, h As LongPtr: GetCursorPos p
  h = WindowFromPoint(p)
  If byclass <> vbNullString Then
    Dim s As String * 200, l As Long
    l = GetClassName(h, s, 200)
    If Left(s, l) <> byclass Then h = 0
  End If
  WindowFromCursor = h
End Function
Private Function WindowFromXY(ByVal x As Long, ByVal y As Long) As LongPtr
  Dim p As POINTAPI: p.x = x: p.y = y: WindowFromXY = WindowFromPoint(p)
End Function
Private Function WindowFromPoint(pt As POINTAPI) As LongPtr
  #If Win64 Then
    Dim t As POINTAPI64: LSet t = pt
    WindowFromPoint = WindowFromPoint64(t.Value)
  #Else
    WindowFromPoint = WindowFromPoint32(pt.x, pt.y)
  #End If
End Function

Private Function ChildWindowFromPointFromXY(ByVal hwnd As LongPtr, ByVal x As Long, ByVal y As Long) As LongPtr
  Dim p As POINTAPI: p.x = x: p.y = y: ChildWindowFromPointFromXY = ChildWindowFromPoint(hwnd, p)
End Function
Public Function ChildWindowFromPoint(ByVal hwnd As LongPtr, pt As POINTAPI) As LongPtr
  #If Win64 Then
    Dim t As POINTAPI64: LSet t = pt
    ChildWindowFromPoint = ChildWindowFromPoint64(hwnd, t.Value)
  #Else
    ChildWindowFromPoint = ChildWindowFromPoint32(hwnd, pt.x, pt.y)
  #End If
End Function

Private Function AccessibleObjectFromXY(ByVal x As Long, ByVal y As Long, ppac As Object, varchild As Variant) As Long
  Dim p As POINTAPI: p.x = x: p.y = y: AccessibleObjectFromXY = AccessibleObjectFromPoint(p, ppac, varchild)
End Function
Private Function AccessibleObjectFromPoint(pt As POINTAPI, ppac As Object, varchild As Variant) As Long
  #If Win64 Then
    Dim t As POINTAPI64: LSet t = pt
    AccessibleObjectFromPoint = AccessibleObjectFromPoint64(t.Value, ppac, varchild)
  #Else
    AccessibleObjectFromPoint = AccessibleObjectFromPoint32(pt.x, pt.y, ppac, varchild)
  #End If
End Function
Public Function MonitorFromPoint(pt As POINTAPI, ByVal dwFlags As Long) As LongPtr
  #If Win64 Then
    Dim t As POINTAPI64: LSet t = pt
    MonitorFromPoint = MonitorFromPoint64(t.Value, dwFlags)
  #Else
    MonitorFromPoint = MonitorFromPoint32(pt.x, pt.y, dwFlags)
  #End If
End Function
Public Function apiGetMonitorInfo(Optional ByVal monitor As LongPtr) As MonitorInfo
  If monitor = 0 Then monitor = MonitorFromCursor
  apiGetMonitorInfo.cbSize = Len(apiGetMonitorInfo)
  Call GetMonitorInfo(monitor, ByVal VarPtr(apiGetMonitorInfo))
End Function

Public Function MonitorFromCursor() As LongPtr
  Dim p As POINTAPI: GetCursorPos p: MonitorFromCursor = MonitorFromPoint(p, 0)
End Function"
 
Upvote 0
Web KT

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

Back
Top Bottom