Quản lý nội dung thư mục, liệt kê chọn lọc bằng Excel (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

1. File bat (đính kèm) phải đặt cùng thư mục với dsofile.dll. Kích chạy sẽ đăng ký dsofile.dll vào hệ thống.
2. Chưa rõ bạn tạo file word mới để làm gì?
4.Macro vẫn chạy, chỉ AutoFilter bị trở ngại thôi. Cách khắc phục: có lẽ dùng code để mở trước khi AutoFilter và khoá lại sau đó.
 

File đính kèm

1. Bạn xem lại giúp file này có lỗi rồi
( mình chép 3 file : getdoc, dso.bat, dsofile.dll vào cùng 1 thư mục. Mình gở bỏ việc đăng ký ( bằng thủ công) sau đó chay dso.bat để đăng ký nhưng không được. Chạy file Getdoc báo lỗi.

3. Mình đang có 1 vấn đề bị bí nhờ bạn chỉ giúp :

Hiện mình đã có 1 path ở 01 ô ( ví vụ : FolderName = Cells(4, 5))
Tạo 01 macro để thực hiện các yêu cầu theo các bước sau :
3.1. Tạo 1 file word.
3.2.Hiện lên bảng thông báo yêu càu nhập tên để lưu.
3.3. Sau khi nhập xong tên, hiện bảng thông báo yêu cầu nhập TITLE, Subject, Author.
3.4. File này sẽ lưu mặc định trong đường dẫn ở ô "FolderName = Cells(4, 5)".
3.5 Sau khi nhập thông tin xong ( bước 3.2; 3.3 ) thì mở file word đó ra.
( chú ý việc excel báo lỗi security; Macro này tác dụng : để mình tạo file word và nhập thông tin ngayhạy trong EXCEL).

4. Viết dùm đoạn code khóa thử nhé ( nhớ chừa lại ô mình ghi địa chỉ và ô ghi tổng số văn bản).
5. Thêm một vấn đề : Menu
Mình đã tạo được menu mới để chạy Macro và bỏ hết mấy menu chuẩn của chương trình.
Nay mình muốn viết macro cho việc In ấn ( print) và exit thì viết code thế nào.

Thank.
 
Lần chỉnh sửa cuối:
1. Kích hoạt dso.bat đăng ký dsofile.dll vào hệ thống, hộp thoại References hiện ra dòng DS:OLE Document...Cần phải làm một thao tác nữa là mở References đánh dấu chọn vào đó, chương trình mới chạy được. Muốn tự động hoàn toàn, bạn thử làm như sau:
a. Mở cửa sổ code của ThisWorkbook, chép code này vào:
Mã:
Private Sub Workbook_Open()
   Macro1
End Sub
b. Chép đoạn code sau vào module:
Mã:
Sub Macro1()
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile ThisWorkbook.Path & "\dsofile.dll"
End Sub
3.Đoạn code đó như sau:
Mã:
Option Explicit
Sub taoFileDoc()
Dim i As Long
Dim FolderName As String, TenFile As String, sTitle As String, sSubject As String, sAuthor As String
Dim wordAppl As Object
Set wordAppl = CreateObject("Word.Application")
Application.ScreenUpdating = False
FolderName = Cells(4, 5)
TenFile = InputBox("Nhap ten File")
sTitle = InputBox("Nhap Title")
sSubject = InputBox("Nhap Subject")
sAuthor = InputBox("Nhap Author")
With wordAppl
      .Documents.Add
      .ActiveDocument.BuiltinDocumentProperties(1) = sTitle
      .ActiveDocument.BuiltinDocumentProperties(2) = sSubject
      .ActiveDocument.BuiltinDocumentProperties(3) = sAuthor
      .ActiveDocument.SaveAs FolderName & TenFile & ".doc"
      .Visible = True
End With
Application.ScreenUpdating = True
Set wordAppl = Nothing
End Sub
4. Ở mỗi sub trong module 11 (trừ các sub loc_noidung, loc_nguoiky, loc_nguoilam, loc_nguoituvan), bổ sung 2 câu lệnh ở đầu và cuối. Ví dụ:
Mã:
Sub loc_thang()
[B]ActiveSheet.Unprotect "123"[/B]
Application.ScreenUpdating = False
thg = InputBox("Nhap thang can loc", "QUAN LY HO SO VAN BAN")
lrow = Cells(5, 5)
For I = 9 To lrow
Cells(I, 9) = Month(Cells(I, 2))
 Next
Set rngFind = Range("I9:I" & lrow).Find(thg)
               If rngFind Is Nothing Then
                       MsgBox "Khong co dulieu can loc", , "Thong Bao"
Exit Sub
End If
 show_All
 Range("A8").AutoFilter Field:=9, Criteria1:=thg
Range("I9:I" & lrow).ClearContents
Application.ScreenUpdating = True
[B]ActiveSheet.Protect "123"[/B]
End Sub
5. Macro hiện hộp thoại in:
Mã:
Sub Print_Show()
 Application.Dialogs(8).Show
End Sub
Macro đóng file:
Mã:
Sub DongFile()
  ActiveWorkbook.Save
  Application.Quit
End Sub
 

File đính kèm

1. Kích hoạt dso.bat đăng ký dsofile.dll vào hệ thống, hộp thoại References hiện ra dòng DS:OLE Document...Cần phải làm một thao tác nữa là mở References đánh dấu chọn vào đó, chương trình mới chạy được. Muốn tự động hoàn toàn, bạn thử làm như sau:
a. Mở cửa sổ code của ThisWorkbook, chép code này vào:
Code:
Private Sub Workbook_Open()
Macro1
End Sub
b. Chép đoạn code sau vào module:
Code:
Sub Macro1()
On Error Resume Next
ThisWorkbook.VBProject.References.AddFromFile ThisWorkbook.Path & "\dsofile.dll"
End Sub


Có 1 lỗi thế này : khi chạy file đồng ý là tự động load.
- Nhấn Alt+F11 vào VB, Vào gở bỏ phần đánh dấu.
- Lưu lại.
- Lần sau chạy file : báo lỗi, không load được

3. Chạy đoạn code có 02 lổi sau :
- Máy treo hiện ra thông báo : "M excel waiting for another appication to complete OLE action" hiện bảng properties phải Alt+del để thoát.
- Lổi đặt tên :ví dụ mình đặt tên là "02 02 thu tao doc.doc" thì file tạo ra tên : "Test00202 thu tao doc.doc" nếu vậy thì mình đâu thể dùnf Getdoc_pro được.
* Nhờ khắc phục giúp HAY LÀ : Để thuận tiện thay vì tạo 04 hộp thoại bạn tạo dùm 1 hộp thoại (dạng form) nhưng vẫn có thể nhập 4 thông tin trên.

Thân chào.!
 
Lần chỉnh sửa cuối:
1. Bạn chép 3 file vào trong 1 thư mục trước. Kích đôi để chạy dso.bat (phải thấy nháy cửa sổ ). Mở file và chạy.
2.Bạn đặt tên file không cần đuôi doc. Tải file về chạy thử.
 

File đính kèm

File rất hay. Nhưng nếu có thư mục thì trong file Browse bạn cho mình phải thêm &"\"
 
Lần chỉnh sửa cuối:
Bạn vào cửa sổ code của userform chỉnh như sau:
.ActiveDocument.SaveAs FolderName & "\" & TenFile & ".doc"
 
Bảng form rất hay bạn hoàn thiện nó dùm :
1. Thêm nút command "cancel" ( vì nút close trên form nhỏ quá).
2. Nếu không nhập liệu trong form mà nhấn nút tạo ( mình thêm On Error Resume Next) thì không lỗi nhưng nó tạo file tên documnet. Ta tuỳ biến, nếu nhấn vào không có dữ liệu thì tự mất.
3. Sau khi nhập thông tin, không cần xuất hiện bảng properties của Word.
4. Sau khi nhâp thông tin thì form tự động mất ".close" ( hiện tại sau khi tạo file xong form trong excel vẫn còn).
 
sau khi bạn nhập thông tin xong nhấn "tạo" thì bảng properties hiện ra ( giống như xem lại thông tin vừa nhập).Bỏ qua hộp thoại này.
 
Bạn có thể mô tả bảng Properties đó được không? Của Excel hay Word?
 
1. Mình sửa code của bạn :
"Private Sub CommandButton1_Click()
UserForm1.Show
End Sub"

Thành :
"Sub CommandButton1_Click()
UserForm1.Show
End Sub"

để gắn vào menubar chạy Macro. Nó vẫn ngon lành chỉ bị 1 cái là sau khi nhập thông tin hiện lên bảng properties lên. (file của bạn không bị hiện tượng này).

2. Khi tạo file word mình muốn nhập thêm 01 thông tin nữa ( manager, category...) thì làm sao vậy?
 
Bạn tạo thêm 2 textbox trên form và bổ sung code như sau:
Mã:
Private Sub CommandButton1_Click()
On Error GoTo Boqua
Dim i As Long
Dim FolderName As String, TenFile As String, sTitle As String, sSubject As String, sAuthor As String
[B]Dim sCategory As String, sManager As String[/B]
Dim wordAppl As Object
Set wordAppl = CreateObject("Word.Application")
Application.ScreenUpdating = False
FolderName = Cells(4, 5)
TenFile = TextBox1.Text
sTitle = TextBox2.Text
sSubject = TextBox3.Text
sAuthor = TextBox4.Text
[B]sCategory = TextBox5.Text[/B]
[B]sManager = TextBox6.Text[/B]
With wordAppl
      .Documents.Add
      .ActiveDocument.BuiltinDocumentProperties(1) = sTitle
      .ActiveDocument.BuiltinDocumentProperties(2) = sSubject
      .ActiveDocument.BuiltinDocumentProperties(3) = sAuthor
      [B].ActiveDocument.BuiltinDocumentProperties(18) = sCategory[/B]
      [B].ActiveDocument.BuiltinDocumentProperties(20) = sManager[/B]
      .ActiveDocument.SaveAs FolderName & "\" & TenFile & ".doc"
      .Visible = True
End With
Application.ScreenUpdating = True
Boqua:
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
Set wordAppl = Nothing
UserForm1.Hide
End Sub
 
Khi tạo forms trên.
1. Bạn Làm dùm thông báo :Khi nhập text cho sManager, ta định dạng nội dung này là dd mm yy ; nếu khi nhập mà nhập text sai loại ( ví dụ "aaaaaa" hay "111111"...) thì hiện lên thông báo yêu cầu nhập lại.

2. Có code nào khi hiện form mình vẫn có thể kích hoạt các ô dữ liệu trong excel.
 
Lần chỉnh sửa cuối:
Bạn bổ sung vào code:
Mã:
If IsNumeric(TextBox6.Text) = True Or IsDate(TextBox6.Text) = False Then
MsgBox "Ban phai nhap Manager dang date (dd/mm/yy)", , "Thong Bao"
TextBox6.Text = ""
Exit Sub
End If
TextBox6.Text = DateSerial(Mid(TextBox6.Text, 7, 2), Mid(TextBox6.Text, 4, 2), Mid(TextBox6.Text, 1, 2))
TextBox6.Text = Format(TextBox6.Text, "dd/mm/yy")
 

File đính kèm

Nhờ bạn tạo dùm form sửa chữa Properties của word nhé ( file bị sửa đã đóng).
Thank.
 

File đính kèm

1.Các cao thủ ơi, giúp mình làm form với.
2. Bạn nào biết cách sử dụng : Multipage hay Tabstip trong form có cách nào chỉnh page1 lớn, page 2 kích thước nhỏ hơn không? ( vì chúng lúc nào cũng bằng nhau.
 
Lần chỉnh sửa cuối:
Nguyên văn bởi thanhnhanubnd
Nhờ bạn tạo dùm form sửa chữa Properties của word nhé ( file bị sửa đã đóng).
Bạn dùng code sau, chú ý một số điểm:
1. Cells(4,5) chứa đường dẫn đến thư mục.
2. Dữ liệu bắt đầu từ dòng 8.
3. Tên file ghi ở cột C
4. Nếu tên file thay đổi phải chạy lại thủ tục GetDoc_Pro, sheet mới cập nhật.
Code chứa trong sheet:
Mã:
Private Sub CommandButton1_Click()
With UserForm1
     .TextBox1.Text = ""
     .TextBox2.Text = ""
     .TextBox3.Text = ""
     .TextBox4.Text = ""
     .TextBox5.Text = ""
     .TextBox6.Text = ""
     .TextBox7.Text = ""
    .CommandButton2.Enabled = False
  End With
UserForm1.Show
End Sub
Code chứa trong Form:
Mã:
Private oFilePropReader As DSOleFile.PropertyReader
Private oDocProp As DSOleFile.DocumentProperties
Dim eFile As String, eFolderName As String
Private Sub CommandButton1_Click()
On Error Resume Next
Dim stt As Integer
Dim ewbName As String
Dim oCustProp As DSOleFile.CustomProperty
  Set oFilePropReader = New DSOleFile.PropertyReader
  eFolderName = Cells(4, 5)
  stt = TextBox1.Text
  ewbName = Cells(stt + 8, 3)
  eFile = eFolderName & "\" & ewbName
  Set oDocProp = oFilePropReader.GetDocumentProperties(eFile)
                   TextBox2.Text = oDocProp.Name
                   TextBox3.Text = oDocProp.Title
                   TextBox4.Text = oDocProp.Subject
                   TextBox5.Text = oDocProp.Author
                   TextBox6.Text = oDocProp.Category
                   TextBox7.Text = oDocProp.Manager
  CommandButton2.Enabled = True
   End Sub
Private Sub CommandButton2_Click()
On Error Resume Next
Dim oCustProp As DSOleFile.CustomProperty
  Name eFile As eFolderName & "\" & TextBox2.Text
                   oDocProp.Title = TextBox3.Text
                   oDocProp.Subject = TextBox4.Text
                   oDocProp.Author = TextBox5.Text
                   oDocProp.Category = TextBox6.Text
                   oDocProp.Manager = TextBox7.Text
                   TextBox2.Text = ""
                  TextBox3.Text = ""
                  TextBox4.Text = ""
                  TextBox5.Text = ""
                  TextBox6.Text = ""
                  TextBox7.Text = ""
  Set oDocProp = Nothing
End Sub
Private Sub CommandButton3_Click()
UserForm1.Hide
End Sub
 

File đính kèm

có 1 lỗi thế này :
1. Tại vì lúc Browse.. mình đã thêm & "\" nên tên file là đúng tên chứ không có \. Ví dụ : nhan.doc; chứ không phải \nhan.doc như file của VODA.
2. Khi chạy chương trình các properties thì ok. chỉ có tên là không sửa được.

* Có thể thống nhất cách này được ko bạn :
a. File liệt kê trong cột C sẽ không có doc. ( nhờ tác giả sửa Getdoc_pro dùm)- mà nếu có .doc thì lúc Edit propertis bạn mặc định *.doc dùm.

b. Trong code Browe sẽ thêm
& "\" ( sửa 1 chút nhé) - xin lổi tác giả mình thêm rồi.

c. file "toaword" sẽ không có & "\" - tại vì đã có trong Browse..

d.File edit tất nhiên sẽ hiện theo tên thật ( không có "\") và khi edit nó sẽ ok.

T( mọi thông tin chịu hết chỉ có tên là không chịu đổi)
 
Lần chỉnh sửa cuối:
-Tên file không đổi: mình sẽ chỉnh chỗ này.
-Bạn có thể lấy phần code tích hợp vào file đã thêm sửa.
-Nếu không được, gởi cho mình file đã chỉnh sửa để mình tích hợp code edit này vào.
 
Web KT

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

Back
Top Bottom