|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit( a; ?6 I7 u9 G- Y- b* P( @4 Q
9 {$ ^7 ^" P% d5 S- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...
9 H. n! U. ^0 @; \0 u# V8 Z - Private Type LongPtr_T" O) e) e7 h9 Q5 Z6 v, g
- #If VBA7 Then
$ ]. S! _$ d! e - Value As LongPtr
) R% O& i8 e& E# D$ I - ' Compare automatically resized LongPtr to fixed size Long and LongLong
/ m0 X" Z" G" v - #Else
# v/ E( a6 b; K7 Y9 c i - Value As Long' q5 _$ A1 |. ~4 E$ @# ~$ J
- #End If1 @! A) b% Z. z# l: I/ |* ]
- End Type8 ] y2 V4 }- |, o' z" z
- % A9 R) c G3 f+ r
- ' Win32 数据类型. Different signatures for different versions of VBA
" F3 V( v, ?& Q' i! y - Private Type BROWSEINFO
# r k$ E8 k1 |& i; c+ Y+ f - #If VBA7 Then& y2 i3 I* S2 k* E, t
- hWndOwner As LongPtr4 q( x/ v( n- `8 [) z
- pIDLRoot As LongPtr
$ E( N: Q. M6 X6 c+ l5 r7 g+ ? - pszDisplayName As Long
8 l, q# D4 b: Y0 A- g# }% X( Z* U; K& f - lpszTitle As String
9 o: s! v) @7 C5 B% |2 Y1 \ - ulFlags As Long
( b C$ ^- G: D& y0 E- @) K7 r - lpfnCallback As LongPtr
, C+ ~/ A, k' i - lParam As Long2 R" P k# U5 c1 h' }, q
- iImage As Long
' ~8 I; u" ]6 Z* ~5 a - #Else
* ~" P! v5 |0 U* U) l4 Q7 N$ Z - hWndOwner As Long( _0 \* D. y1 K
- pIDLRoot As Long
. O0 Y* v, I0 Z& Y' G - pszDisplayName As Long
6 ?/ C7 O6 `! N; @; R6 T - lpszTitle As String
4 S: @7 `4 b- u2 A- s& X5 j8 r, W" B - ulFlags As Long q1 ^+ n2 i6 a/ D
- lpfnCallback As Long4 P% F# z* g1 [( X/ V" d- E* i
- lParam As Long
7 M7 W. u) V" V$ x - iImage As Long
/ T- A. C; ~. u' r' F - #End If
: j8 `" S g0 h2 Z% [3 _ - End Type
$ B4 E/ e* b7 K! a
! l- o3 G9 Q+ o- Private Const MAX_PATH = 260" |! t; E* O- Q; G$ S
- 'Directories only3 f' `4 N$ f" S8 J+ I
- Private Const BIF_RETURNONLYFSDIRS = &H1&
' C% ]& v( s ?! e- M - 'Windows 2000 (Shell32.dll 5.0) extended dialog
% @+ j$ Z7 w% D, X: \3 M - Private Const BIF_NEWDIALOGSTYLE = &H40
7 t% k0 i+ j! U3 m! N* k- F3 g - ' show edit box
- t9 ^4 O+ m: K) Q$ Z - Private Const BIF_EDITBOX = &H10&
1 ^$ b! ^2 x/ P4 t. W! V - + C$ g3 P& L% @" h
- Private Const WM_USER = &H400! D# H4 v! P% }- ?
- Private Const BFFM_INITIALIZED = 1
3 y( |6 I j# S$ |. p, \2 r, G7 q% e - Private Const BFFM_SELCHANGED = 2
$ k, N' u# ]4 `$ k2 [) [ - Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)
( O9 f0 }6 Z% L: P3 d, M( C
5 l# Z" h& N; Z- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)1 U2 P3 o6 [; J2 l8 P6 @
- Private Const BFFM_SETEXPANDED = (WM_USER + 16)$ n! y8 Y2 w1 v/ @0 N
- , I/ h/ F7 t; { |
- Private m_sDefaultFolder As String
, }) ^0 l2 |2 K, o& @1 j - 4 h0 M g9 K2 U% t- ~
- Public Const SWP_NOMOVE = 2
" n) o: J! P2 N0 @9 U - Public Const SWP_NOSIZE = 1
4 E" e/ _) ~4 P$ ?- n1 a - Private Const SWP_NOZORDER = 4
5 u8 P4 J; n' `0 _
. N- ?5 J; @) e9 q8 F- Private Type RECT3 v# z; R" k* T$ d, {
- Left As Long1 \5 f0 t' l- T, J$ x" F
- Top As Long2 w- M4 h) L) f
- Right As Long
; _8 A5 O, ^" f* o - Bottom As Long" f) d5 T, V* w& ~5 i
- End Type
% U" a- l" T: h' y - / K( ?' A# T# @ {$ o& z" ~0 x; R
- ' Win32 API declarations. Different signatures for different versions of VBA.0 w# A9 j- O2 ?+ @
- ' Note the mandatory use of PtrSafe keyword in VBA7.) \. j9 d; a) Y) `; Q4 z* j" I% m
- #If VBA7 Then
6 B: C L4 Q- }4 G3 T' p }1 \, G - 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) a! A' L7 ?, t! W0 S
- Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long* M' _# R9 \3 V v9 O( b
- Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long
, e3 q1 O: V) J' } - Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)
, n4 }9 {; _2 f+ ?/ @( [ - Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
: x" A2 [9 z. B, L2 v - ByVal hWndInsertAfter As LongPtr, _
) k5 C, a& H8 A$ G% } - ByVal x As Long, _
) L. V0 s4 m& B: ] - ByVal y As Long, _1 `) \4 S: ~" m6 l
- ByVal cx As Long, _
3 Q8 U4 E8 c3 [0 U6 j - ByVal cy As Long, _6 s" G+ ]7 ~- n7 g }0 p
- ByVal wFlags As Long) As Long: y. `. D5 L( v2 h2 g) t
- Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long# n% [; Y' [* q
- $ C! y7 z6 o4 z2 z. O% ]
- #Else
0 p! E" E6 |5 t3 K: 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
, m3 `* W h1 O' L, }" A - Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
! B7 I' R6 `9 r, I4 Q - Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
# b- T/ I) Z8 I8 c. L% ~ - Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)
9 z! A4 v" c; n6 J }& c - Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _* u4 I+ h) j4 y
- ByVal hWndInsertAfter As Long, _1 p( v5 O/ a0 G) k7 q: Z
- ByVal x As Long, _% o% |6 d8 n8 }1 b1 K
- ByVal y As Long, _
7 a! R& R, T6 ~+ A - ByVal cx As Long, _/ m+ `4 p: \' P! p
- ByVal cy As Long, _
' v' |/ ?7 w$ i0 D - ByVal wFlags As Long) As Long
: V+ r! |% O5 H* n - Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long
8 n2 ]7 f4 p( e' q( p* \
* e8 y: p+ i, ^2 F* c/ b) n' T- #End If
0 _& B- Z/ p3 ^6 S, F - ! a; V) W. z( r( o' B6 R- b
- Private lastKnownPosition As RECT' a: C; a3 p" O' s) H- t; p6 y
- Private lockLastKnownPosition As Boolean
复制代码 . X0 A+ ]; [5 s
梁大,将这一段修改一下 |
|