Nhờ các bác viết code đánh số phiếu, mỗi phiếu là 1 tờ A4, số phiếu nằm trong Shaper với ạ. Em cảm ơn!

Liên hệ QC

trungtamcnc

Thành viên hoạt động
Tham gia
5/4/10
Bài viết
124
Được thích
9
Em chọn các Shaper bằng các ghi Marco thì thấy chỉ có lệnh: ActiveDocument.Shapes.Range(Array(" 90")).Select
Khi chạy chọn được mỗi cái Shaper số 1.
Em gửi file mẫu và file sản phẩm muốn có. Cảm ơn các bác rất nhiều ạ!
 

File đính kèm

  • Desktop.rar
    34.5 KB · Đọc: 4
Tức trong tập tin Word đã có sẵn vd. 3 (10) shape, mỗi shape ở 1 trang? Thế các số 120001, 120002, 120003, ... lấy từ đâu? Từ trên trời? Quay xổ số? Thế từ đâu biết được vd. 120001 chèn vào shape ở trang 1 còn 120003 chèn vào trang 3 mà không phải ngược lại? Tung đồng xu?

Hỏi hay đố có thưởng vậy bạn? Hỏi mà không muốn nhọc công, muốn nghĩ ít, viết ít, giữ sức?
 
Tức trong tập tin Word đã có sẵn vd. 3 (10) shape, mỗi shape ở 1 trang? Thế các số 120001, 120002, 120003, ... lấy từ đâu? Từ trên trời? Quay xổ số? Thế từ đâu biết được vd. 120001 chèn vào shape ở trang 1 còn 120003 chèn vào trang 3 mà không phải ngược lại? Tung đồng xu?

Hỏi hay đố có thưởng vậy bạn? Hỏi mà không muốn nhọc công, muốn nghĩ ít, viết ít, giữ sức?
Cảm ơn bác đã quan tâm. Các số 120001.. sẽ được đánh lần lượt từ đầu văn bản. Còn sau này em sẽ cho tùy biến đánh từ số bao nhiêu ạ!
 
Cảm ơn bác đã quan tâm. Các số 120001.. sẽ được đánh lần lượt từ đầu văn bản. Còn sau này em sẽ cho tùy biến đánh từ số bao nhiêu ạ!
Bạn không hiểu gì cả. Tại sao là 120001 mà không là 113̃́78, 11379, ...
Nếu là bắt đầu từ 120001 ở trang 1, rồi cứ mỗi trang tiếp theo tăng thêm 1 thì nói rõ ra ngay từ bài 1.

Mã:
Sub danh_so()
Const START = 120000
Dim shp As Shape, k As Long
    For Each shp In ThisDocument.Shapes
        shp.Select
        k = Selection.Information(wdActiveEndPageNumber)
        shp.TextFrame.TextRange.Text = "S" & ChrW(7889) & " phi" & ChrW(7871) & "u: " & START + k
    Next
End Sub
 
Bạn không hiểu gì cả. Tại sao là 120001 mà không là 113̃́78, 11379, ...
Nếu là bắt đầu từ 120001 ở trang 1, rồi cứ mỗi trang tiếp theo tăng thêm 1 thì nói rõ ra ngay từ bài 1.

Mã:
Sub danh_so()
Const START = 120000
Dim shp As Shape, k As Long
    For Each shp In ThisDocument.Shapes
        shp.Select
        k = Selection.Information(wdActiveEndPageNumber)
        shp.TextFrame.TextRange.Text = "S" & ChrW(7889) & " phi" & ChrW(7871) & "u: " & START + k
    Next
End Sub
Cảm ơn bác rất nhiều.
 
Cảm ơn bác rất nhiều.
Bạn không mô tả kỹ thôi nên tôi viết code như thế. Nếu chỉ cần đánh số liên tiếp trong văn bản nhưng không theo thứ tự trang, vd.
trang 1 -> 120002
trang 2 -> 120003
trang 3 -> 120001

thì bạn có thể thử code
Mã:
Sub danh_so()
Const START = 120000
Dim shp As Shape, k As Long
    For Each shp In ThisDocument.Shapes
        k = k + 1
        shp.TextFrame.TextRange.Text = "S" & ChrW(7889) & " phi" & ChrW(7871) & "u: " & START + k
    Next
End Sub

Thậm chí nếu các số theo đúng như thứ tự trang như ban đầu cũng không cần SELECT - tôi viết ban đêm, nghĩ gì thì viết luôn không phân tích sâu.
Mã:
Sub danh_so1()
Const START = 120000
Dim shp As Shape, k As Long
    For Each shp In ThisDocument.Shapes
        k = shp.TextFrame.TextRange.Information(wdActiveEndPageNumber)
        shp.TextFrame.TextRange.Text = "S" & ChrW(7889) & " phi" & ChrW(7871) & "u: " & START + k
    Next
End Sub
 
Bạn không mô tả kỹ thôi nên tôi viết code như thế. Nếu chỉ cần đánh số liên tiếp trong văn bản nhưng không theo thứ tự trang, vd.
trang 1 -> 120002
trang 2 -> 120003
trang 3 -> 120001

thì bạn có thể thử code
Mã:
Sub danh_so()
Const START = 120000
Dim shp As Shape, k As Long
    For Each shp In ThisDocument.Shapes
        k = k + 1
        shp.TextFrame.TextRange.Text = "S" & ChrW(7889) & " phi" & ChrW(7871) & "u: " & START + k
    Next
End Sub

Thậm chí nếu các số theo đúng như thứ tự trang như ban đầu cũng không cần SELECT - tôi viết ban đêm, nghĩ gì thì viết luôn không phân tích sâu.
Mã:
Sub danh_so1()
Const START = 120000
Dim shp As Shape, k As Long
    For Each shp In ThisDocument.Shapes
        k = shp.TextFrame.TextRange.Information(wdActiveEndPageNumber)
        shp.TextFrame.TextRange.Text = "S" & ChrW(7889) & " phi" & ChrW(7871) & "u: " & START + k
    Next
End Sub
Cảm ơn bác cho em mở mang kiến thức. Với mỗi trang có 1 Shaper thì chạy tốt. Em nhờ bác viết code đánh số hộ em trong tài liệu sau: Trang 1 tại ô số phiếu là "Số phiếu: 120001" ứng với học sinh thứ nhất, trang 2 tại ô số phiếu là "Số phiếu: 120002" ứng với học sinh thứ hai.
 

File đính kèm

  • DanhsachPhieuDangKyTrangBia_lop_12A1_gui.docx
    150.5 KB · Đọc: 3
Cảm ơn bác cho em mở mang kiến thức. Với mỗi trang có 1 Shaper thì chạy tốt. Em nhờ bác viết code đánh số hộ em trong tài liệu sau: Trang 1 tại ô số phiếu là "Số phiếu: 120001" ứng với học sinh thứ nhất, trang 2 tại ô số phiếu là "Số phiếu: 120002" ứng với học sinh thứ hai.
Biết ngay mà. Lúc đầu mỗi trang chỉ có 1 shape, bây giờ nhỏ giọt thêm thông tin.
Mã:
Sub danh_so()
Const START = 120000
Dim shp As Shape, k As Long
    For Each shp In ThisDocument.Shapes
        shp.Select
        k = Selection.Information(wdActiveEndPageNumber)
        If shp.Type = msoAutoShape Then shp.TextFrame.TextRange.Text = "S" & ChrW(7889) & " phi" & ChrW(7871) & "u: " & START + k
    Next
End Sub
 
Chào bác @batman1 : Mỗi lần xuất dữ liệu từ phần mềm của BGD: Hình thức thì giống nhau nhưng nền tảng lại khác. Em đã viết được code đánh số phiếu cho một trong các kiểu đó. Nhưng code quá dài. Bác có thể bớt chút thời gian sửa lại em với. Em cảm ơn.
 

File đính kèm

  • Sở GD gửi GPE.docx
    80.9 KB · Đọc: 2
Chào bác @batman1 : Mỗi lần xuất dữ liệu từ phần mềm của BGD: Hình thức thì giống nhau nhưng nền tảng lại khác. Em đã viết được code đánh số phiếu cho một trong các kiểu đó. Nhưng code quá dài. Bác có thể bớt chút thời gian sửa lại em với. Em cảm ơn.

Sửa gì hả bạn? Bạn có đính kèm code nào đâu? Tập tin docx không thể chứa code.
 
Xin lỗi bác, em gửi nhầm ạ! Đây ạ.
Bạn phải mô tả chứ. Bạn muốn tôi ngồi phân tích code của bạn rồi đoán ý bạn? Thế sao bạn không nói ngay cái ý đó mà bắt tôi nhọc công đoán?
Bạn đi nhờ mà làm thế thì chịu.
Muốn làm gì thì mô tả kỹ. Thậm chí lấy ví dụ để dễ mô tả.

Khó hay dễ đoán thì lần sau bạn nên có chút mô tả. Đừng bắt người khác phải mất thêm vài giây không cần thiết. Những gì bạn có thể nói được thì phải nói ra, đừng bắt người khác phải đoán. Nguyên tắc là thế.

Tôi nhìn qua thì bạn đã dùng công cụ Find để tìm nội dung "Số phiếu:" rồi thay chúng bằng "C&u". Rồi sau đó lại tìm "C&u" rồi biến chúng lần lượt thành vd. "Số phiếu: 2000", "Số phiếu: 2001", ...

Như thế là không cần thiết. Tìm "Số phiếu:" rồi biến ngay thành "Số phiếu: 2000", "Số phiếu: 2001", ..., bỏ qua trung gian "C&u".

Tôi đề xuất code sau khi lược bỏ cả những phần rườm rà như sau. Đó chỉ là đề xuất của tôi, người khác có thể có đề xuất của họ.

Mã:
Sub Danhsophieu()
Dim start As Long, msg As String
    start = InputBox("Nhap ma phieu bat dau:", "Thong bao", "1")
    Selection.End = 0
    With Selection.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "S" & ChrW(7889) & " phi" & ChrW(7871) & "u:"
        Do While .Execute
            Selection.Text = Selection.Text & " " & start
            Selection.Collapse wdCollapseEnd
            start = start + 1
        Loop
    End With
    msg = ChrW(272) + ChrW(227) + " " + ChrW(273) + ChrW(225) + "nh xong s" + ChrW(7889) + " phi" + ChrW(7871) + "u!"
    Application.Assistant.DoAlert "Th" & ChrW(244) & "ng b" & ChrW(225) & "o", msg, 0, 4, 0, 0, 0
End Sub
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom