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
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