Xin hỏi câu lênh VBA để copy một file *.JPG vào một fỏlde có sẵn

Liên hệ QC

anhthuan

Thành viên hoạt động
Tham gia
10/12/06
Bài viết
106
Được thích
264
Chào các cao thủ

Tôi đang làm một chương trình liên quan đến copy một file ảnh, câu lệnh như sau:
Mã:
Dim Pic as string
pic = Application.GetOpenFilename _
          (fileFilter:="Picture Files (*.JPG),*.JPG")
FileCopy pic, Thisworkbook.Path & "Picture"
Tuy nhiên câu lệnh trên không thực hiện được. Các bạn biết sai ở chỗ nào thì chỉ cho tôi với, hoặc có câu lệnh nào tôi ưu hơn không?
Thanks,
 
Chỉnh sửa lần cuối bởi điều hành viên:
allo!

Thu lam the nay xem nhe?Ok. minh da thu rui`

Dim Pic as double
pic = Application.GetOpenFilename _
(fileFilter:="Picture Files (*.JPG),*.JPG")
FileCopy pic, Thisworkbook.Path & "Picture"
 
Upvote 0
Mã:
Sub ChonTapTinVaXuLy() 
   Dim fn As Variant 
   fn = Application.GetOpenFilename("File hinh anh,*.jpg", 1, "Xin chon tap tin", , False) 
   ' người dùng không chọn tập tin
   If TypeName(fn) = "Boolean" Then Exit Sub 
   ' sau khi lấy được tập tin bạn muốn xử lý gì thì ở đây
   ' ví dụ: tôi in tên tập tin ra chẳng hạn
   Debug.Print "Selected file: " & fn 
   
End Sub

Lê Văn Duyệt
 
Upvote 0
To levanduyet

Cảm ơn anh Duyệt, nhưng vấn đề của em là ở chỗ: "sau khi lấy được tập tin bạn muốn xử lý gì thì ở đây". Cái em muốn xử lý là copy được cái file: fn = Application.GetOpenFilename("File hinh anh,*.jpg", 1, "Xin chon tap tin", , False) vào một folder khác. Em xử dụng đoạn code: FileCopy fn, Thisworkbook.Path & "Picture" để thực hiện nhiệm vụ, tuy nhiên cái file fn kia lại không được copy vào cái folder: Thisworkbook.Path & "\Picture".
Anh có cao kiến gì giúp được em không?
Thanks,
 
Upvote 0
To: anhthuan,
Bạn đã tham gia diễn đàn tương đối lâu rồi, mà việc đặt vấn đề của bạn cũng khó mà trả lời.
Ví dụ: khi bạn nói lưu vào thư mục ... không được, thì ít ra bạn cũng phải cho biết lỗi gì xãy ra, hoặc ít ra bạn đưa một file mẫu bạn đang làm chẳng hạn. Các đoạn mã, bạn nên đưa vào tag code để dễ xem.

Vấn đề lưu tập tin không được, thông thường do quyền của người dùng. Vấn đề này nhiều lập trình viên VB gặp phải.

Tôi xin đưa ra đoạn mã giúp thực hiện việc lưu, đọc và chỉnh sửa tập tin. Chú ý rằng hàm này chỉ trả về đường dẫn giúp bạn có thể lưu tập tin vào đó. Để hiểu rõ hơn vấn đề này bạn tham khảo link ở cuối bài trả lời.

Mã:
'### Declarations - place this part in the Declarations section of a code file (at the very top of the code)
Public Enum eSpecialFolders
    SpecialFolder_AppData = &H1A        'for the current Windows user, on any computer on the network [Windows 98 or later]
    SpecialFolder_CommonAppData = &H23  'for all Windows users on this computer [Windows 2000 or later]
    SpecialFolder_LocalAppData = &H1C   'for the current Windows user, on this computer only [Windows 2000 or later]
    SpecialFolder_Documents = &H5       'the Documents folder for the current Windows user
End Enum
'### The routine - place this part before/after any other rotuine
Public Function SpecialFolder(pFolder As eSpecialFolders) As String
    'Returns the path to the specified special folder (AppData etc)

    Dim objShell As Object
    Dim objFolder As Object

    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.namespace(CLng(pFolder))

    If (Not objFolder Is Nothing) Then SpecialFolder = objFolder.Self.Path

    Set objFolder = Nothing
    Set objShell = Nothing

    If SpecialFolder = "" Then Err.Raise 513, "SpecialFolder", "The folder path could not be detected"

End Function

Nguồn: Classic VB.

Đề nghị lần sau bạn chú ý giúp.

Lê Văn Duyệt
 
Lần chỉnh sửa cuối:
Upvote 0
To levanduyet

Cảm ơn anh Duyệt, nhưng vấn đề của em là ở chỗ: "sau khi lấy được tập tin bạn muốn xử lý gì thì ở đây". Cái em muốn xử lý là copy được cái file: fn = Application.GetOpenFilename("File hinh anh,*.jpg", 1, "Xin chon tap tin", , False) vào một folder khác. Em xử dụng đoạn code: FileCopy fn, Thisworkbook.Path & "Picture" để thực hiện nhiệm vụ, tuy nhiên cái file fn kia lại không được copy vào cái folder: Thisworkbook.Path & "\Picture".
Anh có cao kiến gì giúp được em không?
Thanks,
Theo như bạn trình bày thì thư mục chứa file hiện hành còn có 1 thư mục con tên là Picture, đúng không?
Vậy chỉ cần 1 code rất đơn giản như sau:
PHP:
Sub Test()
  Dim Pic As String
  With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Add "Images", "*.gif; *.jpg; *.jpeg", 1
    .Show: .AllowMultiSelect = False
    Pic = Replace(.SelectedItems(1), .InitialFileName, "")
  End With
  FileCopy Pic, ThisWorkbook.Path & "\Picture\" & Pic
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
  • Đoạn code của anh Tuấn, nếu người dùng không chọn gì cả thì báo lỗi.
  • Như trên em đã có đề cập nếu mình dùng trong công ty hay ứng dụng được cung cấp cho người dùng khác mà người dùng không có quyền admin, đôi khi vấn đề lưu tập tin vào thư mục này sẽ không được quyền.

LVD
 
Upvote 0
  • Đoạn code của anh Tuấn, nếu người dùng không chọn gì cả thì báo lỗi.

LVD
Đây đâu phải là vấn đề lớn! Quan trọng là thuật toán thôi mà Duyệt!
Báo lổi thì "bẩy lổi" ---> Ai làm sao tiếp theo đó cứ.. tùy thích!
Ẹc... Ẹc...
Chẳng hạn, nếu ai đó yêu cầu thêm phải copy nhiều file cùng 1 lúc, ta sửa code lại tí (dể ẹt)
PHP:
Sub Test()
  Dim Pic As String, i As Long
  On Error Resume Next
  With Application.FileDialog(1)
    .Filters.Add "Images", "*.gif; *.jpg; *.jpeg", 1
    .Show: .AllowMultiSelect = True
    For i = 1 To .SelectedItems.Count
      Pic = Replace(.SelectedItems(i), .InitialFileName, "")
      FileCopy Pic, ThisWorkbook.Path & "\Picture\" & Pic
    Next i
  End With
End Sub
-------------
Nói thêm: Toàn bộ code đều có trong VBA Help ---> Bấm F1 là ra cả 1 trời (ứng dụng mệt xỉu luôn)
 
Lần chỉnh sửa cuối:
Upvote 0
Sorry, chắc tại em bị "bệnh nghề nghiệp".

LVD
Hic... hình như lại... GIẬN rồi... Khổ ghê!
Thật sự mình không có ý gì khác... chỉ trao đổi kinh nghiệm về code
Với VBA mình vẫn còn phải học nhiều từ Duyệt và các sư phụ khác!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom