Giúp sửa lỗi code vba trong word (1 người xem)

Liên hệ QC

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

xuanlinh91

Thành viên mới
Tham gia
5/4/10
Bài viết
23
Được thích
0
Em đang làm một tiện ích vba trên word với mục đích như sau


Với một file word có lời bài hát và hợp âm thì có 3 dạng như sau


Dạng 1:




Từng ngày dài [Dm] còn lại một mình nơi đây [F]
Nhìn cánh chim [C] bay ngang thấp thoáng trời xa [Dm]
Lòng ngậm ngùi [Dm] về một cuộc tình đã lỡ [F]
Tình đã bay [C] theo những [A7] cánh chim về đâu [Dm][A7]







Dạng 2


C G
Ngồi giữa đêm vắng, nguyện cầu em được vui
Am G(Em)
Ở bên nơi ấy em sẽ ko buồn
F C
Dù anh vẫn biết người ta ko yêu ai
Dm G
Nhưng lòng anh đau chẳng thể nói ra
C G









Dạng3:






Am---------------------G----------------------F---------------------G-------Am
Tình yêu đôi lúc không cùng cảm giác yêu thương từ hai người
--------------------G----------------F---------------G--------Am
Dù cho hạnh phúc em chọn là ai đâu phải anh!
----------------------------G--------------F--------------G-----------------Am
Chỉ cần em nói em buồn anh sẽ đến bên em để nghe tâm sự của em
---------G------------------F-------G--------
Dù cho con tim này vỡ nát.







Em muốn viết tiện ích dịch giọng cho bài hát theo số cung yêu cầu ( nhạc lý ) Ví dụ từ tông Am dịch lên 1 cung là tông Bm


Tức là muốn thay thứ các kí tự Am, G, F trong các dòng trên thành các kí tự khác như ý muốn




Em sử dụng thuật toán bằng cách lặp lần lượt qua từng kí tự, với trường hợp 1 em lặp khi gặp kí tự "[" thì sẽ thay thế kí tự tiếp theo nó




Với trường hợp 3 thì em xử lí theo thuật toán: Lặp lần lươt qua các kí tự, Nếu gặp các kí tự "G", "A"....thì kiểm tra tiếp kí tự theo sau nó, nếu là các kí tự như "m", "7", hoặc "--" thì sẽ xử lí nó theo yêu cầu, không thì bỏ qua




Trường hợp 1 thì e giải quyết ngon lành, còn trường hợp 3 thì lại bị lỗi ở điều kiện mà e chưa hiểu tại sao lỗi, trường hợp 2 thì e dùng chung code với 3 vì chỉ cần thay "-" bằng " ".




Vậy mong mọi người góp ý và giúp e sửa lỗi, em xin cảm ơn






Đây là code của em








Mã:
Public Sub dichgiong1()
Dim doan As Paragraph
Dim mang(20) As String
Dim i As Integer
Dim sc As Integer
Dim note As String
Dim check As Integer
mang(0) = "A"
mang(1) = "Bb"
mang(2) = "B"
mang(3) = "C"
mang(4) = "C#"
mang(5) = "D"
mang(6) = "D#"
mang(7) = "E"
mang(8) = "F"
mang(9) = "F#"
mang(10) = "G"
mang(11) = "G#"


sc = InputBox("Hay Nhap Vao So Nua Cung Can Chuyen")
Application.ScreenUpdating = False


For Each doan In ActiveDocument.Paragraphs
   For i = 1 To doan.Range.Characters.Count
        If (doan.Range.Characters(i) = "[") Or (doan.Range.Characters(i) = "(") Then
        note = doan.Range.Characters(i + 1)
        Trim (note)
        UCase (note)
        For j = 0 To 11
            If (mang(j) = note) Then
                check = j + sc
                If (check > 11) Then check = j - (12 - sc)
                note = mang(check)
                doan.Range.Characters(i + 1).Text = note
                Exit For
             End If
        Next j
       
       End If
   Next i
Next doan
Application.ScreenUpdating = True
MsgBox "Da Hoan Thanh"
End Sub
Mã:
Public Sub dichgiongcham()
Call dichgiong2(".")
End Sub
Mã:
Public Sub dichgionggachngang()
Call dichgiong2("-")
End Sub
Mã:
Public Sub dichgiong2(kitu As String)
Dim doan As Paragraph
Dim mang(20) As String
Dim i As Integer
Dim sc As Integer
Dim note As String
Dim check As Integer
Dim daucham As String
Dim sokitu As Integer
Dim tong As Integer
Dim k As Integer


mang(0) = "A"
mang(1) = "Bb"
mang(2) = "B"
mang(3) = "C"
mang(4) = "C#"
mang(5) = "D"
mang(6) = "D#"
mang(7) = "E"
mang(8) = "F"
mang(9) = "F#"
mang(10) = "G"
mang(11) = "G#"


sc = InputBox("Hay Nhap Vao So Cung Can Chuyen")
sokitu = 0
k = 0
Application.ScreenUpdating = True


For Each doan In ActiveDocument.Paragraphs
            
        For i = 1 To doan.Range.Characters.Count
            If ((doan.Range.Characters(i) = "A") Or (doan.Range.Characters(i) = "B") Or (doan.Range.Characters(i) = "C") Or (doan.Range.Characters(i) = "D") Or (doan.Range.Characters(i) = "E") Or (doan.Range.Characters(i) = "F") Or (doan.Range.Characters(i) = "G") Or (doan.Range.Characters(i) = "A#") _
               Or (doan.Range.Characters(i) = "C#") Or (doan.Range.Characters(i) = "D#") Or (doan.Range.Characters(i) = "F#") Or (doan.Range.Characters(i) = "G#")) Then
                If ((doan.Range.Characters(i + 1) = "b") Or (doan.Range.Characters(i + 1) = "7") Or (doan.Range.Characters(i + 1) = "m") Or (doan.Range.Characters(i + 1) = kitu)) Then
                         note = doan.Range.Characters(i)
                         UCase (note)
                         For j = 0 To 11
                             If (mang(j) = note) Then
                                 check = j + sc
                                 If (check > 11) Then check = j - (12 - sc)
                                 note = mang(check)
                                 doan.Range.Characters(i).Text = note
                                 Exit For
                            End If
                         Next j
             End If
                End If
        Next i
            
Next
Application.ScreenUpdating = True


MsgBox "Da Hoan Thanh"
End Sub
 
Web KT

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

Back
Top Bottom