|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit
' `' y) \8 Q" F* Y$ @8 O8 Q/ E
" d) M: a- a$ ?" z* R n- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...
. ]1 u [( u, U% \/ ^& S - Private Type LongPtr_T+ G9 W) Q7 ], w9 D; ^9 ]3 h4 K
- #If VBA7 Then
4 H: {' A9 X3 v7 J5 `7 U - Value As LongPtr( H. Q; j* a! |" Q2 Z8 y7 I. a* O
- ' Compare automatically resized LongPtr to fixed size Long and LongLong
2 J9 v5 D: U, w; L. s - #Else
- B. L4 b l2 b6 E3 h - Value As Long+ Z5 k2 g: ~9 x0 U4 d V0 N( \
- #End If
* ~2 Q$ e* C7 f; f7 U1 }* @' W - End Type
9 h3 m3 {1 U8 R( _; }4 @1 J
5 J8 [% k/ y) v/ t/ ~& _- ' Win32 数据类型. Different signatures for different versions of VBA
; x) k/ ?1 s9 `8 A4 L& R9 L - Private Type BROWSEINFO
# D' t2 k$ `% z k - #If VBA7 Then, z, i% U$ l' `3 D4 i8 V
- hWndOwner As LongPtr
2 D. [/ t& K2 G# L - pIDLRoot As LongPtr+ ~* J5 L/ }! x# W h
- pszDisplayName As Long
6 O7 {/ t% K9 { - lpszTitle As String
, W3 M& _# ?" R3 k- @# @ - ulFlags As Long! o: {( x8 n: j) t, o" w( V8 \
- lpfnCallback As LongPtr9 }) {) Q/ `$ |2 p! A7 K4 f! H5 L
- lParam As Long9 W: v2 o$ u- t# k9 Y( L7 z1 s R" d
- iImage As Long
& P, y9 O: z3 W/ P/ f0 |: l1 I1 r& b - #Else$ M+ W; i4 S$ d' p' N3 F
- hWndOwner As Long
$ e/ r7 I7 Y5 W; ~8 u! n - pIDLRoot As Long
0 {+ J3 Z% d( [* P/ e - pszDisplayName As Long
; V. k1 E2 a( \2 c. d# [ - lpszTitle As String7 W+ c7 |" J; ^ {$ y! I1 U4 X
- ulFlags As Long( @! U8 p: a. |
- lpfnCallback As Long
# S/ k7 {( `8 f' s% J9 O5 H - lParam As Long1 y( A( y. q1 T
- iImage As Long
6 @; ]9 d+ H; b- e - #End If
$ O$ Z' B/ `( L% h! S& U - End Type
! S+ ]7 \- {4 e) F
/ W" ?8 z" O' M: N+ ]7 U- Private Const MAX_PATH = 260+ V; D) i9 |+ P8 P7 o$ u: a# j
- 'Directories only
. ?2 m6 M& L6 E* D/ _ - Private Const BIF_RETURNONLYFSDIRS = &H1&
9 ~' J8 e5 `1 l. Y - 'Windows 2000 (Shell32.dll 5.0) extended dialog
: k& ?8 d& t4 @+ x- l+ b5 D - Private Const BIF_NEWDIALOGSTYLE = &H40+ L# u3 G; N h/ I2 g1 H
- ' show edit box6 m& M l* e: `% v, Y
- Private Const BIF_EDITBOX = &H10&) p" X* j0 I/ [: ~. L
- " E+ _( D5 K9 X$ G4 F9 C
- Private Const WM_USER = &H400
0 t/ m$ H; b2 a - Private Const BFFM_INITIALIZED = 1; V* U" G( A9 Q% f$ I# f3 h& `
- Private Const BFFM_SELCHANGED = 24 J9 W) W" [9 N& P
- Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)
2 c% w: H# ~+ W: c
2 h' B% z, B9 h( T/ ~$ v- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
4 d) H% D" i. i& Q; L$ C! Y4 R - Private Const BFFM_SETEXPANDED = (WM_USER + 16)
+ t( k: W7 A9 M
1 I' M' @# y6 s& h6 D- K( H5 _- Private m_sDefaultFolder As String+ N: U9 x; X$ w- ]
- % m% \- W& I1 ]8 v) Z7 w
- Public Const SWP_NOMOVE = 2
( k+ a' |) T9 X6 A' W { - Public Const SWP_NOSIZE = 1
7 P/ G8 I& O+ d9 h( D* J4 S" z4 @ - Private Const SWP_NOZORDER = 4
6 E, `* W& {. K3 C; ?7 l, J - 3 e+ M1 y; Z u. |
- Private Type RECT
+ R* r6 [$ V. F* f1 P! w& S - Left As Long) |9 @9 a S! l0 r
- Top As Long
! O6 V3 A! [+ c: u3 m - Right As Long
; Y* v$ p, u. z' n$ q* b3 e - Bottom As Long' b% j3 b( M1 K# R, D; C
- End Type3 h7 c: g8 X; d3 \1 J% v
- 4 V6 d# C2 C2 B/ C0 _* E
- ' Win32 API declarations. Different signatures for different versions of VBA.
2 J3 D. Q5 J; r - ' Note the mandatory use of PtrSafe keyword in VBA7.% B, S/ H9 ?' U1 F6 G$ R9 U
- #If VBA7 Then
- d4 o; q( V# k" y. a* s. O1 b - 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 x5 w6 V1 b0 ?2 r - Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long
. x% I# n. v P# p - Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long
$ Z. \. P9 [5 U9 \7 j. F& D - Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr) ]: K( O) f# U" m% c1 s- S8 t
- Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _
7 p, u: d: \0 ^/ l( y# U$ P2 w* m - ByVal hWndInsertAfter As LongPtr, _
6 }) D- m: P i, k - ByVal x As Long, _! ]3 `: {5 F$ t( n7 ~5 P
- ByVal y As Long, _! ~6 y6 X, l, x
- ByVal cx As Long, _
9 \9 \ j& o) d/ n, j' i4 I; X - ByVal cy As Long, _
) k X* q/ G0 A$ z* Y9 n - ByVal wFlags As Long) As Long
2 M2 S" l3 Q* m' u( A2 b - Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long* K! T! K @1 M" j( a' r, b- v
- ; S! u6 D7 C6 b4 n1 E
- #Else! e- A! t2 f, L7 \/ h: `$ H N% v, 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 Long2 [1 ~6 O+ G& N0 i: d, s
- Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long6 s4 t# b, ^& \0 u
- Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
" D6 Y1 S; h0 O - Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)6 z0 w; ]) e+ R; X# h
- Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _$ R E6 r1 e' g I
- ByVal hWndInsertAfter As Long, _
L# m# _9 ~3 J4 @" c - ByVal x As Long, _
! @- z6 |! [( e; n; \ - ByVal y As Long, _( T+ V4 r) h' @- ^! i4 {
- ByVal cx As Long, _; t( n; J& e8 F& R. ^- p C
- ByVal cy As Long, _4 F3 p3 L+ u/ e5 f. E
- ByVal wFlags As Long) As Long
8 K, Y- T7 {4 z, Y - Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long: f1 S: L v4 P( }
- 3 z6 p ?1 a8 T+ A
- #End If Q' D, w H" k* O' y
3 t7 U, _5 k9 ?# ~0 a- Private lastKnownPosition As RECT
0 f9 ?. q( r7 d4 E8 d, D - Private lockLastKnownPosition As Boolean
复制代码
8 }* S! Y# \3 b7 _ `梁大,将这一段修改一下 |
|