|
|

楼主 |
发表于 2017-7-30 01:11:18
|
显示全部楼层
来自: 中国陕西西安
- Option Explicit
4 @# C8 w. l& m4 i$ I
/ a4 [9 s1 I$ P5 m2 H- D" B- ' 定义用户类型,以减少#if VBA7语句的数量,但不能消除他们...$ `' j1 M, c1 [& O6 E
- Private Type LongPtr_T1 t0 u, r2 ~, j& U, S5 ?5 O$ |
- #If VBA7 Then
+ ?) F9 W- D& ~' n9 \$ l - Value As LongPtr
- k) B+ O/ l H+ [* ~' \0 _ - ' Compare automatically resized LongPtr to fixed size Long and LongLong
( {, i. ]( k c+ u! y3 H - #Else
- S' x2 U- }$ [' F2 P& i i - Value As Long4 i* X. D# O: E3 G! U% O3 d
- #End If) o5 T5 n* F# S$ X% c
- End Type& v6 a {# t6 V2 z# M0 _
- 0 ?0 J: u3 D# F" c3 g4 v4 |
- ' Win32 数据类型. Different signatures for different versions of VBA
7 P" A- p _- T4 `1 t" W. Y* s - Private Type BROWSEINFO
. H0 L1 V ?3 C1 u0 F - #If VBA7 Then+ u( y$ @6 m/ [. @2 m" n
- hWndOwner As LongPtr7 \& A* p" A; r5 B0 t$ D) k
- pIDLRoot As LongPtr
" w6 ^8 C6 h1 a - pszDisplayName As Long8 P- s9 C, l2 g
- lpszTitle As String+ y1 Z1 C! C' \9 @+ ~2 T% X
- ulFlags As Long
8 p9 d& ]3 Q6 M" q - lpfnCallback As LongPtr
7 n1 @; B2 m/ {; j - lParam As Long
( }9 J+ g( K, a" g% A0 Q - iImage As Long
, e; {7 {7 p/ u- L - #Else
. p, a2 {3 ]& _ - hWndOwner As Long$ d5 a; f- l% J1 K4 j
- pIDLRoot As Long
2 s. T, E, J' F7 v - pszDisplayName As Long
6 \0 H+ O. f$ x - lpszTitle As String) A! G( E5 s5 ]/ W8 K& u4 ~
- ulFlags As Long+ G0 ]) w! y& B8 y5 H* q
- lpfnCallback As Long+ Q" t! G' _# t. ]
- lParam As Long. [ |1 a' |3 h6 L3 r3 h& @* V
- iImage As Long
: G: h1 _1 q' ]" g+ J4 i - #End If$ R2 a+ q! v' G; W f$ v! h
- End Type. ^7 {4 G: q2 L g0 A/ ~
- 1 } D, w4 f8 y
- Private Const MAX_PATH = 260
: V+ V4 Z" w7 [# O! D- o3 ~- r, O7 ` - 'Directories only
% k9 h+ W% h) ^3 n/ {+ y* ]3 W& ~ - Private Const BIF_RETURNONLYFSDIRS = &H1&
" h$ ]% ?" g: g* k8 z8 p0 O: d - 'Windows 2000 (Shell32.dll 5.0) extended dialog
' m6 G5 C# m+ n- U7 a4 f% w$ R - Private Const BIF_NEWDIALOGSTYLE = &H40
1 K2 }0 d+ p/ t, @ - ' show edit box0 ?" b8 Y3 y) S8 ?# h, v, Y) B
- Private Const BIF_EDITBOX = &H10&
7 v) q2 T; k: ~2 M2 M; u- u. J - ; Y& N( @* |3 v& p q% r
- Private Const WM_USER = &H400
* d% k) d& t% I0 h" L - Private Const BFFM_INITIALIZED = 1: ~2 e, G& L( q, l3 ]6 m3 C
- Private Const BFFM_SELCHANGED = 24 p8 w, ^4 m$ n
- Private Const BFFM_SETSTATUSTEXTA = (WM_USER + 100)
- g. K! w% Q1 W6 l - # W! s" \/ M2 i P5 r: \/ ~& H4 z
- Private Const BFFM_SETSELECTIONA = (WM_USER + 102)
% r. c \3 L5 K' ^, j2 d4 V - Private Const BFFM_SETEXPANDED = (WM_USER + 16)- Q) D4 T( Y; p `' N4 P" y
- 0 N# k' h L+ U% ?' D( P, I- e
- Private m_sDefaultFolder As String( m m' x0 T2 ^$ ?# Z3 F
- x" V3 J9 p) F) W; d- Public Const SWP_NOMOVE = 2# w M( j G+ k5 k
- Public Const SWP_NOSIZE = 12 |( J! k! E, e3 |4 @# ]3 E3 ~
- Private Const SWP_NOZORDER = 4# O, ]$ P5 b+ O5 }9 l5 B. P
- $ h9 y1 G' L0 L! b: r3 r L
- Private Type RECT' d: D. X% Y$ L4 E- r; P
- Left As Long
( G3 t# A# b. g- y - Top As Long
8 k$ E2 r, P& W7 w9 |, Q# c+ Y9 H x - Right As Long1 N; p6 ?% F- ?5 h" w
- Bottom As Long l" |6 O7 T9 r- M) n
- End Type
8 ^2 e8 B" K! K: N d# | - + @" |1 ^& l r: L
- ' Win32 API declarations. Different signatures for different versions of VBA.
* C$ [5 k, }' N' x. g0 Q. k - ' Note the mandatory use of PtrSafe keyword in VBA7.$ q; D8 C; P. F2 J" b9 q
- #If VBA7 Then% G4 s2 `( a5 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 Long9 K$ u" l& R- _% W( B5 g
- Private Declare PtrSafe Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long% N4 ^( L$ p9 H
- Private Declare PtrSafe Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As LongPtr, ByVal lpBuffer As String) As Long; N8 ^7 ^. b7 V! [
- Private Declare PtrSafe Sub CoTaskMemFree Lib "ole32" (ByVal hMem As LongPtr)
* T* N5 B" t4 @% }$ { R6 ? - Private Declare PtrSafe Function SetWindowPos Lib "USER32" (ByVal hWnd As LongPtr, _: M- g% R* h: k! b
- ByVal hWndInsertAfter As LongPtr, _9 ~5 Y l% p( Z* h2 H
- ByVal x As Long, _
9 P& Y* ?. n! U+ J! @7 | - ByVal y As Long, _
O$ ^% T; e7 U4 g3 [) v - ByVal cx As Long, _
5 j g: f; M1 p' Q! ?+ @+ c( u - ByVal cy As Long, _
9 _: w! G: I7 q/ ]/ h& e - ByVal wFlags As Long) As Long
2 x9 J2 n& b K7 ^) u - Private Declare PtrSafe Function GetWindowRect Lib "user32.dll" (ByVal hWnd As LongPtr, lpRect As RECT) As Long
% O8 B, G9 m$ D' O1 c - / S J' ~8 x* m9 O: L ~. \( F! f
- #Else
+ z& [( v) G, v& u( F; e - 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 o; ~) t) ` \3 m! L8 W3 z, x" K
- Private Declare Function SHBrowseForFolder Lib "Shell32" (lpbi As BROWSEINFO) As Long0 m+ s* U j! X" g: ^6 J0 X
- Private Declare Function SHGetPathFromIDList Lib "Shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
# l6 y" [6 D$ _. N% H - Private Declare Sub CoTaskMemFree Lib "ole32" (ByVal hMem As Long)/ q+ U, Z& p0 i" L' \
- Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _
- A3 g6 u7 b! T& q# t - ByVal hWndInsertAfter As Long, _
2 O, ]' W7 j& P0 u4 m1 T/ a+ l - ByVal x As Long, _
) e) a3 q: R f3 n+ D0 H1 h: C - ByVal y As Long, _. p# ]" ~+ y5 b2 C% Y
- ByVal cx As Long, _
& h1 W+ L% f/ |3 ^% C/ G: p& O - ByVal cy As Long, _
5 V4 z2 j6 ~' r1 i - ByVal wFlags As Long) As Long
' \! j1 M2 O: h8 r. s8 g, I - Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As Long, lpRect As RECT) As Long
3 b+ I E8 X0 v+ O& [9 ?+ c4 A) I( O! n% } - * {) s0 P6 F, k7 S; m
- #End If
; x) ?6 |4 {/ A# F; x( y
/ b+ t+ `$ @. l7 r3 A7 |- Private lastKnownPosition As RECT
9 ]: }& I+ A4 e: ~2 _ - Private lockLastKnownPosition As Boolean
复制代码 ' j6 `! W; M# s" k
梁大,将这一段修改一下 |
|