VBA: Finne Hdc i et Excel-regneark eller UserForm

Her er to små eksempler på hvordan du finner Hdc i et regneark:

  • Ved å klikke på Sheet1 vises UserForm.
  • Sett pekeren på UF, hold venstre museknapp nede og dra musen.
  • Ved å lukke UF-delen fortsetter og tegner en bue på arket.

Starter

  • En ny arbeidsbok
  • Legg til et UserForm navn = UserForm1

Lim inn følgende kode i ark 1:

 Private Declare Funksjon Arc Lib "gdi32" (ByVal hdc så lenge, ByVal X1 så lenge, ByVal Y1 så lenge, ByVal X2 så lenge, ByVal Y2 så lenge,

ByVal X3 så lenge, ByVal Y3 så lenge, ByVal X4 så lenge, ByVal Y4 så lenge) så lenge

Privat erklære funksjonen ArcTo Lib "gdi32" (ByVal hdc så lenge, ByVal X1 så lenge, ByVal Y1 så lenge, ByVal X2 så lenge, ByVal Y2 så lenge,

ByVal X3 så lenge, ByVal Y3 så lenge, ByVal X4 så lenge, ByVal Y4 så lenge) så lenge

Privat Sub-regneark_SeleksjonEndre (ByVal Target As Range)

Dim B så lenge

'Aktiver en UC og trekk på den (finne din HDC)

UserForm1.Show

'Finne din HDC i Excel-regneark

monhdc = 0

Gjør mens myhdc = 0

myhdc = GetForegroundWindow ()

B = myhdc

myhdc = GetDC (myhdc)

Loop

'Tegn direkte på regneark

B = Arc (mydc, 120, 500, 320, 400, 320, 400, 780, 500)

Slutt Sub

I brukerformmodulen

Lim inn følgende kode:

 Privat Type POINTAPI

X så lenge

Så lenge

Sluttype

Privat erklære funksjon DeleteObject Lib "gdi32" (ByVal hObject så lenge) så lenge

Privat erklære funksjon VelgObject Lib "gdi32" (ByVal hdc så lenge, ByVal hObject så lenge) så lenge

Privat erklære funksjon GetForegroundWindow Lib "user32" () så lenge

Privat erklæring Funksjon CreatePen Lib "gdi32" (ByVal nPenStyle så lenge, ByVal nWidth så lenge, ByVal crColor så lenge) Så lenge

Privat erklære funksjon LineTo Lib "gdi32" (ByVal hdc så lenge, ByVal X så lenge, ByVal Y så lenge) så lenge

Privat erklære funksjon MoveToEx Lib "gdi32" (ByVal hdc så lenge, _

ByVal X så lenge, ByVal Y så lenge, lpPoint som noen) så lenge

Privat erklære funksjon GetDC Lib "user32" (ByVal hwnd så lenge) så lenge

Private Declare Function SetPixelV Lib "gdi32" (ByVal hdc så lenge, ByVal X så lenge, ByVal Y så lenge, ByVal crColor så lenge) Som Byte

Privat monhdc så lenge

Dim buff som boolsk

Privat Sub UserForm_MouseDown (ByVal Button Som Integer, ByVal Shift As Integer, ByVal X Som Single, ByVal Y Som Single)

Buff = True

Slutt Sub

Privat Sub UserForm_MouseMove (ByVal Button Som Integer, ByVal Shift As Integer, ByVal X Som Single, ByVal Y Som Single)

Gjør mens myhdc = 0

myhdc = GetForegroundWindow ()

myhdc = GetDC (monhdc)

Loop

Hvis knapp 1, avslutt deretter Sub

hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))

DeleteObject SelectObject (myhdc, hRPen)

Hvis buff deretter

MoveToEx myhdc, X * 1, 32, Y * 1, 32, og H0

Buff = False

Slutt om

LineTo myhdc, X * 1.32, Y * 1.32

DoEvents

Slutt Sub

Forrige Artikkel Neste Artikkel

Beste Tips