VBA: Tìm Hdc trong bảng tính Excel hoặc UserForm
Dưới đây là hai ví dụ nhỏ về cách tìm Hdc trong bảng tính:
- Bằng cách nhấp vào Sheet1, UserForm được hiển thị.
- Đặt con trỏ trên UF, giữ nút chuột trái xuống và kéo chuột.
- Bằng cách đóng phụ UF tiếp tục và vẽ một vòng cung trên trang tính.
Bắt đầu
- Sách bài tập mới
- Thêm tên UserForm = UserForm1
Dán đoạn mã sau vào sheet1:
Chức năng khai báo riêng tư Arc Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long,ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Hàm khai báo riêng ArcTo Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long,
ByVal X3 As Long, ByVal Y3 As Long, ByVal X4 As Long, ByVal Y4 As Long) As Long
Worksheet riêng tư_SelectionChange (ByVal Target As Range)
Chiều dài B
'kích hoạt UC và vẽ lên nó (tìm HDC của bạn)
UserForm1.Show
'Tìm HDC của bạn trong bảng tính Excel
monhdc = 0
Làm trong khi myhdc = 0
myhdc = GetForegroundWindow ()
B = myhdc
myhdc = GetDC (myhdc)
Vòng lặp
'Vẽ trực tiếp trên Bảng tính
B = Arc (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)
Kết thúc phụ
Trong mô đun người dùng
Dán đoạn mã sau:
Loại riêng POINTAPIX Như dài
Y Như Dài
Loại kết thúc
Hàm khai báo riêng tư DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Hàm khai báo riêng tư ChọnObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Chức năng khai báo riêng GetForegroundWindow Lib "user32" () miễn là
Hàm khai báo riêng tư TạoPen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long)
Hàm khai báo riêng Line Line Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Chức năng khai báo riêng MoveToEx Lib "gdi32" (ByVal hdc As Long, _
ByVal X As Long, ByVal Y As Long, lpPoint As Any) Miễn là
Chức năng khai báo riêng GetDC Lib "user32" (ByVal hwnd As Long) Miễn là
Hàm khai báo riêng SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Byte
Riêng monhdc Như Long
Dim Buff Như Boolean
Private Sub UserForm_MouseDown (Nút ByVal là số nguyên, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Buff = Đúng
Kết thúc phụ
Private Sub UserForm_MouseMove (Nút ByVal là số nguyên, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Làm trong khi myhdc = 0
myhdc = GetForegroundWindow ()
myhdc = GetDC (monhdc)
Vòng lặp
Nếu nút 1 thì thoát Sub
hRPen = TạoPen (PS_SOLID, 10, RGB (0, 255, 0))
XóaObject ChọnObject (myhdc, hRPen)
Nếu Buff thì
MoveToEx myhdc, X * 1.32, Y * 1.32, & H0
Buff = Sai
Kết thúc nếu
Dòng tới myhdc, X * 1.32, Y * 1.32
DoEvents
Kết thúc phụ