Điểm nháy đang ở trước hay sau hay trùng với 1 bookmark

Liên hệ QC

haonlh

Thành viên tích cực
Tham gia
2/12/07
Bài viết
1,177
Được thích
587
Tôi đang lập 1 chương trình nhỏ trong Word. Xin sự giúp đỡ của các bạn:

Giả sử trong file word đang xử lý có 1 bookmark có tên là "xx". Dùng hàm hay xử lý gì để biết điểm nháy đang có trong cửa sổ đó ở trước hay sau bookmark đó.

Xin cảm ơn
 
Tôi đang lập 1 chương trình nhỏ trong Word. Xin sự giúp đỡ của các bạn:

Giả sử trong file word đang xử lý có 1 bookmark có tên là "xx". Dùng hàm hay xử lý gì để biết điểm nháy đang có trong cửa sổ đó ở trước hay sau bookmark đó.

Xin cảm ơn
Sao mình không hiểu bạn đang nói gì nhỉ? Sao bạn không gửi file lên.
 
Cảm ơn Luc Van đã đọc. Chuyện là thế này:

Tôi đang thử lập trình để tạo đề thi từ 1 ngân hàng đề.
Ngân hàng đề đã có và mỗi câu bắt đầu là "Câu 1" cho đến câu cuối cùng, giả sử là "Câu 30". Tiếc rằng sau câu 30 thì là các văn bản không thuộc đề mà là chữ ký các loại (đây là đặc điểm chung của mọi văn bản phi cấu trúc).

Giả sử chương trình cần tạo đề gồm 3 câu. Nó tạo 3 số ngẫu nhiên phân biệt, giả sử 13, 20, 30. Bằng cách chọn văn bản giữa "Câu 13" và "Câu 14" thì chương trình lấy được câu 13. Tương tự với câu 20.

Riêng với câu 30, do không có câu 31 nên trước khi làm đề, chương trình yêu cầu chuyển điểm nháy đến vị trí cuối của câu 30 để đặt bookmark là "xx" (có thể viết mã kèm phím nóng để nhanh).

Để phòng người dùng gõ nhầm, ví dụ điểm nháy ở trước câu 30 mà đặt bookmark cuối câu ở trước thì vô lý, nên chương trình phải chuyển điểm nháy đến "Câu 30" và kiểm tra điểm nháy ở trước bookmark thì OK, sai thì báo lỗi.

Vậy nên mới quy thành: Trong chương trình đang chạy, điểm nháy nằm ở đâu đó, ta cần biết điểm nháy đó ở trước hay sau 1 bookmark đã biết tên.

Hy vọng bạn giúp
 
Cảm ơn Luc Van đã đọc. Chuyện là thế này:

Tôi đang thử lập trình để tạo đề thi từ 1 ngân hàng đề.
Ngân hàng đề đã có và mỗi câu bắt đầu là "Câu 1" cho đến câu cuối cùng, giả sử là "Câu 30". Tiếc rằng sau câu 30 thì là các văn bản không thuộc đề mà là chữ ký các loại (đây là đặc điểm chung của mọi văn bản phi cấu trúc).

Giả sử chương trình cần tạo đề gồm 3 câu. Nó tạo 3 số ngẫu nhiên phân biệt, giả sử 13, 20, 30. Bằng cách chọn văn bản giữa "Câu 13" và "Câu 14" thì chương trình lấy được câu 13. Tương tự với câu 20.

Riêng với câu 30, do không có câu 31 nên trước khi làm đề, chương trình yêu cầu chuyển điểm nháy đến vị trí cuối của câu 30 để đặt bookmark là "xx" (có thể viết mã kèm phím nóng để nhanh).

Để phòng người dùng gõ nhầm, ví dụ điểm nháy ở trước câu 30 mà đặt bookmark cuối câu ở trước thì vô lý, nên chương trình phải chuyển điểm nháy đến "Câu 30" và kiểm tra điểm nháy ở trước bookmark thì OK, sai thì báo lỗi.

Vậy nên mới quy thành: Trong chương trình đang chạy, điểm nháy nằm ở đâu đó, ta cần biết điểm nháy đó ở trước hay sau 1 bookmark đã biết tên.

Hy vọng bạn giúp
Thế sao bạn không xây dựng chương trình bằng Excel cho nó dễ nhỉ?
 
Vì các file ngân hàng đề đều làm trên Word. Câu hỏi có thể lẫn cả bảng và / hoặc ảnh.

Nếu chuyển sang Excel thì không biết có mất ảnh không. Và bảng có trong bảng thì làm thế nào.

Cũng chú ý là các "từ khóa" Câu 1, Câu 2... đều được chương trình kiểm tra có đúng làm ở đầu dòng không.
Và nhờ mã đặc biệt của Word (ví dụ ^w để ứng với 1 khoảng trắng có thể được tạo bởi 1 hoặc nhiều phím Space hoặc Tab) để bỏ qua những lỗi như đầu chữ Câu hoặc giữa Câu và số 1 có nhiều dấu cách.

Tất nhiên là hiện giờ chuơng trình phải tin vào người làm, nhưng cần bẫy nhưng lỗi ngoài ý muốn nếu có thể xử lý được
 
Các đối tượng Selection, Range, và Bookmark trong Word có thuộc tính End và Start là số nguyên để chỉ vị trí tuyệt đối (theo toàn bộ tài liệu) của văn bản mà nó quản lý.
Ví dụ sau cho vị trí cuối cùng của tài liệu
ActiveDocument.Range.End

Ví dụ sau cho 2 số 0
Selection.HomeKey Unit:=wdStory
Debug.Print Selection.Start
Debug.Print Selection.End

Ví dụ sau là câu trả lời cho câu hỏi của tôi trước đây ("TenBM" là tên 1 Bookmark đã có)
Set B1 = ActiveDocument.Bookmarks("TenBM")
PosBM=B1.start
PosSelection= Selection.Start
If PosSelection = PosBM Then
Debug.Print "Trung nhau"
elseif PosSelection < PosBM
Debug.Print "BM sau"
else
Debug.Print "BM truoc"
End If

Tất nhiên nếu yêu cầu khác như thuộc tính End thì sẽ phức tạp hơn.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom