VBA: Nalezení HDD v listu aplikace Excel nebo UserForm
Zde jsou dva malé příklady, jak najít HDD v pracovním listu:
- Kliknutím na List1 se zobrazí UserForm.
- Umístěte ukazatel na UF, podržte levé tlačítko myši a táhněte myší.
- Uzavřením UF sub pokračuje a nakreslí na arch oblouk.
Začínáme
- Nový sešit
- Přidat název UserForm = UserForm1
Vložte následující kód do listu1:
Funkce soukromého deklaru Arc Lib "gdi32" (ByVal hdc As Long, ByVal X1 jako dlouhý, ByVal Y1 jako dlouhý, ByVal X2 jako dlouhý, ByVal Y2 jako dlouhý,ByVal X3 jako dlouhý, ByVal Y3 jako dlouhý, ByVal X4 jako dlouhý, ByVal Y4 jako dlouhý
Funkce soukromého deklarovat ArcTo Lib "gdi32" (ByVal hdc jako dlouhý, ByVal X1 jako dlouhý, ByVal Y1 jako dlouhý, ByVal X2 jako dlouhý, ByVal Y2 jako dlouhý,
ByVal X3 jako dlouhý, ByVal Y3 jako dlouhý, ByVal X4 jako dlouhý, ByVal Y4 jako dlouhý
Private Sub Worksheet_SelectionChange (Cíl cíl ByVal jako rozsah)
Dim B Jako dlouhý
'aktivovat UC a čerpat z něj (hledání HDC)
UserForm1.Show
'Hledání HDC v listu aplikace Excel
monhdc = 0
Do Zatímco myhdc = 0
myhdc = GetForegroundWindow ()
B = myhdc
myhdc = GetDC (myhdc)
Smyčka
'Nakreslete přímo na listu
B = Arc (myhdc, 120, 500, 320, 400, 320, 400, 780, 500)
End Sub
V modulu userform
Vložte následující kód:
Soukromý typ POINTAPIX Tak dlouho
Y jako dlouhé
Typ konce
Funkce Private Declare DeleteObject Lib "gdi32" (ByVal hObject jako dlouhý) Jako dlouhý
Funkce Private Declare SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject jako dlouhý)
Funkce soukromého deklarovat GetForegroundWindow Lib "user32" () Jako dlouhý
Funkce soukromého deklarovat CreatePen Lib "gdi32" (ByVal nPenStyle jako dlouhý, ByVal nWidth jako dlouhý, ByVal crColor jako dlouhý)
Soukromé deklarovat funkce LineTo Lib "gdi32" (ByVal hdc jako dlouhý, ByVal X jako dlouhý, ByVal Y jako dlouhý) jako dlouhý
Funkce Private Declare MoveToEx Lib "gdi32" (ByVal hdc jako dlouhý, _
ByVal X jako dlouhý, ByVal Y jako dlouhý, lpPoint jako libovolný) Jako dlouhý
Funkce soukromého deklarovat GetDC Lib "user32" (ByVal hwnd as Long) As Long
Souprava funkcí soukromého deklaruPixelV Lib "gdi32" (ByVal hdc As Long, ByVal X jako dlouhý, ByVal Y jako dlouhý, ByVal crColor tak dlouhý) jako Byte
Soukromý monhdc As Long
Dim Buff Jako booleovský
Private Sub UserForm_MouseDown (Tlačítko ByVal jako celé číslo, ByVal Shift jako celé číslo, ByVal X jako jeden, ByVal Y jako jeden)
Buff = True
End Sub
Soukromé Sub UserForm_MouseMove (Tlačítko ByVal jako celé číslo, ByVal Shift jako celé číslo, ByVal X jako jeden, ByVal Y jako jeden)
Do Zatímco myhdc = 0
myhdc = GetForegroundWindow ()
myhdc = GetDC (monhdc)
Smyčka
Pokud tlačítko 1 pak Exit Sub
hRPen = CreatePen (PS_SOLID, 10, RGB (0, 255, 0))
DeleteObject SelectObject (myhdc, hRPen)
Pokud Buff pak
MoveToEx myhdc, X * 1, 32, Y * 1, 32, & H0
Buff = False
Konec Pokud
LineTo myhdc, X * 1, 32, Y * 1, 32
DoEvents
End Sub