VBA: Hľadanie HDD v pracovnom hárku programu Excel alebo UserForm

Tu sú dva malé príklady, ako nájsť hdc v pracovnom hárku:
- Kliknutím na List1 sa zobrazí UserForm.
- Umiestnite ukazovateľ na UF, podržte ľavé tlačidlo myši a ťahajte myšou.
- Zatvorením UF sub pokračuje a nakreslí na list oblúk.
Začíname
- Nový zošit
- Pridať UserForm meno = UserForm1
Vložte nasledujúci kód do listu1:
Funkcia privátneho deklarácie Arc Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 ako dlho, ByVal X2 ako dlhé, ByVal Y2 ako dlhé,ByVal X3 tak dlho, ByVal Y3 ako dlho, ByVal X4 tak dlho, ByVal Y4 tak dlho) ako dlho
Funkcia privátneho deklarácie ArcTo Lib "gdi32" (ByVal hdc tak dlho, ByVal X1 ako dlho, ByVal Y1 ako dlhé, ByVal X2 ako dlhé, ByVal Y2 ako dlhé,
ByVal X3 tak dlho, ByVal Y3 ako dlho, ByVal X4 tak dlho, ByVal Y4 tak dlho) ako dlho
Private Sub Worksheet_SelectionZmeniť (Cieľový rozsah ByVal ako rozsah)
Dim B Ako dlhá
aktivovať UC a čerpať z neho (nájdenie HDC)
UserForm1.Show
'Vyhľadanie HDC v pracovnom hárku programu Excel
monhdc = 0
Do Kým myhdc = 0
myhdc = GetForegroundWindow ()
B = myhdc
myhdc = GetDC (myhdc)
slučka
'Nakreslite priamo na pracovný hárok
B = Arc (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)
End Sub
V module userform
Vložte nasledujúci kód:
Súkromný typ POINTAPIX Ako dlho
Y Ako dlhé
Typ ukončenia
Funkcia Private Declare Funkcia DeleteObject Lib "gdi32" (ByVal hObject As Long) Ako dlhá
Funkcia Private Declare SelectObject Lib "gdi32" (ByVal hdc ako dlho, ByVal hObject tak dlho) ako dlho
Funkcia privátneho deklarácie GetForegroundWindow Lib "user32" () Ako dlho
Private Declare Funkcia CreatePen Lib "gdi32" (ByVal nPenStyle ako dlho, ByVal nWidth tak dlho, ByVal crColor tak dlho) Ako dlho
Private Declare Funkcia LineTo Lib "gdi32" (ByVal hdc ako dlho, ByVal X ako dlho, ByVal Y tak dlho) ako dlho
Funkcia Private Declare MoveToEx Lib "gdi32" (ByVal hdc ako dlho, _
ByVal X Ako dlhé, ByVal Y ako dlhé, lpPoint ako ľubovoľné) Ako dlhé
Funkcia privátneho deklarácie GetDC Lib "user32" (ByVal hwnd as Long) As Long
Private Declare Funkcia SetPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X Ako Dlhý, ByVal Y Ako Dlhý, ByVal crColor Ako Dlhý) Ako Byte
Súkromný monhdc As Long
Dim Buff Ako Boolean
Súkromné Sub UserForm_MouseDown (Tlačidlo ByVal ako celé číslo, ByVal Shift ako celé číslo, ByVal X ako jeden, ByVal Y ako jeden)
Buff = True
End Sub
Súkromné Sub UserForm_MouseMove (Tlačidlo ByVal ako celé číslo, ByVal Shift ako celé číslo, ByVal X ako jeden, ByVal Y ako jeden)
Do Kým myhdc = 0
myhdc = GetForegroundWindow ()
myhdc = GetDC (monhdc)
slučka
Ak Tlačidlo 1 Potom Exit Sub
hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))
DeleteObject SelectObject (myhdc, hRPen)
Ak Buff potom
MoveToEx myhdc, X * 1, 32, Y * 1, 32, & H0
Buff = False
Koniec Ak
LineTo myhdc, X * 1, 32, Y * 1, 32
DoEvents
End Sub