XIN ANH CHỊ GIÚP ĐỠ HƯỚNG DẪN CHUYỂN VĂN BẢN THÀNH GIỌNG NÓI TRONG EXCEL Ạ. (1 người xem)

Liên hệ QC

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

Tôi tuân thủ nội quy khi đăng bài

only22222

Thành viên mới
Tham gia
14/5/25
Bài viết
11
Được thích
0
Chào anh chị ạ, Em có bảng 1 là bảng gốc, em muốn khi em điền Mã SP vào bảng 2 ( ô H3 ) thì ở cột I ( ô I3 ) bảng 2 sẽ tự động hiện ra tên sản phẩm tương với với Mã SP và đọc phát được ra loa tên sản phẩm đó ( Tên sản phẩm chuyển thành giọng nói trong excel). Mong anh chị có thể giúp đỡ. Rất cảm ơn anh chị giúp đỡ ạ.
 

File đính kèm

Chào anh chị ạ, Em có bảng 1 là bảng gốc, em muốn khi em điền Mã SP vào bảng 2 ( ô H3 ) thì ở cột I ( ô I3 ) bảng 2 sẽ tự động hiện ra tên sản phẩm tương với với Mã SP và đọc phát được ra loa tên sản phẩm đó ( Tên sản phẩm chuyển thành giọng nói trong excel). Mong anh chị có thể giúp đỡ. Rất cảm ơn anh chị giúp đỡ ạ.
Để mà nói được nữa thì có lẽ rời sang box lập trình chứ hàm chắc khó khả thi
 
Chào anh chị ạ, Em có bảng 1 là bảng gốc, em muốn khi em điền Mã SP vào bảng 2 ( ô H3 ) thì ở cột I ( ô I3 ) bảng 2 sẽ tự động hiện ra tên sản phẩm tương với với Mã SP và đọc phát được ra loa tên sản phẩm đó ( Tên sản phẩm chuyển thành giọng nói trong excel). Mong anh chị có thể giúp đỡ. Rất cảm ơn anh chị giúp đỡ ạ.
Này hay đó. Mấy người bán rong có thể lựa chọn sản phẩm bán từng khu vực cho phù hợp, rồi tích chọn, vậy là loa sẽ đọc món hàng cần bán :D
 
Vụ này không khó. Nếu không muốn kết nối internet để tạo giọng đọc trực tiếp cũng được hoặc tạo giọng đọc từng sản phẩm tải về, lưu rồi phát lại.
 
Mình nhớ đơt chống dịch Covid19 có bạn nào đó đã tạo file Excel
 
Để mà nói được nữa thì có lẽ rời sang box lập trình chứ h
k có hàm hay công thức chuyển van bản thành âm thanh tiếng việt ạ ?
Vụ này không khó. Nếu không muốn kết nối internet để tạo giọng đọc trực tiếp cũng được hoặc tạo giọng đọc từng sản phẩm tải về, lưu rồi
xin clip hướng dẫn được k ạ ? e chỉ muốn khi điền mã sản phẩm thì sẽ có loa đọc ra tên sản phẩm cho bà, cho mẹ ở nhà dễ bán hàng ạ.
Bài đã được tự động gộp:

Này hay đó. Mấy người bán rong có thể lựa chọn sản phẩm bán từng khu vực cho phù hợp, rồi tích chọn, vậy là loa sẽ đọc món hàng cần bán :D
đúng ý em ạ, có cách nào đọc được như thế k ạ ?
Bài đã được tự động gộp:

Mình nhớ đơt chống dịch Covid19 có bạn nào đó đã tạo file Excel
Do kiến thức của em hạn hẹp lên cũng chỉ mới chỉ dừng lại ở ý tưởng thôi, em vừa bấm xem bài viết nhưng chưa hiểu cách làm. Xin được hướng dẫn ạ. Em cảm ơn.
 
Lần chỉnh sửa cuối:
Chào anh chị ạ, Em có bảng 1 là bảng gốc, em muốn khi em điền Mã SP vào bảng 2 ( ô H3 ) thì ở cột I ( ô I3 ) bảng 2 sẽ tự động hiện ra tên sản phẩm tương với với Mã SP và đọc phát được ra loa tên sản phẩm đó ( Tên sản phẩm chuyển thành giọng nói trong excel). Mong anh chị có thể giúp đỡ. Rất cảm ơn anh chị giúp đỡ ạ.
Chắc bạn đã xem bài đáp án của anh Batman1 rồi.
Tôi chỉ mượn file của anh ấy để làm bài cho bạn.
1- Dùng hàm Vlookup để Tham chiểu cột H sang bảng 1 để lấy kết quả vào cột I
I3=VLOOKUP(H3;B3:C86;2;0) ---> Copy cho các ô còn lại.
2- Dùng code bắt sự kiện thay đổi ô H3:H....
3- Sửa lại code trong sub PlayInSequence(module2)
Chạy trên máy tôi thì OK, Còn trên máy bạn thì hy vọng cũng ổn.
Xem file đính kèm
Thử thay đổi mã ỏ cột H và xem kết quả có thấy nói không?
 

File đính kèm

Vừa tải file về trình diệt virus của Windows nó chặn luôn
Vấn đề là bạn có tin tưởng tập tin hay không. Nếu bạn không tin tưởng thì dù Windows không cảnh báo thì bạn vẫn không tải về. Còn khi tin tưởng thì dù có cảnh báo thì bạn vẫn mở.

Bạn thao tác như sau:
File -> Options -> Trust Center -> Truster Center Settings … Protected View -> bỏ chọn tất cả -> OK -> OK
Lúc này mới mở tập tin đã tải về.
 
Vấn đề là bạn có tin tưởng tập tin hay không. Nếu bạn không tin tưởng thì dù Windows không cảnh báo thì bạn vẫn không tải về. Còn khi tin tưởng thì dù có cảnh báo thì bạn vẫn mở.
File của bác HUONGHCKT tôi vừa tải về thì cái trình Microsoft Defender mặc định của Windows nó xóa luôn, lấy gì mà mở đây :D.. haizzaa..
Đính kèm là file gốc của bác batman1, các bạn tải xem có bị chặn không nhe.
 

File đính kèm

Chào anh chị ạ, Em có bảng 1 là bảng gốc, em muốn khi em điền Mã SP vào bảng 2 ( ô H3 ) thì ở cột I ( ô I3 ) bảng 2 sẽ tự động hiện ra tên sản phẩm tương với với Mã SP và đọc phát được ra loa tên sản phẩm đó ( Tên sản phẩm chuyển thành giọng nói trong excel). Mong anh chị có thể giúp đỡ. Rất cảm ơn anh chị giúp đỡ ạ.
Bạn xem thử file này nhé. Đọc offiline.
 

File đính kèm

Thành thật xin lỗi các thành viên đã tải file của tôi gửi cho bạn chủ thót.
Do laptop của tôi bị hư loa nên tôi làm và chuyển (bằng Zalo) qua 1 laptop khác để thử và dùng máy ấy để gửi file trả lời nên không kiểm soát được các hệ lụy liên quan xảy ra.
Thực ra file của anh @batman1 tôi giữ nguyên code chỉ có thay mỗi một vài dòng của Sub PlayInSequence(ByVal Rng As Range)
từ
Mã:
.......
With Sheet1
            media = .Range("B5:B" & lastRow + 1).Value
            doandau = .Range("A4").Value
            doancuoi = .Range("A5").Value
            lap = .Range("C5").Value
            time_repeat = .Range("D5").Value
            If time_repeat < 2 Then time_repeat = 2
        End With
.......
Thành
Mã:
.....
With Sh
            doandau = Rng '.Range("I3").Value
            lap = .Range("K1").Value
            time_repeat = .Range("M1").Value
            If time_repeat < 2 Then time_repeat = 2
        End With
......
Tôi cũng Không có đủ năng lực trình độ để hiểu được code trong file gốc (nhất là mấy cái hàm API)
Một lần nữa Tôi chân thành xin lỗi vì đã làm phiền các bạn.
 
Thành thật xin lỗi các thành viên đã tải file của tôi gửi cho bạn chủ thót.
Do laptop của tôi bị hư loa nên tôi làm và chuyển (bằng Zalo) qua 1 laptop khác để thử và dùng máy ấy để gửi file trả lời nên không kiểm soát được các hệ lụy liên quan xảy ra.
Thực ra file của anh @batman1 tôi giữ nguyên code chỉ có thay mỗi một vài dòng của Sub PlayInSequence(ByVal Rng As Range)
từ
Mã:
.......
With Sheet1
            media = .Range("B5:B" & lastRow + 1).Value
            doandau = .Range("A4").Value
            doancuoi = .Range("A5").Value
            lap = .Range("C5").Value
            time_repeat = .Range("D5").Value
            If time_repeat < 2 Then time_repeat = 2
        End With
.......
Thành
Mã:
.....
With Sh
            doandau = Rng '.Range("I3").Value
            lap = .Range("K1").Value
            time_repeat = .Range("M1").Value
            If time_repeat < 2 Then time_repeat = 2
        End With
......
Tôi cũng Không có đủ năng lực trình độ để hiểu được code trong file gốc (nhất là mấy cái hàm API)
Một lần nữa Tôi chân thành xin lỗi vì đã làm phiền các bạn.
chào bạn, vì mình vẫn còn ngu ngơ về VBA lên bạn có thể đính kèm file có cả code luôn k ạ ?
Chắc bạn đã xem bài đáp án của anh Batman1 rồi.
Tôi chỉ mượn file của anh ấy để làm bài cho bạn.
1- Dùng hàm Vlookup để Tham chiểu cột H sang bảng 1 để lấy kết quả vào cột I
I3=VLOOKUP(H3;B3:C86;2;0) ---> Copy cho các ô còn lại.
2- Dùng code bắt sự kiện thay đổi ô H3:H....
3- Sửa lại code trong sub PlayInSequence(module2)
Chạy trên máy tôi thì OK, Còn trên máy bạn thì hy vọng cũng ổn.
Xem file đính kèm
Thử thay đổi mã ỏ cột H và xem kết quả có thấy nói không?
chào bạn, rất cảm ơn bạn vì giúp đỡ mình, mình có tải file về nhưng hiện virut, tự động xóa,mình k bấm lưu được ( ảnh 1 ), mình còn gà excle lên k biết làm thế nào, rất xin lỗi bạn.
Mình có 1 file do mình lên ý tưởng sẵn, vì mình mới tìm hiểu VBA lên năng lực độ hiểu biết có hạn. Nhưng các cụ có câu "đi 1 ngày đàng học 1 sàng khôn", rất mong bạn có thể dành chút thời gian giúp đỡ, hướng dẫn mình mở mang thêm kiến thức . Rất hy vọng bạn làm luôn trong file sẵn của mình, và Nếu có thể mong bạn quay clip hướng dẫn, rất xin lỗi vì đã đòi hỏi ở bạn quá nhiều, nhưng thực lòng mình rất muốn học hỏi, Cảm ơn bạn rất rất nhiều.
Trong file (2) mình có bảng 1 là bảng gốc, mình muốn khi mình điền Mã SP vào bảng 2 ( ô H3 ) thì ở cột I ( ô I3 ) bảng 2 sẽ tự động hiện ra tên sản phẩm tương với với Mã SP và đọc phát được ra loa tên sản phẩm đó ( Tên sản phẩm chuyển thành giọng nói trong excel). Mong hồi âm sớm từ bạn,Một lần nữa, mình cảm ơn bạn!
anh1.png
Bài đã được tự động gộp:

Bạn xem thử file này nhé. Đọc of
cảm ơn sự giúp đỡ của bạn. Nhưng bạn cho mình hỏi bấm vào đâu để file nói vậy ạ ? bạn có thể dành thời gian hướng dẫn mình một chút được không ?
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn xem thử file này nhé. Đọc offiline.
file này của e
Thì như bạn yêu cầu là khi gõ mã SP ở H3 thì nó nói thôi.

Cảm ơn bạn. Mình vào file bạn gửi, gõ mã SP nhưng k thấy loa phát ra âm thanh tên sản phẩm.
Mình muốn nói lại ý tưởng của mình một chút:
Ở file PHÁT ÂM THANH SẢN PHẨM THEO MÃ SP mình đang đính kèm bên dưới, lấy bảng 1 là bảng gốc, mình muốn khi mình điền mã SP vào ( BẢNG 2 ( BẢNG KẾT QUẢ MONG MUỐN NHẬN LẠI )), thì tên sản phẩm tương ứng sẽ tự động hiện ra, và LOA tự động đọc ra âm thanh Tên sản phẩm ấy.
Trong file đính kèm mình có ghi ví dụ mà mình mong muốn nhận lại. Bạn có thể dành chút thời gian xem file, hướng dẫn và thực hành trực tiếp vào file được k?
Rất mong được học hỏi kiến thức và nhận được sự trợ giúp từ những bậc tiền bối đi trước giống bạn để mình được mở mang kiến thức . Mình cảm ơn rất nhiều.
 

File đính kèm

file này của e


Cảm ơn bạn. Mình vào file bạn gửi, gõ mã SP nhưng k thấy loa phát ra âm thanh tên sản phẩm.
Mình muốn nói lại ý tưởng của mình một chút:
Ở file PHÁT ÂM THANH SẢN PHẨM THEO MÃ SP mình đang đính kèm bên dưới, lấy bảng 1 là bảng gốc, mình muốn khi mình điền mã SP vào ( BẢNG 2 ( BẢNG KẾT QUẢ MONG MUỐN NHẬN LẠI )), thì tên sản phẩm tương ứng sẽ tự động hiện ra, và LOA tự động đọc ra âm thanh Tên sản phẩm ấy.
Trong file đính kèm mình có ghi ví dụ mà mình mong muốn nhận lại. Bạn có thể dành chút thời gian xem file, hướng dẫn và thực hành trực tiếp vào file được k?
Rất mong được học hỏi kiến thức và nhận được sự trợ giúp từ những bậc tiền bối đi trước giống bạn để mình được mở mang kiến thức . Mình cảm ơn rất nhiều.
Cũng file này bạn chỉ cần đổi sự kiện từ cell thay đổi thành cột là được rồi.

JavaScript:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("H:H")) Is Nothing Then DocSP_Offline
End Sub

Chú ý:
- File tôi gửi ở trên là trong file zip, có kèm theo hàng loạt file âm thanh đi kèm (nằm cùng folder với file Excel), nếu bạn thay đổi đường dẫn không có file âm thanh thì lấy gì nó đọc??
- Trong file tôi cũng có đoạn code tương tác với Google để lấy giọng đọc online luôn, bạn chỉ cần đổi cái hàm DocSP_Offline() thành DocSanPham_online là được rồi. Tôi không thích dùng cách này vì cứ phải kết nối rồi tải giọng đọc hoài nếu nhập một mã SP nhiều lần, chưa kể phải có internet.

Screenshot 2025-05-20 at 20.55.13.png
 
cảm ơn sự giúp đỡ của bạn, nhưng ý tưởng của mình có hơi khác 1 chút so vớ file anh batman.
Cũng file này bạn chỉ cần đổi sự kiện từ cell thay đổi thành cột là được rồi.

JavaScript:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("H:H")) Is Nothing Then DocSP_Offline
End Sub

Chú ý:
- File tôi gửi ở trên là trong file zip, có kèm theo hàng loạt file âm thanh đi kèm (nằm cùng folder với file Excel), nếu bạn thay đổi đường dẫn không có file âm thanh thì lấy gì nó đọc??
- Trong file tôi cũng có đoạn code tương tác với Google để lấy giọng đọc online luôn, bạn chỉ cần đổi cái hàm DocSP_Offline() thành DocSanPham_online là được rồi. Tôi không thích dùng cách này vì cứ phải kết nối rồi tải giọng đọc hoài nếu nhập một mã SP nhiều lần, chưa kể phải có internet.
cảm ơn bạn giúp đỡ, do mình mới tìm tòi học hỏi lên dẫn đến mất nhiều thời gian mà vẫn chưa làm đúng T.T, mình còn ngu ngơ quá, rất xin lỗi bạn. Bạn cho mình hỏi, đoạn code trên có tiếp tục hiện tự động ra tên sản phẩm và loa tự động phát âm thanh sản phầm ở ô i4,i5,i6,i7,i..... khi mình điền mã sp vào các ô tiếp theo h4,h5,h6,h....k ạ ? mình mong muốn khi mình điền mã sp vào các ô tiếp theo thì đoạn code trên vẫn hoạt động được ạ. Cảm ơn bạn rất nhiều
Bài đã được tự động gộp:

cảm ơn sự giúp đỡ của bạn, nhưng ý tưởng của mình có hơi khác 1 chút so vớ file anh batman.

cảm ơn bạn giúp đỡ, do mình mới tìm tòi học hỏi lên dẫn đến mất nhiều thời gian mà vẫn chưa làm đúng T.T, mình còn ngu ngơ quá, rất xin lỗi bạn. Bạn cho mình hỏi, đoạn code trên có tiếp tục hiện tự động ra tên sản phẩm và loa tự động phát âm thanh sản phầm ở ô i4,i5,i6,i7,i..... khi mình điền mã sp vào các ô tiếp theo h4,h5,h6,h....k ạ ? mình mong muốn khi mình điền mã sp vào các ô tiếp theo thì đoạn code trên vẫn hoạt động được ạ. Cảm ơn bạn rất nhiều
xin lỗi vì đòi hỏi ở bạn hơi nhiều, vì mình còn là mầm non mới nhú, còn ngu ngơ chưa hiểu, mong bạn kiên nhẫn đừng cáu với mình, :'(
 
cảm ơn bạn giúp đỡ, do mình mới tìm tòi học hỏi lên dẫn đến mất nhiều thời gian mà vẫn chưa làm đúng T.T, mình còn ngu ngơ quá, rất xin lỗi bạn. Bạn cho mình hỏi, đoạn code trên có tiếp tục hiện tự động ra tên sản phẩm và loa tự động phát âm thanh sản phầm ở ô i4,i5,i6,i7,i..... khi mình điền mã sp vào các ô tiếp theo h4,h5,h6,h....k ạ ? mình mong muốn khi mình điền mã sp vào các ô tiếp theo thì đoạn code trên vẫn hoạt động được ạ. Cảm ơn bạn rất nhiều
- Bạn cứ dùng cái file mới gửi của bạn và copy các file âm thanh tôi gửi trong file zip vào cùng folder rồi chạy đi sẽ thấy. Tôi chỉ thiết kế theo file của bạn chứ không theo kiểu của bác batman1 nhé. (Sau khi sửa code tôi đã nói ở trên). Bạn muốn nhập bất kỳ dòng nào trong cột H cũng được, miễn là giá trị nhập phải trùng với mã hàng bảng 1. ĐÂY LÀ CÁCH ĐỌC OFFLINE. Đọc dựa trên các file âm thanh đã tải sẳn.
- Còn cách đọc ONLINE là gửi chuỗi cần đọc lên Google để tạo giọng đọc rồi tải về --> đọc. Bắt buộc phải có internet. Mỗi lần đọc là mỗi lần tải (đối với tôi là không hiệu quả). Nếu bạn muốn dùng cách này thì sửa lại chút code.
Thay thế code của hàm DocSanPham_Online() như bên dưới:
JavaScript:
Sub DocSanPham_Online(txt As String)
    On Error GoTo EH
  
    Call GetTTS(txt)
  
    Dim n As Integer    'sô lân lap lai
    n = 2
    Do While n > 0
        mciSendString "open """ & strTempFileName, vbNullString, 0, 0
        mciSendString "play " & strTempFileName & " wait", vbNullString, 0, 0
        mciSendString "close " & strTempFileName, vbNullString, 0, 0
        DoEvents
        n = n - 1
    Loop

EH_Exit:
    Exit Sub

EH:
    MsgBox "Co loi phat sinh." & vbCrLf _
         & "Mã loi: " & Err.Number & vbCrLf _
         & "Noi dung: " & Err.Description, vbCritical, "Thông báo"
    Resume EH_Exit

End Sub

Thay thế code ở sự kiện Worksheet_change:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("H:H")) Is Nothing Then DocSanPham_Online (Target.Offset(0, 1).Value)
End Sub

Xong.
 

File đính kèm

Lần chỉnh sửa cuối:
Cũng file này bạn chỉ cần đổi sự kiện từ cell thay đổi thành cột là được rồi.

JavaScript:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("H:H")) Is Nothing Then DocSP_Offline
End Sub

Chú ý:
- File tôi gửi ở trên là trong file zip, có kèm theo hàng loạt file âm thanh đi kèm (nằm cùng folder với file Excel), nếu bạn thay đổi đường dẫn không có file âm thanh thì lấy gì nó đọc??
- Trong file tôi cũng có đoạn code tương tác với Google để lấy giọng đọc online luôn, bạn chỉ cần đổi cái hàm DocSP_Offline() thành DocSanPham_online là được rồi. Tôi không thích dùng cách này vì cứ phải kết nối rồi tải giọng đọc hoài nếu nhập một mã SP nhiều lần, chưa kể phải có internet.

View attachment 308283
xin lỗi vì đòi hỏi ở bạn hơi nhiều, vì mình mới tìm hiểu về VBA, có ý tưởng mà chưa biết cách làm. Và mặc dù bạn đã rất nhiệt tình giúp đỡ, giải thích, nhưng mình vẫn chưa làm được..... mong bạn kiên nhẫn đừng nỡ cáu mình. Mình cũng k muốn vậy đâu. Vì ý tưởng của mình có hơi chút khác trước,( mình có viết ý tưởng trong file này). Nếu có thể mong bạn dành chút thời gian đọc file, làm trực tiếp vào file mình đính kèm bên dưới. Để mình có thể tổng hợp lại những gì bạn hướng dẫn từ file tổng này, mình muốn code ĐỌC OFFLINE trước, đọc oln với kiến thức ở thời điểm hiện tại này của mình mình chưa giám học, sợ bạn hướng dẫn tăng xông, máu dồn lên não, bạn cáu mình sợ :(. Có thể với tiền bối thì code này dễ dàng, nhưng với người mới học giống mình thì khó, mình cần nhiều thời gian để hiểu. Thật tốt nếu bạn có thể tổng kết lại giúp mình tóm gọn lại trong file này. Rất xin lỗi và cũng rất cảm ơn bạn. Mong bạn đừng cáu mà giúp đỡ mình :(
 

File đính kèm

xin lỗi vì đòi hỏi ở bạn hơi nhiều, vì mình mới tìm hiểu về VBA, có ý tưởng mà chưa biết cách làm. Và mặc dù bạn đã rất nhiệt tình giúp đỡ, giải thích, nhưng mình vẫn chưa làm được..... mong bạn kiên nhẫn đừng nỡ cáu mình. Mình cũng k muốn vậy đâu. Vì ý tưởng của mình có hơi chút khác trước,( mình có viết ý tưởng trong file này). Nếu có thể mong bạn dành chút thời gian đọc file, làm trực tiếp vào file mình đính kèm bên dưới. Để mình có thể tổng hợp lại những gì bạn hướng dẫn từ file tổng này, mình muốn code ĐỌC OFFLINE trước, đọc oln với kiến thức ở thời điểm hiện tại này của mình mình chưa giám học, sợ bạn hướng dẫn tăng xông, máu dồn lên não, bạn cáu mình sợ :(. Có thể với tiền bối thì code này dễ dàng, nhưng với người mới học giống mình thì khó, mình cần nhiều thời gian để hiểu. Thật tốt nếu bạn có thể tổng kết lại giúp mình tóm gọn lại trong file này. Rất xin lỗi và cũng rất cảm ơn bạn. Mong bạn đừng cáu mà giúp đỡ mình :(
File đính kèm ở trên là tôi làm trên file bạn gửi đó.

Nhớ mở loa lên nghe nhé.

 

File đính kèm

Lần chỉnh sửa cuối:
File đính kèm ở trên là tôi làm trên file bạn gửi đó.

Nhớ mở loa lên nghe nhé.

Tiền bối ơi, em làm được rồi ạ, vui lắm lắm luôn. Cảm ơn tiền bối x100 lần ạ. Nhưng trong quá trình làm theo hướng dẫn của tiền bối, em lại thấy có phát sinh nho nhỏ 1 vấn đề, rất mong tiền bối giải đáp giúp ạ. Nội dung thắc mắc em để trong file đính kèm nha tiền bốiiiii ơi

Mong tiền bối chỉ đường dẫn lối. Cảm ơn vì tiền bối vẫn ở đây, vẫn kiên nhẫn giảng giải cho em hiểu. Rất rất cảm ơn tiền bối ạ.(@$%@
 

File đính kèm

Lần chỉnh sửa cuối:
Tiền bối ơi, em làm được rồi ạ, vui lắm lắm luôn. Cảm ơn tiền bối x100 lần ạ. Nhưng trong quá trình làm theo hướng dẫn của tiền bối, em lại thấy có phát sinh nho nhỏ 1 vấn đề, rất mong tiền bối giải đáp giúp ạ. Nội dung thắc mắc em để trong file đính kèm nha tiền bốiiiii ơi

Mong tiền bối chỉ đường dẫn lối. Cảm ơn vì tiền bối vẫn ở đây, vẫn kiên nhẫn giảng giải cho em hiểu. Rất rất cảm ơn tiền bối ạ.(@$%@
0. Nếu có MP3 trên đĩa thì code lấy từ đĩa. Nếu chưa có thì code mới tải về từ internet - code tự chọn Offline hoặc Online.

1. Sửa trong công thức cột I: $B$3:$C$18 thành $B$3:$C$1000

2. Để có thể đọc tên sản phẩm khi nhập dữ liệu mới ở bảng gốc thì phải nhập theo thứ tự cột C xong mới nhập cột B (khi bắn MSP vào cột H thì công thức ở cột I phải tìm được TSP ở cột C), vd. nhập C50 -> nhập B50

3. code mới trong Sheet1. Đọc kỹ các chú thích để hiểu.
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long, dong As Long, filename As String, cell As Range
'    On Error GoTo ErrHandler
    
    If Target.Count > 1 Or Target.Row < 3 Or (Target.Column <> 2 And Target.Column <> 8) Then Exit Sub  ' chi xet cac cell thuoc B hoac H khi dong >= 3
    
    If Target.Column = 2 Then   ' co su thay doi o cot B
        If Target.Offset(0, 1).Value <> "" Then
            lastRow = Me.Range("H" & Rows.Count).End(xlUp).Row  ' dong cuoi o cot H
            Set cell = Me.Range("H3:H" & lastRow).Find(Target.Value, , xlValues, xlWhole, xlByColumns, xlNext)
            If cell Is Nothing Then     '   ma moi nhap trong cot B chua co trong cot H
                dong = lastRow + 1
            Else    '   ma moi nhap trong cot B chua co trong cot H
                dong = cell.Row
            End If
            Me.Range("H" & dong).Value = Target.Value        ' (A) muc dich de say ra su kien Worksheet_Change, lan nay la o cot H -> se doc ma
        End If
    Else    '   su thay doi o cot H. Khi ma duoc nhap tu cot B sang H, de co the doc tieng o cot I thi ten san pham o cot C phai duoc nhap truoc khi nhap ma o cot B
        If Target.Value <> "" Then  '   neu la xoa ma thi khong lam gi
            If CreateObject("Scripting.FileSystemObject").FileExists(ThisWorkbook.Path & "\" & Target.Value & ".mp3") Then     ' da co tap tin MP3
                DocSP_Offline Target.Value
            Else        '   chua co MP3
                strTempFileName = ThisWorkbook.Path & "\" & Target.Value & ".mp3"
                DocSanPham_Online Target.Offset(0, 1).Value     ' tai ve MP3 voi noi dung o cot I va doc
            End If
        End If
    End If
    
'CleanExit:
'    Application.EnableEvents = True
'    Exit Sub
'
'ErrHandler:
'    MsgBox "Đă xay ra loi: " & Err.Description
'    Resume CleanExit
    
    
End Sub

4. Trong module modTextToSpeech sửa thành
Option Explicit

Public strTempFileName As String


Trong Sub GetTTS xóa dòng: strTempFileName = Environ$("temp") & "\translate_tts.mp3"
 
Tiền bối ơi, em làm được rồi ạ, vui lắm lắm luôn. Cảm ơn tiền bối x100 lần ạ. Nhưng trong quá trình làm theo hướng dẫn của tiền bối, em lại thấy có phát sinh nho nhỏ 1 vấn đề, rất mong tiền bối giải đáp giúp ạ. Nội dung thắc mắc em để trong file đính kèm nha tiền bốiiiii ơi

Mong tiền bối chỉ đường dẫn lối. Cảm ơn vì tiền bối vẫn ở đây, vẫn kiên nhẫn giảng giải cho em hiểu. Rất rất cảm ơn tiền bối ạ.(@$%@
Bạn xem file đính kèm. Chỉ code cơ bản thôi, chưa bẫy lỗi gì nhiều. Đây là đọc Offline. Online không thích hợp trong trường hợp này nên tôi không làm.
- Tạo riêng một sheet cho việc lưu mã SP.
- Khi có mã SP mới chưa có file âm thanh thì copy các mã mới đó vào cột E,F rồi bấm nút tạo file.
- Nhớ kết nối internet để tải giọng đọc của chị Google.
Xong.
 

File đính kèm

Bạn xem file đính kèm. Chỉ code cơ bản thôi, chưa bẫy lỗi gì nhiều. Đây là đọc Offline. Online không thích hợp trong trường hợp này nên tôi không làm.
- Tạo riêng một sheet cho việc lưu mã SP.
- Khi có mã SP mới chưa có file âm thanh thì copy các mã mới đó vào cột E,F rồi bấm nút tạo file.
- Nhớ kết nối internet để tải giọng đọc của chị Google.
Xong.
Chào tiền bối ạ, tiền bối ơi em đã làm theo sự hướng dẫn của tiền bối nhưng chỉ có ở đoạn đầu đọc được còn đoạn sau thì k phát ra âm thanh, em đã dành ra hơn 1 ngày ngồi tìm hiểu nhưng vẫn k thể tìm ra lý do tại sao lại vậy. File em đính kèm bên dưới là file em làm ạ, em làm hẳn hơn 1000 dòng cho biết, làm y hệt những gì tiền bối dặn, nhưng mà em chỉ làm được đoạn đầu đọc được thôi. Không biết e nỡ làm sai chỗ nào mà Chỉ thấy file nặng thôi còn đọc âm thanh thì không đọc được. Khó quá tiền bối ạ. Em lại chẳng làm được rồii (@$%@ (@$%@ (@$%@ . Tiền bối ơi tiền bối giải bài tập giúp em được k ạ ? Mặc dù em đã làm y như những gì tiền bối dặn dò nhưng mà vẫn không được, tiền bối giải thích giúp em em sai ở đâu được không ? chứ cả ngày qua em tìm mãi k ra, Em cảm ơn tiền bối rất là nhiều ạ (@$%@(@$%@ ( em có tải cả phần âm thanh lên fodder này mà tải mãi mà k lên nổi em phải xóa bớt đi thì mới tải được lên, File này chỉ còn lại mp3 tên của các hàng thôi tiền bối ạ ) :(
 

File đính kèm

Lần chỉnh sửa cuối:
Chào tiền bối ạ, tiền bối ơi em đã làm theo sự hướng dẫn của tiền bối nhưng chỉ có ở đoạn đầu đọc được còn đoạn sau thì k phát ra âm thanh, em đã dành ra hơn 1 ngày ngồi tìm hiểu nhưng vẫn k thể tìm ra lý do tại sao lại vậy. File em đính kèm bên dưới là file em làm ạ, em làm hẳn hơn 1000 dòng cho biết, làm y hệt những gì tiền bối dặn, nhưng mà em chỉ làm được đoạn đầu đọc được thôi. Không biết e nỡ làm sai chỗ nào mà Chỉ thấy file nặng thôi còn đọc âm thanh thì không đọc được. Khó quá tiền bối ạ. Em lại chẳng làm được rồii (@$%@ (@$%@ (@$%@ . Tiền bối ơi tiền bối giải bài tập giúp em được k ạ ? Mặc dù em đã làm y như những gì tiền bối dặn dò nhưng mà vẫn không được, tiền bối giải thích giúp em em sai ở đâu được không ? chứ cả ngày qua em tìm mãi k ra, Em cảm ơn tiền bối rất là nhiều ạ (@$%@(@$%@ ( em có tải cả phần âm thanh lên fodder này mà tải mãi mà k lên nổi em phải xóa bớt đi thì mới tải được lên, File này chỉ còn lại mp3 tên của các hàng thôi tiền bối ạ ) :(
- File tôi thiết kế là tự động đặt tên file .mp3 theo Mã SP, code sẽ vlookup mã SP với tên file âm thanh mà đọc lên. Tôi lại thấy folder bạn gửi tên file .mp3 là tên sản phẩm thì lấy gì mà nó tìm file để đọc.

Screenshot 2025-05-22 at 09.13.15.png

- Mỗi file âm thanh chừng 10kb thì 1.000 file nén lại cũng chừng 6M.
- Khi gửi lệnh lên google để tạo file âm thanh rồi tải về thì bạn nên chia nhỏ ra mỗi lần gửi chừng 200 mã để trang web nó không chặn lại do thấy gửi lệnh một lúc nhiều quá, tưởng bị tấn công gì đó.
- Giải thuật của tôi là tạo file âm thanh cho từng mã SP luôn chứ không tạo file cho từng nhóm, mặc dù là giống nhau (vd: 10 mã SP đều có tên là BIM BIM. Khi đó chỉ cần gõ mã SP là tìm đúng file âm thanh của mã đó để phát. Nếu bạn muốn tạo theo nhóm (cho ít file âm thanh cần tạo lại) thì: khi xử lý code phải dò tìm đích danh tên sản phẩm (có dấu tiếng Việt và nhiều ký tự) như "Sữa chua nếp cẩm" ứng với tên file âm thanh "Sữa chua nếp cẩm.mp3" rồi mới phát thì mất thời gian và tôi không tin tưởng cho lắm. Rủi ro trong quá trình cập nhật dư liệu, gõ tên SP dư một khoảng trắng thì nó so sánh tên file không giống và không tìm ra file.
- Các file âm thanh này chỉ tạo một lần rồi dùng hoài thì chỉ mất thời gian tạo ban đầu thôi sau đó tái sử dụng nên chẳng cần phải tiết kiệm (nếu chỉ tạo file dùng chung cho nhiều mã rồi mất thêm thời gian để xử lý mã SP nào dùng cho file âm thanh nào v.v...phiền phức)

* Lưu ý:
- Tên SP bạn nên gõ tiếng Việt đầy đủ để đọc cho đúng chứ bạn viết tắt thì nó cũng đọc theo kiểu viết tắt luôn. Vd: Ô MAI thay vì OMAI.
- Khi tải file âm thanh, nên chờ khi có thông báo "Xong." rồi hãy xử lý việc khác vì code vẫn còn đang tải file.
- Bỏ danh xưng tiền bối đi.
 
- File tôi thiết kế là tự động đặt tên file .mp3 theo Mã SP, code sẽ vlookup mã SP với tên file âm thanh mà đọc lên. Tôi lại thấy folder bạn gửi tên file .mp3 là tên sản phẩm thì lấy gì mà nó tìm file để đọc.

View attachment 308305

- Mỗi file âm thanh chừng 10kb thì 1.000 file nén lại cũng chừng 6M.
- Khi gửi lệnh lên google để tạo file âm thanh rồi tải về thì bạn nên chia nhỏ ra mỗi lần gửi chừng 200 mã để trang web nó không chặn lại do thấy gửi lệnh một lúc nhiều quá, tưởng bị tấn công gì đó.
- Giải thuật của tôi là tạo file âm thanh cho từng mã SP luôn chứ không tạo file cho từng nhóm, mặc dù là giống nhau (vd: 10 mã SP đều có tên là BIM BIM. Khi đó chỉ cần gõ mã SP là tìm đúng file âm thanh của mã đó để phát. Nếu bạn muốn tạo theo nhóm (cho ít file âm thanh cần tạo lại) thì: khi xử lý code phải dò tìm đích danh tên sản phẩm (có dấu tiếng Việt và nhiều ký tự) như "Sữa chua nếp cẩm" ứng với tên file âm thanh "Sữa chua nếp cẩm.mp3" rồi mới phát thì mất thời gian và tôi không tin tưởng cho lắm. Rủi ro trong quá trình cập nhật dư liệu, gõ tên SP dư một khoảng trắng thì nó so sánh tên file không giống và không tìm ra file.
- Các file âm thanh này chỉ tạo một lần rồi dùng hoài thì chỉ mất thời gian tạo ban đầu thôi sau đó tái sử dụng nên chẳng cần phải tiết kiệm (nếu chỉ tạo file dùng chung cho nhiều mã rồi mất thêm thời gian để xử lý mã SP nào dùng cho file âm thanh nào v.v...phiền phức)

* Lưu ý:
- Tên SP bạn nên gõ tiếng Việt đầy đủ để đọc cho đúng chứ bạn viết tắt thì nó cũng đọc theo kiểu viết tắt luôn. Vd: Ô MAI thay vì OMAI.
- Khi tải file âm thanh, nên chờ khi có thông báo "Xong." rồi hãy xử lý việc khác vì code vẫn còn đang tải file.
- Bỏ danh xưng tiền bối đi.
Cho mình sdt của bạn để liên hệ dc k? Mình muốn thêm ạ
 

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

Back
Top Bottom