|
你把这个代码覆盖掉ClsLaolaFile类中的同名过程,然后再运行测试。原来代码多了几层判断,可能你的有些文件不通过,被过滤掉了。还有就是,提取前要保证文件已经存过盘,如果插入对象后没有存盘的话,只能提取存盘前的文件:
- Public Sub SaveAllOLEFile(ByVal strPath As String, Optional ByVal strFileName As String, Optional ByVal Extension As String, _
- Optional ByVal StartNumber As Long = 1, _
- Optional ByRef CheckFileHand As Variant = Null)
- Dim blnCheck As Boolean
- Dim Length As Long
- Dim bytFile() As Byte
- Dim bytCheck() As Byte
- Dim lenCheck As Long
- Dim I As Long, J As Long, K As Long, L As Long
- Dim FileName As String
-
- On Error Resume Next
- blnCheck = Not IsNull(CheckFileHand)
- blnCheck = blnCheck And Not (IsEmpty(CheckFileHand))
-
-
- strPath = PathAddBackslash(strPath)
- If StartNumber < 0 Then StartNumber = 1
- If Not MKDirctory(strPath) Then
- MsgBox "创建目录失败!请确认你的目录名是否设置错误!", vbCritical
- Exit Sub
- End If
-
- If blnCheck Then
- Select Case VarType(CheckFileHand)
- Case vbString: bytCheck = CheckFileHand: lenCheck = UBound(bytCheck) - LBound(bytCheck) + 1
- Case vbArray Or vbByte
- J = LBound(CheckFileHand)
- I = UBound(CheckFileHand)
- lenCheck = I - J + 1
- ReDim bytCheck(0 To I - J)
- For I = 0 To UBound(bytCheck)
- bytCheck(I) = CheckFileHand(I + J)
- Next I
- Case vbInteger
- lenCheck = 2
- ReDim bytCheck(0 To 1)
- bytCheck(0) = CInt(CheckFileHand) And &HFF&
- bytCheck(1) = CInt(CheckFileHand) \ &H100&
- Case vbLong
- lenCheck = 4
- ReDim bytCheck(0 To lenCheck - 1)
- I = CheckFileHand
- CopyMemory bytCheck(0), I, lenCheck
- Case Else: blnCheck = False
- End Select
- End If
-
- For I = 0 To UBound(Directory)
- With Directory(I)
- If (.Length > 0) And (.DirType = UserStream) Then
- K = 0
- If lenCheck > 0 Then
- If ReadStream(I, bytFile, lenCheck) Then
- For L = 0 To lenCheck - 1
- K = K Or (bytFile(L) Xor bytCheck(L))
- Next L
- End If
- End If
-
- If K = 0 Then
- If ReadStream(I, bytFile, .Length) Then
- Do
- FileName = PathRenameExtension(strPath & strFileName & StartNumber, Extension)
- StartNumber = StartNumber + 1
- Loop While FileExists(FileName)
- K = FreeFile
- Open FileName For Binary As K
- Put K, , bytFile()
- Close K
- End If
- End If
- End If
- End With
- Next I
- End Sub
复制代码 |
|