|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit2 @: C( S/ Y" g( }6 l$ K- {: S0 M
9 a4 `& G3 p |6 a0 |$ Y- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...+ ]% p4 Q. Q2 x3 H( F7 ~1 X+ J
- Private Type LongPtr_T" Y9 i9 w! P6 `6 W
- #If VBA7 Then+ v) ?$ c$ I7 p* J* d
- Value As LongPtr! C% P+ i' a+ j/ E- a1 J
- ' Compare automatically resized LongPtr to fixed size Long and LongLong0 B, A+ ^9 d# q4 c
- #Else
' e. B! h2 K# Y - Value As Long. G9 H7 P5 e7 \0 Y6 t
- #End If
: D8 W4 m7 Q0 r. N3 G - End Type6 \6 U ?1 X* P( w# D9 s3 M5 ^; F* U" F
2 X& F5 ?2 ^; O) ~- ' Win32 数据类型. Different signatures for different versions of VBA
) F3 {* `( b' x1 l E X7 `7 I - Private Type BROWSEINFO
2 u/ k5 G, Q0 }& S$ Y) O: w - #If VBA7 Then
" W; K; P) l/ y2 g- C# Y - hWndOwner As LongPtr/ w$ h$ |( d9 q) L) |
- pIDLRoot As LongPtr
C9 T/ u: d6 W+ Q. Z - pszDisplayName As Long
' T& w6 N3 p, W- M - lpszTitle As String* X5 H! A1 J7 M. O! x7 U
- ulFlags As Long4 R& v6 z1 C4 H& r
- lpfnCallback As LongPtr
( S0 |5 M/ w2 a! C! h. M# @: x - lParam As Long
7 s- ~: O3 x! L4 n - iImage As Long! H+ o7 W6 b' l4 G% a! o
- #Else! V/ m' j3 R/ q+ o* V* g! C
- hWndOwner As Long
% Y1 K! ?9 i# f5 z - pIDLRoot As Long
L( w5 |7 n1 S2 ]: j; T& U - pszDisplayName As Long9 l! N+ m, U- n$ ?7 m
- lpszTitle As String
2 L, v3 h8 H2 C! |5 r" D; p - ulFlags As Long" U/ Q& m7 Z0 o
- lpfnCallback As Long8 ?! p! U: |% s8 v4 J: L" k1 h
- lParam As Long
5 Y5 E P) |9 l- E( _ - iImage As Long
- j6 {) `) Y7 \; o% z! X/ ~& j - #End If' [1 f& ]' M/ L4 J4 A
- End Type
- ~. H! S6 D9 ?- }. S - & G: N5 d! o/ `" g1 P3 `( L$ k i4 S
- Private Const MAX_PATH = 260
5 P$ j0 q* a1 l: S. Y. G) k - 'Directories only
9 n' N2 \# ]* [# J6 Y# K& N" y1 e - Private Const BIF_RETURNONLYFSDIRS = &H1&: J Y! W! D4 @0 W
- 'Windows 2000 (Shell32.dll 5.0) extended dialog
% x8 U4 |/ W: C3 U" Y - Private Const BIF_NEWDIALOGSTYLE = &H40
Q V. H" ?+ e7 ~ - ' show edit box" Y; j5 S8 |* e' L3 k6 O5 D7 k
- Private Const BIF_EDITBOX = &H10&
8 m3 I2 J7 a F5 Z" s( Y
1 x9 y G: a9 ]; G- Private Const WM_USER = &H400$ W( @2 \7 [$ N; S! H2 \
- Private Const BFFM_INITIALIZED = 1, [: j, e# H& D. f# K9 y
- Private Const BFFM_SELCHANGED = 2
. ^3 |( u3 n" n" X9 G - Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)
0 B. t2 {" A1 E) A. H L - 4 M8 n" h7 q9 B* S3 R! |
- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)& V- s7 x+ Y0 x% O/ Z
- Private Const BFFM_SETEXPANDED = (WM_USER + 16)0 X9 _) M; ]9 b: s
" o/ m, I; q# g) Q- Private m_sDefaultFolder As String
, S. p+ E. r x: C, p W4 ^ - & r2 i$ U8 k7 K* E. k9 X, H4 |" f2 T
- Public Const SWP_NOMOVE = 25 ^; R- ?. f& _( e8 h
- Public Const SWP_NOSIZE = 1( `: F8 [1 Z4 I
- Private Const SWP_NOZORDER = 4/ r, k8 V5 E* |8 K- ~: ~: C
# r9 x- B* }" c% A2 e& Z# q( T- Private Type RECT# F6 n/ ^" Y# l. j8 U% d l( U# u
- Left As Long
6 `, n t3 X1 K) G: | - Top As Long
, l+ ?8 |" k' M3 Q - Right As Long5 y0 }) q# R: d+ b4 W
- Bottom As Long
; T, [2 r. U' P9 `0 O2 v9 N! } - End Type
. M, t4 p+ E. Z; N& t - $ A. f! B6 U" S6 A5 G0 p
- ' Win32 API declarations. Different signatures for different versions of VBA.9 }& `! ~7 c; ]7 Y; b
- ' Note the mandatory use of PtrSafe keyword in VBA7.
9 m# Y6 @% ~, h) \* Q& J - #If VBA7 Then
8 q3 p+ `4 x. s& m( [" _; n - 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
) G" Z7 e/ V: E) J, R Y5 @9 u - Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
0 W4 X1 I4 O- W+ W - Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long9 p' I" _% e6 p# b
- Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)
+ ]( I* S* q: J( d; P/ ?& p8 q6 L - Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
& M8 t" h& M8 [6 i* a9 k% A% P2 E, P - ByVal hWndInsertAfter As LongPtr, _& D9 Q7 |/ }3 @. t( p3 `3 o$ F
- ByVal x As Long, _$ o9 q- u& b& ], Y6 l
- ByVal y As Long, _, j. b; r T5 i4 S
- ByVal cx As Long, _5 ?7 t! u# |) I! _4 h5 M" p
- ByVal cy As Long, _' A/ U5 \3 l [7 l8 K* J( P5 L
- ByVal wFlags As Long) As Long
# ], `) X: _0 ^ l7 |/ b' b7 q0 R - Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long/ v6 Q* ]/ Y _+ X9 f
% p/ c6 l F7 E+ x- #Else
5 _) N, _" H3 Q+ ^. a- A7 x. t9 l" U - 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: y2 F z" ~4 Z+ U& g- S2 X
- Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
8 x8 ]' Z- g/ n - Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long1 w) s1 ~4 N+ a4 j
- Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)9 c7 Y: C# ]4 V0 {7 A) b0 d: t3 l
- Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _& E, Y9 @5 F- B5 ^+ W" f) f
- ByVal hWndInsertAfter As Long, _2 h/ ?2 z& k9 o0 f( [
- ByVal x As Long, _9 f+ K o* R1 R$ b
- ByVal y As Long, _+ Q# L R4 O& R2 I. C4 s0 r( ? V" V
- ByVal cx As Long, _( ~& `/ m$ t0 D; w. F6 `
- ByVal cy As Long, _8 `# `) q: [( x# b) d
- ByVal wFlags As Long) As Long1 R8 i* T+ j# |3 e5 F/ h
- Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long2 T* |3 S- X( g) C) }
- + B T7 C- b e! }! Q7 l
- #End If
8 w/ j/ }( e- j - + O: z7 [! [1 `3 [8 s! Y
- Private lastKnownPosition As RECT3 n' E% {) [. D" t& ?
- Private lockLastKnownPosition As Boolean
复制代码
, V. J5 S0 h. }; z梁大,将这一段修改一下 |
|