|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit
& p/ h0 i' B: Y" h7 D0 f
. Z) K9 o* V1 B7 P5 P- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...
5 f% }1 W- {6 k. q - Private Type LongPtr_T' n. A+ t2 m/ T
- #If VBA7 Then* d" N0 b* r# Y. V) f# D1 w
- Value As LongPtr4 S& d8 q+ O) u
- ' Compare automatically resized LongPtr to fixed size Long and LongLong! S4 @! P3 r- m2 G" J* x
- #Else# Q, E5 `; X% f* C5 d% z
- Value As Long
& B1 }1 L/ f" l - #End If
5 T, O' Q7 A% P* u% V& s - End Type
& E3 B# X& ^1 R' Y; j, }
$ H) _0 K. o& z- ' Win32 数据类型. Different signatures for different versions of VBA
) ?9 ]+ z/ B* N) D& m3 n - Private Type BROWSEINFO
2 T7 x- y+ g$ w! E - #If VBA7 Then* f3 o, `+ S5 B5 v- B
- hWndOwner As LongPtr
) t7 z; g1 }7 O0 G" Q& c - pIDLRoot As LongPtr
( A1 G* D6 m; ~; k% a - pszDisplayName As Long4 c: r% q8 Z& d& L
- lpszTitle As String
8 t# C; H' K: } - ulFlags As Long
* r5 H) n1 v4 M V7 i - lpfnCallback As LongPtr/ p! `% G) b8 X9 K
- lParam As Long( m8 b7 j; f4 A2 Q
- iImage As Long1 ^9 o" U. x/ y, f1 k. c
- #Else% A: L4 V/ g, U! |! w2 \. y
- hWndOwner As Long& ?" V& A; H( s2 X0 a
- pIDLRoot As Long
1 b7 v; C$ }$ d Y - pszDisplayName As Long
& a& V% ]$ @1 L! E; ^: V; V3 `3 E - lpszTitle As String
& w& z$ ]8 y7 L1 L& I - ulFlags As Long
3 |# A" q: l4 W- N3 t1 X - lpfnCallback As Long* J( C' T7 U9 y9 P! w
- lParam As Long
- z# q6 H8 v+ o& b, g - iImage As Long- U" h/ O4 M2 E+ T& u! d- l
- #End If% X, c4 C/ _+ E; m. j
- End Type: W# E; P, R% `/ x% S
- 7 n: o. |: A( u/ B2 ]2 s
- Private Const MAX_PATH = 260
4 B2 g0 ~# d9 ^ - 'Directories only
" y% T: {" i' p/ n! T. C! B - Private Const BIF_RETURNONLYFSDIRS = &H1&
1 J& \ A( a7 A- @7 B* j - 'Windows 2000 (Shell32.dll 5.0) extended dialog
) Q& w: o2 x# D( y - Private Const BIF_NEWDIALOGSTYLE = &H40
' y% @8 G; p3 [# b4 Z2 i. ^/ r - ' show edit box
$ Q( w$ q$ Y' q5 d; v - Private Const BIF_EDITBOX = &H10&% L2 U2 Y1 o: X( A
- ! i1 _# O8 B9 c, C, c
- Private Const WM_USER = &H400) a5 \* V$ B- z" v5 S
- Private Const BFFM_INITIALIZED = 1
7 N9 R- [" g: p0 ]! x - Private Const BFFM_SELCHANGED = 2
2 c! N, L( u9 Q! a* n/ ?! D H - Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)+ |( h; b! E6 X/ N6 N4 s" P& O$ p( A( r
( s9 g5 m4 N2 {- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
$ p* p `+ R- m% _+ S5 D - Private Const BFFM_SETEXPANDED = (WM_USER + 16)
: c! y# s+ m' V$ j
) b% h6 W% N2 B9 a- Private m_sDefaultFolder As String
2 J6 o4 A# T* Y# F, S6 p, d - / H, z3 J6 p- _4 ^+ ^
- Public Const SWP_NOMOVE = 2
2 O: Z1 P7 c' s; n - Public Const SWP_NOSIZE = 1- ?1 F; Q+ g+ b. N) f) k
- Private Const SWP_NOZORDER = 4! R& Q$ N2 q0 r2 ~
- - N! L r8 w1 Q+ O" _& A9 x4 t
- Private Type RECT8 R b1 @' Y$ u) s
- Left As Long( }9 J) f$ P' i- M' F. d
- Top As Long+ H* C6 M+ b% j) w7 X
- Right As Long' l& W' Y) W& T' h- m
- Bottom As Long
- {, R6 x, O* ]4 Q, }( s5 C - End Type
& s5 X( }$ U* H X - 3 Z, ~3 P5 h' b/ m
- ' Win32 API declarations. Different signatures for different versions of VBA.
# m$ |5 Z8 B6 _4 g - ' Note the mandatory use of PtrSafe keyword in VBA7.% ]' f. L# z4 z5 f; h% |7 U
- #If VBA7 Then K: P. W/ \8 j
- 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
9 `4 B1 v* b4 Q3 i) M; j- H" S - Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
/ ]2 a5 T2 \ |2 c C$ T - Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long+ ?0 S7 I2 `! l' [7 T+ i9 @% I
- Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)' ~& ~$ r5 t$ u9 d u
- Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
. b2 {4 I6 M; d+ N, f - ByVal hWndInsertAfter As LongPtr, _4 e: O6 x% S4 O+ v g
- ByVal x As Long, _
0 c1 Z G% E9 C - ByVal y As Long, _
4 b( q3 U8 }7 P" ~2 L7 F - ByVal cx As Long, _
* T: m8 V7 z+ u! a+ G8 h0 Z( h - ByVal cy As Long, _, ?) a' ?3 j. U) l9 I! J$ O& w
- ByVal wFlags As Long) As Long: ~& A5 |3 ^% c+ P# \+ U7 b1 E
- Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long+ [( `: n7 V0 _. P; D/ o O# w3 m
- 6 ~7 g% x: E$ y2 i$ y
- #Else8 A9 h% g( m( d. O# F9 p* f
- 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/ H/ F9 _5 O1 H% \ K) v! k; _7 U
- Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long/ `+ }( R3 W( h \, Z
- Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long3 k/ {" c+ d! j9 |* Z$ e( v( e
- Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)) F6 J2 M* f0 y$ w% m- z
- Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
; k7 T1 d f7 n7 L" p8 l s$ {. w7 } - ByVal hWndInsertAfter As Long, _* X/ l# i+ r6 z8 b& C
- ByVal x As Long, _8 T3 \) a+ ?6 N& R7 V2 V! q
- ByVal y As Long, _
. z. ~7 }* \$ ]1 B - ByVal cx As Long, _
4 V- r) z# |( m* G - ByVal cy As Long, _+ r1 e- \( f1 t, X+ F9 m
- ByVal wFlags As Long) As Long! M/ t& ^$ q3 ~0 y; Z* K3 ~
- Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long
) U) D0 {( m2 k: o1 e - * Q ^" } X3 N1 ^4 F- v
- #End If0 h8 m: |: N& a! S+ w3 q+ L
- j* J- Z, K3 I: ]- Private lastKnownPosition As RECT
7 m7 E2 `3 W2 b1 B9 l0 Y8 H1 t - Private lockLastKnownPosition As Boolean
复制代码 . Q$ G1 s/ [& Y: [
梁大,将这一段修改一下 |
|