|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit0 W: u, I3 f( Y! |; {! ]3 l
- 7 [- r0 b! K* l/ Y- G ?1 k
- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...- L6 v# T: j2 V$ G- S
- Private Type LongPtr_T
: z9 V8 i9 ]# L1 \3 t0 j - #If VBA7 Then) Z! z- f6 m. e) i/ o# i
- Value As LongPtr9 g% E/ H9 G# i& Z
- ' Compare automatically resized LongPtr to fixed size Long and LongLong* g$ v5 v# V2 }1 u5 [
- #Else9 x9 B; Y$ _5 ]$ o
- Value As Long
9 g y# P3 R) B; F$ ^ - #End If
$ G" P/ I: I/ W3 t - End Type$ O6 q2 E$ [) ?, ]: u
- & I4 A0 G+ D' r5 t ^. ~
- ' Win32 数据类型. Different signatures for different versions of VBA' P( d. D1 X2 R* r
- Private Type BROWSEINFO7 F# ~* o7 N+ C, d: Z9 f# K: |7 D1 F
- #If VBA7 Then2 S3 _' C! J: s! d. b7 a
- hWndOwner As LongPtr
- X0 A- B. L2 d4 I1 d8 @7 O - pIDLRoot As LongPtr
: m. n) i, Z0 r- F% \0 A' w1 X' g7 N - pszDisplayName As Long
$ S% a: ^. c6 |5 O3 y/ ^ - lpszTitle As String' [1 }' V Y# _/ m8 C- r
- ulFlags As Long
* \! N% C0 D3 h& o! Z4 j5 L - lpfnCallback As LongPtr% `" r' t0 L2 o0 A1 r8 ^, O
- lParam As Long/ M' ^& z0 H7 B- T8 x: W# w" G
- iImage As Long% a2 {( D w! E' }" ]5 t0 _
- #Else- L0 G+ U+ R8 k' J
- hWndOwner As Long& B9 m; ^! Z6 X, ]* J0 Z
- pIDLRoot As Long
6 w6 C* R: t1 \; E - pszDisplayName As Long
4 k# W. J- Y& v$ W - lpszTitle As String6 ?3 {: Y4 V+ l. {) S4 m; n5 g
- ulFlags As Long+ q2 ~4 t( W" E5 n' f- s) ]9 j6 ^4 H
- lpfnCallback As Long
( }" i" w! a. X7 J8 E - lParam As Long& X4 y) K& M: j% p2 x% k ^
- iImage As Long
( |3 I* g! a9 L4 G, _ - #End If
$ r9 @0 k* {8 u+ H - End Type
1 Y9 ~% j2 F, P' `1 d Y Y - ! o* g# N9 q* T* x# E/ V- ]
- Private Const MAX_PATH = 2608 o$ Y f1 ~+ e5 H6 ^& \- T
- 'Directories only
$ ~8 e- A' E# w) _; R - Private Const BIF_RETURNONLYFSDIRS = &H1&8 Q. e3 }* F# u3 P* [4 z9 \4 a/ B
- 'Windows 2000 (Shell32.dll 5.0) extended dialog
* C% ]5 P# E! X" H% U - Private Const BIF_NEWDIALOGSTYLE = &H40$ n- X( V! {. A) k
- ' show edit box
2 j( x4 G. l, c# Q0 q - Private Const BIF_EDITBOX = &H10&- j% \. d; t9 @
- ]7 z$ R( Y! V
- Private Const WM_USER = &H400
4 O$ a, L; Z6 L3 R9 A - Private Const BFFM_INITIALIZED = 1
4 l+ q0 r0 @9 E$ ~, E4 [ - Private Const BFFM_SELCHANGED = 2
, Z( p! u# r! E& y - Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)7 a. a- T: Z$ v/ b4 T: n
- $ U' x A5 r+ h4 _; e5 O9 h
- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
) d8 [6 @) q% m% A( @( O6 n - Private Const BFFM_SETEXPANDED = (WM_USER + 16)& s+ z. p$ y: f4 r. C [
- ) Z; |! f2 |# g4 Q- w6 j* w
- Private m_sDefaultFolder As String
1 v8 T& Q8 J0 U
3 |( ^1 o. _! g! U- Public Const SWP_NOMOVE = 2
. V$ x+ m- r7 _6 n4 B - Public Const SWP_NOSIZE = 1
7 `; r6 L4 F v, z; A& r8 { - Private Const SWP_NOZORDER = 4. V9 k) c# B" w9 r
+ G( @, U7 L& j' D0 @) B, ]9 W* m- Private Type RECT
; P# n) @/ p" w - Left As Long3 K0 h) D2 d: S
- Top As Long1 S; o$ g$ B f( B: y/ ]! L4 Y
- Right As Long7 B0 I! v" f( K& y
- Bottom As Long) J( y2 V! ]5 }; v$ i5 Z3 O
- End Type
+ e$ v' t4 i; [0 V4 g - ( V0 t+ W8 q2 m) q5 P! A
- ' Win32 API declarations. Different signatures for different versions of VBA.7 p* o% ?: t S) P
- ' Note the mandatory use of PtrSafe keyword in VBA7.7 ?% T ?: f5 M% O0 L* b
- #If VBA7 Then( N# e% U+ e4 h X! z% U
- Private Declare PtrSafe Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
, |* C% v7 H9 F( X - Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long3 x) R9 `3 C0 N, T1 q/ C
- Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long
& r$ U% k; p7 i7 q$ R - Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)
* T* i6 J2 L: `7 o* ^0 k - Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _9 c* n# T. f* R& ]6 S, `8 ~
- ByVal hWndInsertAfter As LongPtr, _
1 j- a: ]3 w; V" X0 P - ByVal x As Long, _
( M1 [/ x1 F. \, b5 b - ByVal y As Long, _
% I5 O" F8 e$ w+ e. [" W- q* z - ByVal cx As Long, _
4 Q% n# t3 `. s- w - ByVal cy As Long, _- S$ x1 R- B0 Y1 V$ g8 P) Q
- ByVal wFlags As Long) As Long
" B. ^ y7 U% h! ` - Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long5 Q( C+ f4 p2 d! ?5 v0 C ^1 M2 v
- - O6 i9 i. h2 R1 u8 o
- #Else
. w% Q3 [% z( l - Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long# |; u) v& h R1 C
- Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long4 W {9 A+ Z0 s5 p# W
- Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
* Z4 H# U2 q d$ Y3 d) p - Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)
0 O+ j# F; }% C$ B - Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
5 Z8 r4 N6 z) s( V- d1 F - ByVal hWndInsertAfter As Long, _
4 J% ]: S- i1 ?$ D, } - ByVal x As Long, _
, P+ w1 B* O1 r5 [& O - ByVal y As Long, _0 l0 A, Q! Y" s" \* U
- ByVal cx As Long, _- { a# \/ J% I" R9 L
- ByVal cy As Long, _
4 ~- }6 Y" P; m3 x% s; j8 O' w - ByVal wFlags As Long) As Long" ^8 F: l1 \$ d$ X
- Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long" X2 N1 D u$ u' q6 M
# J+ i4 i4 s* a/ ^% V- #End If/ u: k4 D$ y' _6 X
- 7 ?% {. c- N1 q1 O
- Private lastKnownPosition As RECT
5 \3 V" ~( }3 I, W9 W, N - Private lockLastKnownPosition As Boolean
复制代码
8 b D2 d& { Z" ^/ I2 i梁大,将这一段修改一下 |
|