Điều khiển Excel từ Word bằng VBA trong Microsoft Excel 2010
Đôi khi chúng ta phải sao chép dữ liệu từ tài liệu word sang tệp excel. Wecan thực hiện điều này rất dễ dàng với macro trong tất cả các phiên bản office. Macro sẽ mở một tệp excel hiện có / mới, sao chép nội dung, sau đó lưu và đóng tệp. Hãy xem cách này được thực hiện.
Option Explicit __ Sub OpenAndReadWordDoc ()
Dim tString As String Dim p As Long, r As Long Dim wrdApp As Object, wrdDoc As Object Dim wb As Workbook Dim trange As Variant _Set wb = Workbooks.Add With wb.Worksheets (1) .Range (“A1”)
wrdApp.Vible = True Đặt wrdDoc = wrdApp.Documents.Open (“B: \ Test \ MyNewWordDoc.docx”) _ _Với wrdDoc Cho p = 1 thành .Paragraphs.Count Đặt trange = .Range (Start: =. Paragraphs (p ) .Range.Start, _ End: =. Paragraphs (p) .Range.End)
tString = trange.Text tString = Left (tString, Len (tString) -1) _ If Guid (1, tString, ”1”)> 0 Thì wb.Worksheets (1) .Range (“A” & r). Giá trị = tString r = r + 1 End If Next p .Close End With wrdApp.Quit Set wrdDoc = Nothing Set wrdApp = Nothing wb.Saved = True End Sub Để sao chép đoạn mã trên vào tệp của bạn, hãy nhấn Alt + F11 trên bàn phím Bật bên tay trái, bạn sẽ thấy Microsoft Excel Objects Nhấp chuột phải và chọn Chèn Sau đó nhấp vào Mô-đun * Sao chép mã vào cửa sổ mã bên phải Bây giờ hãy xem mã này hoạt động như thế nào – Đầu tiên chúng ta khai báo các biến chúng ta cần –tstring dưới dạng chuỗi để giữ văn bản (chúng ta sẽ xem văn bản nào sau). 2 biến “p” & “r” làm bộ đếm. Đây là loại “dài”. Sau đó, chúng ta có 2 biến đối tượng wrdApp và wrdDoc. wrdApp là đối tượng ứng dụng từ và wrdDoc là đối tượng tài liệu Word. Wb là biến sổ làm việc của chúng tôi cho sổ làm việc mới được tạo trong mã. Nếu bạn đang mở một sổ làm việc hiện có, bạn có thể gán biến này cho biến đó. Biến cuối cùng là kiểu biến thể trange sẽ có nội dung cần chuyển từ file word doc sang file excel.
Set wb = Workbooks.Add Điều này sẽ gán sổ làm việc mới cho biến wb. Nếu bạn không muốn thêm một sổ làm việc mới nhưng mở một sổ làm việc hiện có, thì bạn có thể thay đổi dòng này như sau – * Đặt wb – Workbooks.Open (“B: \ Test \ File1.xlsx”) _Với wb.Worksheets ( 1) .Range (“A1”)
Những dòng mã này đưa vào văn bản “Nội dung Tài liệu Word:” với phông chữ đậm và cỡ chữ 14 trong ô A1 của trang tính 1 ^ st ^ trong sổ làm việc mới. Và sau đó .Offset (1,0) .Select chọn hàng tiếp theo.
r = 3 Biến “r” được gán giá trị 3 vì đây là hàng bắt đầu trong tệp excel để sao chép dữ liệu từ tài liệu word.
Set wrdApp = CreateObject (“Word.Application”) _ Nếu Word đã chạy trong hệ thống của bạn, _CreateObject * sẽ tạo một phiên bản Word mới. Vì vậy, dòng này chỉ định biến đối tượng wrdApp cho Ứng dụng Word mà bạn có thể sử dụng sau này trong mã.
wrdApp.Vosystem = True Phiên bản Word mới được tạo sẽ không hiển thị khi nó được tạo. Để hiển thị nó, bạn cần đặt wrdApp.Vosystem = True để nó hiển thị.
_Set wrdDoc = wrdApp.Documents.Open (“B: \ Test \ MyNewWordDoc.docx”) _ Chúng tôi đã tạo phiên bản mới của ứng dụng word nhưng chúng tôi chưa mở tài liệu word nguồn. Vì vậy, lệnh này sẽ mở tài liệu từ. Đối tượng wrdDoc đã được gán cho tài liệu này để chúng tôi có thể sử dụng nó sau này trong mã.
With wrdDoc… .End With Đây là vòng lặp “With” của chúng ta sẽ hoạt động hoàn toàn với đối tượng wrdDoc. Khi bạn mở vòng lặp này, bạn không phải lặp lại văn bản “wrdDoc” trong vòng lặp này. Bạn có thể bắt đầu trực tiếp bằng dấu chấm (“.”)
trước bất kỳ đối tượng nào liên quan đến wrdDoc. Vòng lặp này kết thúc bằng câu lệnh End With. Khi câu lệnh End With đã được nhập, bạn không thể tham chiếu đến các đối tượng sau wrdDoc chỉ với “.”.
For p = 1 to .Paragraphs.Count Đây là vòng lặp “For” sẽ lặp từ đoạn 1 ^ st ^ đến đoạn cuối trong tài liệu word. Tệp word chứa dữ liệu có 100 dòng thông tin, mỗi dòng được lưu trữ thành một đoạn văn bản riêng biệt. Vòng lặp sẽ tăng từ 1 đến 100 và sao chép các đoạn văn. Nếu các điều kiện nhất định được thiết lập, việc dán bản sao sẽ dựa trên các điều kiện đó.
_Set trange = .Range (Start: =. Paragraphs (p) .Range.Start, End: =. Paragraphs (p) .Range.End) _ Điều này chỉ định phần đầu và phần cuối của mỗi đoạn trong phạm vi khi vòng lặp tăng dần.
_tString = trange.text tString = Left (tString, len (tString) -1) _ Đầu tiên văn bản từ trange được chuyển tới TString. Sau đó mỗi đoạn văn có một ký tự đoạn văn ở cuối câu. Điều này được loại bỏ bằng cách sử dụng chức năng Left. Từ phía bên trái, tất cả các ký tự ngoại trừ ký tự cuối cùng được lưu trữ trong biến tString.
Nếu Guide (1, tString, “1”)> 0 Thì wb.Worksheets (1) .Range (“A” & r) .Value = tString r = r + 1 End If Hàm IF này kiểm tra xem văn bản trong tString có chứa số 1. Nếu đúng, thì nó sẽ sao chép nội dung của tString vào hàng có sẵn tiếp theo trong sổ làm việc. “R” đầu tiên có giá trị là 3. Sử dụng r = r + 1, chúng tôi tăng nó lên 1, để mục nhập tiếp theo có thể được đặt dưới mục nhập trước đó.
Next p .Close Dòng mã Next p tăng dần đến đoạn tiếp theo.
.Close đóng tài liệu sau khi tất cả các đoạn đã được làm việc xong. Đây là kết quả chúng tôi nhận được trong tệp excel –
Bạn sẽ thấy rằng chỉ những đoạn có chứa số 1 ở bất kỳ đâu trong số đó mới được đưa vào đầu ra.
wrdApp.Quit Set wrdDoc = Nothing Set wrdApp = Nothing wb.Saved = True wrdApp.Quit sẽ đóng từ Application. Đặt wrdDoc = Không có gì và Đặt wrdApp = Không có gì sẽ giải phóng bộ nhớ do 2 biến đối tượng này chiếm và đặt chúng thành Không có gì. wb.Saved = True sẽ lưu sổ làm việc.
Với đoạn mã trên, chúng ta có thể kiểm soát dữ liệu nào sẽ được sao chép từ file word sang file excel.