|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit
' V# \9 l4 [7 \; p
" `: K; S& ^* P2 V5 C5 m- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...
4 p( y( O8 X8 U% E) ]) W; U - Private Type LongPtr_T
: K1 W6 z& ^. b9 m - #If VBA7 Then/ ]5 h0 \; `* {" n3 @% N; u$ o
- Value As LongPtr
8 u; T/ u: u; v& V+ e% w6 { - ' Compare automatically resized LongPtr to fixed size Long and LongLong
* {3 A( S) ~# [ - #Else" E) e; E. E2 u& |: L
- Value As Long/ F8 [0 S. L4 q9 F7 N9 `
- #End If8 P! w, {! \: z# ]6 [
- End Type
2 `7 ^" q% O( v - 9 g" |7 Q) P2 h& ?4 D( m* q7 k, d
- ' Win32 数据类型. Different signatures for different versions of VBA
, h% Q8 m4 M2 N( [* k7 N) w* q - Private Type BROWSEINFO
' v3 a( o3 e, n - #If VBA7 Then
. H# U( ?1 R! D7 F0 @2 ] - hWndOwner As LongPtr! T9 s; e: C! R4 d1 E. O, i+ f5 R
- pIDLRoot As LongPtr& I& U7 `5 H0 P" R2 S
- pszDisplayName As Long
& ]' k) ~; J% P! F `; u G - lpszTitle As String
& K+ m1 _1 `' ~# r - ulFlags As Long1 r6 v* i. ~ S. T3 X; W2 v" z/ m
- lpfnCallback As LongPtr3 V& r' L p* v) }8 J& w
- lParam As Long
* S- w6 z# a( G$ F. y" A. i - iImage As Long; B* X5 k H. F. I; u# T2 D
- #Else! _5 w8 H N: Y9 u
- hWndOwner As Long# K8 P9 B1 u$ M6 ^9 ~( @
- pIDLRoot As Long# U+ C0 x6 D" \/ L S# H# H6 z! ?& {
- pszDisplayName As Long4 K' Y6 d, Z4 m. X& w( L
- lpszTitle As String
, W1 F# z. k1 [7 e - ulFlags As Long8 H$ @: ]1 _; s0 W, R& O# ]
- lpfnCallback As Long
3 H# v% R2 S2 O7 T9 E1 L) Q9 } C - lParam As Long7 z+ @/ y+ V1 R/ [: p9 A
- iImage As Long9 m1 m! ^' C# z+ s- ]' n
- #End If
/ s# |4 @ Q$ F! F# { - End Type q8 y) I( Y& W" V' N. L# |
% m8 p" N( V' B, @: t- Private Const MAX_PATH = 260
( H( _2 J( }$ |/ I5 i E" V - 'Directories only
7 B: j, V+ K) \3 @9 n2 X - Private Const BIF_RETURNONLYFSDIRS = &H1&' y) f* I0 L5 g
- 'Windows 2000 (Shell32.dll 5.0) extended dialog
- t5 h! F1 _3 q. D& Q$ o - Private Const BIF_NEWDIALOGSTYLE = &H40: k* B' V. Y- b5 W
- ' show edit box
- l5 M Z9 |; L, A- E% G - Private Const BIF_EDITBOX = &H10&
8 I$ Z1 {/ P( {5 a, M( K4 \/ b - # o. v: S( ^( v2 ]- N
- Private Const WM_USER = &H400
, f! |# }, ^; ?- F - Private Const BFFM_INITIALIZED = 1
& E4 I N( u$ F. \1 z - Private Const BFFM_SELCHANGED = 2
$ E D# x: E+ F2 b6 F, @ - Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100). x7 Y! a# t3 [3 ~0 L
- ' j# Y, E, ]1 q# C
- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)8 \( {$ `% U: l( _2 a* d L6 O
- Private Const BFFM_SETEXPANDED = (WM_USER + 16)2 q- i4 L) S: d
- ) f8 V3 E3 h" z" I& N4 P7 l
- Private m_sDefaultFolder As String
0 w! F; }# _4 d) Z# M - " B, q1 }: @- y; T! O+ ~! p
- Public Const SWP_NOMOVE = 2
+ L7 `8 E' |! q# H - Public Const SWP_NOSIZE = 1
7 W# I4 s/ g$ D6 [- ^- p! n/ x - Private Const SWP_NOZORDER = 4$ S4 T! l0 i* H2 n/ L; }
: w8 f2 V/ }2 ]: r- Private Type RECT
6 R, t6 L; H2 G4 g - Left As Long
6 X9 z5 p& k$ ~: Q6 e9 B7 _ f - Top As Long
. Z, U, O' [/ D9 z - Right As Long( ?' ?: u; u# ~4 U" p
- Bottom As Long% |. V' p* z* y# B5 |% J. F
- End Type
) }/ K, b& }, u. s$ O! g0 `8 v( h$ q/ C
+ G U) {) z* e" Q! o, o% E- ' Win32 API declarations. Different signatures for different versions of VBA./ R4 i! H. N, e4 d3 D2 I
- ' Note the mandatory use of PtrSafe keyword in VBA7.
" y8 V% P1 }! q! ]6 ~6 f - #If VBA7 Then- a# C. {2 ?3 _
- 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
& q2 }& Q* Q3 e) M - Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long0 |1 F5 ?) p4 m: x, ~+ {
- Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long9 o1 N/ P" Z* O! C, y/ l
- Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)
, ^/ q: V; o1 ]+ c+ \; h - Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
/ a0 v. F, ] m8 p m6 s - ByVal hWndInsertAfter As LongPtr, _+ Z& ~4 h, T- l' J& B
- ByVal x As Long, _ J" ]( p, K9 o ^
- ByVal y As Long, _
5 |* g2 {# B) @: {& a* |& ]) b - ByVal cx As Long, _( u1 P- a% }. M; `8 K Z2 _, ]
- ByVal cy As Long, _" J8 E# O ^( S! Z0 v0 {
- ByVal wFlags As Long) As Long
( ~5 N, `# d$ p% P5 S5 i - Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long: ^6 N( d1 i- L) Y
- 9 Q j6 y$ ~ F/ U* z3 Q \
- #Else
x H$ p) b( Y) O- z3 G' { - 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
) B- L* i0 H+ R+ q! B6 L - Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long9 F, Y1 g* \% n( g& R
- Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long2 q" G1 E- h' o3 t$ ]
- Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)
! e. T" t0 X8 _1 m - Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _+ n3 \* ]* A$ K& K
- ByVal hWndInsertAfter As Long, _' v' ?3 Z* }( E$ E* b0 j0 I
- ByVal x As Long, _
% n/ n d/ J: _. b9 {+ ~; T2 o/ s - ByVal y As Long, _
" ?$ \: m3 ~( V g! A2 \' C - ByVal cx As Long, _
$ \( [4 V+ Z' ?# ?0 f' K - ByVal cy As Long, _
! p" R g( S/ b/ U* b - ByVal wFlags As Long) As Long1 A; e" T$ J) P5 m
- Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long
2 _2 J9 m* L! |! u - 9 K; U8 f7 v6 a- F3 R7 x
- #End If" ?" e0 e1 B' S
, U- G' o! c4 L4 G; \$ E& z9 C- Private lastKnownPosition As RECT
: @7 X2 _( O! _7 ~+ c - Private lockLastKnownPosition As Boolean
复制代码
$ ?3 _* e. D# }! S$ _: w梁大,将这一段修改一下 |
|