Sub ExtractFlash()
Dim tmpFileName As String
Dim FileNumber As Integer
Dim myFileId As Long
Dim MyFileLen As Long
Dim myIndex As Long
Dim swfFileLen As Long
Dim i As Long
Dim swfArr() As Byte
Dim myArr() As Byte
tmpFileName = Application.GetOpenFilename("MS Office File (*.doc;*.xls), *.doc;*.xls", , "Open MS Office file")
If tmpFileName = "False" Then Exit Sub
myFileId = FreeFile
Open tmpFileName For Binary As #myFileId
MyFileLen = LOF(myFileId)
ReDim myArr(MyFileLen - 1)
Get myFileId, , myArr()
Close myFileId
Application.ScreenUpdating = False
i = 0
Do While i < MyFileLen
If myArr(i) = &H46 Then
If myArr(i + 1) = &H57 And myArr(i + 2) = &H53 Then
swfFileLen = CLng(&H1000000) * myArr(i + 7) + CLng(&H10000) * myArr(i + 6) + CLng(&H100) * myArr(i + 5) + myArr(i + 4)
ReDim swfArr(swfFileLen - 1)
For myIndex = 0 To swfFileLen - 1
swfArr(myIndex) = myArr(i + myIndex)
Next myIndex
Exit Do
Else
i = i + 3
End If
Else
i = i + 1
End If
Loop
myFileId = FreeFile
tmpFileName = Left(tmpFileName, Len(tmpFileName) - 4) & ".swf"
Open tmpFileName For Binary As #myFileId
Put #myFileId, , swfArr
Close myFileId
MsgBox "Save the extracted SWF Flash as [ " & tmpFileName & " ]"
End Sub
Chắc chắn thiếu chổ EMBED MOVIE - chọn TRUEHi, Tôi cũng làm giống như các bước các bạn chỉ, và khi làm xong mở lên thì file chạy bình thường nhưng khi gửi đi theo dạng attach file thì người nhận mở ra nó ko chạy. Vậy tôi còn thiếu gì hay sai sót chỗ nào mà file flash tôi nhúng vào excel nó lại không chạy. Tôi cũng đã thử với cùng một cách với WORD nhưng cũng bị lỗi tương tự như thế, khi mở ở máy của tôi thì chạy bình thường, khi gửi đi thì nó bị lỗi. Cám ơn các bạn. ( tôi đã cố nhưng ko thể chèn file vào trong đây được ).
Có chứ bạn. Vẫn đơn giản như đưa flash vào trang tính excell vậy, tuy nhiên bạn phải có công cụ hoặc bạn cài đặt bộ office đầy đủ thì Ok bạn nhé. MỜI BẠN XEM FILECó cách nào cho flash vào userform không hả bác?
công cụ ở đây là gì vậy bạnCó chứ bạn. Vẫn đơn giản như đưa flash vào trang tính excell vậy, tuy nhiên bạn phải có công cụ hoặc bạn cài đặt bộ office đầy đủ thì Ok bạn nhé. MỜI BẠN XEM FILE
Nói tóm lại thế này: Nếu bạn có thể chèn flash vào sheet thì trên UserForm cũng tương tự (chổ này được thì chổ kia cũng phải được)công cụ ở đây là gì vậy bạn
Bộ office đầy đủ là sao cơ, mình không hiểu, tưởng ra chợ mua đĩa offcie 2003 về cài thế là đủ rồi ^^
Cảm ơn bác ndu. Em đã chèn flash vào sheet hoàn toàn ok, nhưng lại loay hoay không chèn nổi flash vào userformNói tóm lại thế này: Nếu bạn có thể chèn flash vào sheet thì trên UserForm cũng tương tự (chổ này được thì chổ kia cũng phải được)
Xem minh họa:Cảm ơn bác ndu. Em đã chèn flash vào sheet hoàn toàn ok, nhưng lại loay hoay không chèn nổi flash vào userform![]()
Click phải vào vùng trống của Toolbox, chọn Additional Controls sẽ tìm được Shockwave FlashHjc, trong userform của em, toolbox không giống của bác ndu rồi, làm sao đây![]()
Có chứ bạn. Vẫn đơn giản như đưa flash vào trang tính excell vậy, tuy nhiên bạn phải có công cụ hoặc bạn cài đặt bộ office đầy đủ thì Ok bạn nhé. MỜI BẠN XEM FILE
Bạn xem đoạn video clip ở trên, có thấy tôi chỉnh mục EmbedMovie = TRUE không? Chỉnh như vậy để "đính chết" flash trên UserForm luôn (dù file flash gốc có bị xóa cũng không có vấn đề)Cảm ơn bác ndu, em cho flash vào đc rồi.
To ngodany: tớ xóa file flash trong thư mục của cậu, user form của bạn vẫn hiển thị flash bình thường. có lẽ flash được đính luôn trên userform?
Đoạn code VBA trích xuất file Flash ra khỏi các tập tin Word, Excel,...
Nguồn: http://www.walkernews.net/2008/03/22/how-to-extract-swf-flash-from-excel-or-word/
Thầy Ndu ơi nhờ thầy xem giùm em với.Chắc chắn thiếu chổ EMBED MOVIE - chọn TRUE
Bài #2 đã hướng dẩn đầy đủ rồi
Thầy Ndu ơi nhờ thầy xem giùm em với.
Em có dowload file của anh le van duyet về và thêm đoạn code vào form thì hình flash không chạy được thầy xem giùm em với
Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public hWnd As Long, lCount As Long
Sub TimerProc(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
On Error Resume Next
lCount = lCount + 1
If lCount = 4 Then Unload UserForm1
End Sub
Sub TimerStart()
TimerStop
SetTimer hWnd, 1, 1000, AddressOf TimerProc
End Sub
Sub TimerStop()
KillTimer hWnd, 1
End Sub
Private Sub UserForm_Initialize()
Me.ShockwaveFlash1.Playing = True
[COLOR=#ff0000]lCount = 0
hWnd = FindWindow("ThunderDFrame", Me.Caption)[/COLOR]
End Sub
Private Sub UserForm_Activate()
Application.Visible = False
[COLOR=#ff0000]TimerStart[/COLOR]
End Sub
Private Sub UserForm_Terminate()
Me.ShockwaveFlash1.Playing = False
Application.Visible = True
[COLOR=#ff0000]TimerStop[/COLOR]
End Sub
Cảm ơn thầy. em mò hoài mà không ra.Flash nó im re là phải rồi
Muốn nó 'động đậy' phải dùng cách khác, cụ thể là dùng hàm SetTimer, KillTimer (hàm API)
Cụ thế:
1> Code trong Module:
2> Code trong UserFormMã:Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public hWnd As Long, lCount As Long Sub TimerProc(ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) On Error Resume Next lCount = lCount + 1 If lCount = 4 Then Unload UserForm1 End Sub Sub TimerStart() TimerStop SetTimer hWnd, 1, 1000, AddressOf TimerProc End Sub Sub TimerStop() KillTimer hWnd, 1 End Sub
Sửa lại như sau:
Chổ màu đỏ là những chổ thêm vào để "kết nối" với đồng hồ đếm thời gianMã:Private Sub UserForm_Initialize() Me.ShockwaveFlash1.Playing = True [COLOR=#ff0000]lCount = 0 hWnd = FindWindow("ThunderDFrame", Me.Caption)[/COLOR] End Sub Private Sub UserForm_Activate() Application.Visible = False [COLOR=#ff0000]TimerStart[/COLOR] End Sub Private Sub UserForm_Terminate() Me.ShockwaveFlash1.Playing = False Application.Visible = True [COLOR=#ff0000]TimerStop[/COLOR] End Sub