daocuongnbk
Thành viên chính thức
- Tham gia
- 27/12/09
- Bài viết
- 79
- Được thích
- 6
Option Explicit
Sub DapAn()
Const wdGoToLine = 3
Const wdParagraph = 4
Dim k As Long, c As Long, fname, text As String, result(), WordApp As Object, doc As Object, sel As Object, tabl As Object
' xoa du lieu cu
ThisWorkbook.Worksheets("Sheet3").Range("A2:K1000").ClearContents
' mo chon tap tin Word
fname = Application.GetOpenFilename("Word Files (*.doc;*.docx),*.doc;*.docx")
If fname = False Then Exit Sub ' khong chon thi ket thuc
' mo server Word
Set WordApp = CreateObject("Word.Application")
Set doc = WordApp.documents.Open(fname) ' mo tap tin vua chon
ReDim result(1 To doc.Tables.Count, 1 To 11)
' duyet tung bang trong tap tin Word
For k = 1 To doc.Tables.Count
Set tabl = doc.Tables(k)
tabl.Range.GoToPrevious(wdGoToLine).Select
WordApp.Selection.Expand wdParagraph
text = WordApp.Selection.text
result(k, 1) = Trim(Mid(text, 1, Len(text) - 1))
For c = 1 To 10
text = tabl.cell(2, c).Range.text ' Ma de
result(k, c + 1) = Application.Clean(Trim(Mid(text, 1, Len(text) - 1))) ' cac dap an
Next c
Next k
' nhap ket qua vao sheet
ThisWorkbook.Worksheets("Sheet3").Range("A2").Resize(UBound(result, 1), UBound(result, 2)).Value = result
WordApp.Quit
Set doc = Nothing
Set WordApp = Nothing
End Sub
Cám ơn Bạn rất nhiều, đúng theo yêu cầu rồi nhưng làm sao để cột mã đề chỉ là số trong dấu [ ]Mở tập tin DapanchamQM.xlsx -> nhấn tổ hợp Alt + F11 để vào VBE -> menu Insert -> Module -> dán code sau vào Module1 -> lưu lại tập tin với định dạng XLSM -> đặt 1 Button xuống sheet -> chọn macro DapAn
Sau khi nhấn Button thì chọn tập tin Word để lấy dữ liệu.
Mã:Option Explicit Sub DapAn() Const wdGoToLine = 3 Const wdParagraph = 4 Dim k As Long, c As Long, fname, text As String, result(), WordApp As Object, doc As Object, sel As Object, tabl As Object ' xoa du lieu cu ThisWorkbook.Worksheets("Sheet3").Range("A2:K1000").ClearContents ' mo chon tap tin Word fname = Application.GetOpenFilename("Word Files (*.doc;*.docx),*.doc;*.docx") If fname = False Then Exit Sub ' khong chon thi ket thuc ' mo server Word Set WordApp = CreateObject("Word.Application") Set doc = WordApp.documents.Open(fname) ' mo tap tin vua chon ReDim result(1 To doc.Tables.Count, 1 To 11) ' duyet tung bang trong tap tin Word For k = 1 To doc.Tables.Count Set tabl = doc.Tables(k) tabl.Range.GoToPrevious(wdGoToLine).Select WordApp.Selection.Expand wdParagraph text = WordApp.Selection.text result(k, 1) = Trim(Mid(text, 1, Len(text) - 1)) For c = 1 To 10 text = tabl.cell(2, c).Range.text ' Ma de result(k, c + 1) = Application.Clean(Trim(Mid(text, 1, Len(text) - 1))) ' cac dap an Next c Next k ' nhap ket qua vao sheet ThisWorkbook.Worksheets("Sheet3").Range("A2").Resize(UBound(result, 1), UBound(result, 2)).Value = result WordApp.Quit Set doc = Nothing Set WordApp = Nothing End Sub
1. Thêm ở đầuCám ơn Bạn rất nhiều, đúng theo yêu cầu rồi nhưng làm sao để cột mã đề chỉ là số trong dấu [ ]
Dim pos1 As Long, pos2 As Long
result(k, 1) = Trim(Mid(text, 1, Len(text) - 1))
pos1 = InStr(1, text, "[")
If pos1 Then
pos2 = InStr(pos1, text, "]")
If pos2 = 0 Then pos2 = Len(text) - 1
text = Mid(text, pos1 + 1, pos2 - pos1 - 1)
End If
result(k, 1) = CLng(text)
Rất cám ơn Bạn đã giúp đỡ. Mình nhờ bạn lần này nữa thôi: Dòng câu có thể thay đổi tùy theo số câu trong đề trắc nghiệm (chứ không cố định 10 câu). Phiền Bạn giúp đỡ thêm ạ1. Thêm ở đầu
Mã:Dim pos1 As Long, pos2 As Long
2.
Thay
bằngMã:result(k, 1) = Trim(Mid(text, 1, Len(text) - 1))
Mã:pos1 = InStr(1, text, "[") If pos1 Then pos2 = InStr(pos1, text, "]") If pos2 = 0 Then pos2 = Len(text) - 1 text = Mid(text, pos1 + 1, pos2 - pos1 - 1) End If result(k, 1) = CLng(text)
ReDim result(1 To doc.Tables.Count, 1 To 10)
ReDim result(1 To doc.Tables.Count, 1 To 1)
Set tabl = doc.Tables(k)
If UBound(result, 2) < tabl.Columns.Count + 1 Then ReDim Preserve result(1 To UBound(result, 1), 1 To tabl.Columns.Count + 1)
For c = 1 To 10
For c = 1 To tabl.Columns.Count
Cám ơn Bạn rất nhiềuSửa
thànhMã:ReDim result(1 To doc.Tables.Count, 1 To 10)
Mã:ReDim result(1 To doc.Tables.Count, 1 To 1)
Sau
Mã:Set tabl = doc.Tables(k)
thì thêm 1 dòng
Mã:If UBound(result, 2) < tabl.Columns.Count + 1 Then ReDim Preserve result(1 To UBound(result, 1), 1 To tabl.Columns.Count + 1)
Sửa
thànhMã:For c = 1 To 10
Mã:For c = 1 To tabl.Columns.Count
Chào bạn batman1 , mình đang sử dụng pm trắc nghiệm Mcmix Pro nhưng gặp khó khăn khi nhập ID cho mỗi câu hỏi trắc nghiệm vào ngân hàng của pm này (nếu nhập thủ công như phần mềm hướng dẫn thì rất lâu). Nhờ Bạn giúp đỡ mình một phen nhé.Cám ơn Bạn rất nhiều
Nếu bạn không mô tả từ đầu đến cuối thì tôi làm sao biết ý để giúp?Chào bạn batman1 , mình đang sử dụng pm trắc nghiệm Mcmix Pro nhưng gặp khó khăn khi nhập ID cho mỗi câu hỏi trắc nghiệm vào ngân hàng của pm này (nếu nhập thủ công như phần mềm hướng dẫn thì rất lâu). Nhờ Bạn giúp đỡ mình một phen nhé.
Không cần phải tìm hoặc tải đâu Bạn, chỉ xử lý vba trên word thôi. Mình gởi file yêu cầu, nhờ bạn giúp đỡ mình nhaNếu bạn không mô tả từ đầu đến cuối thì tôi làm sao biết ý để giúp?
Cái bạn có ban đầu là gì, và tiếp theo bạn phải làm những gì? Mô tả lần lượt tất cả các thao tác từ thao tác 1 đến thao tác n cần phải thực hiện nếu làm bằng tay. Code sẽ làm các thao tác đó thay cho đôi tay. Thế thôi.
À, mà bạn nói đến Mcmix Pro. Người giúp bạn có phải biết phần mềm này mới có thể giúp bạn không? Nếu phải biết thì hơi khó rồi. Người khác có thể không muốn bỏ công để tìm, tải về cái phần mềm kia.
Bạn tưởng bạn đính kèm 2 tập tin Word là xong à? Tôi có hiểu việc mà bạn đang muốn làm đâu. Tôi không muốn đoán mò.Không cần phải tìm hoặc tải đâu Bạn, chỉ xử lý vba trên word thôi. Mình gởi file yêu cầu, nhờ bạn giúp đỡ mình nha
Trước hết mình cám ơn bạn từ sự giúp đỡ lần trước. Mình là giáo viên đang sử dụng pm trắc nghiệm ngân hàng để trộn đề dạy cho HS nên rất cần bạn giúp đỡ. Thật tình mình không biết nhiều về lập trình nên chỉ biết nhờ bạn nhưng không biết điều này đã làm phiền bạn rất nhiều. Bạn nghĩ thử xem, nếu mình giỏi lập trình thì có cần nhờ đến bạn không. Nếu bạn yêu cầu mình phải trả phí thì không thành vấn đề. Sau những lời này, bạn không cần phải trả lời, mình sẽ không vào diễn đàn excel nữa đâu. Trân trọngBạn tưởng bạn đính kèm 2 tập tin Word là xong à? Tôi có hiểu việc mà bạn đang muốn làm đâu. Tôi không muốn đoán mò.
Giả sử bạn có 2 tập tin Word kia. Giả sử bây giờ tôi phải làm cái việc của bạn bằng TAY. Bạn hãy giải thích và liệt kê tất cả 100 thao tác mà tôi phải làm bằng TAY để đi tới kết quả mong muốn. Lấy gì, ở đâu, so sánh với cái gì hoặc kiểm tra cái gì trong cái vừa lấy, tiếp đó thì đem gộp với cái gì, theo tiêu chí nào, ở nhiệt độ nào, gió cấp mấy, và ghi vào đâu, bằng bút mầu gì, nét đậm hay nhạt ... Vân vân và mây mây.
Nêu nói về lười thì tôi còn lười hơn bạn, tôi là vua lười đây. Nhưng tôi không muốn nói về lười biếng. Đơn giản là nếu không mô tả thì tôi không hiểu bạn muốn làm gì.
Giờ GV cũng lạ, đã đi nhờ lại cao gạoTrước hết mình cám ơn bạn từ sự giúp đỡ lần trước. Mình là giáo viên đang sử dụng pm trắc nghiệm ngân hàng để trộn đề dạy cho HS nên rất cần bạn giúp đỡ. Thật tình mình không biết nhiều về lập trình nên chỉ biết nhờ bạn nhưng không biết điều này đã làm phiền bạn rất nhiều. Bạn nghĩ thử xem, nếu mình giỏi lập trình thì có cần nhờ đến bạn không. Nếu bạn yêu cầu mình phải trả phí thì không thành vấn đề. Sau những lời này, bạn không cần phải trả lời, mình sẽ không vào diễn đàn excel nữa đâu. Trân trọng
Xin chào batman1 và mọi người !Mình có file word bảng đáp án và file excel bảng đáp án theo mẫu. Nhờ giúp đỡ tạo buttun chuyển bảng đáp án từ word sang ecxel theo mẫu dùm. Cám ơn