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 POINTAPI

X 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

Predchádzajúci Článok Nasledujúci Článok

Najlepšie Tipy