Vài Vấn đề Lập trình trong excel - UserForm

  • Thread starter Thread starter atulavn
  • Ngày gửi Ngày gửi
Liên hệ QC

atulavn

Thành viên mới
Tham gia
18/9/07
Bài viết
5
Được thích
0
Từ khi biết diễn đàn này, em thấy khá hay và hữu ích. Trước giờ, em chỉ làm C++ trên MS VSC++ 6.0 thui, giờ rèn luyện trên excel cũng khá thú vị. Nhưng em gặp một vài problem chưa biết giải quyết thế nào. Mong các huynh giúp đỡ.

Thứ 1, làm thế nào thể hiện tiếng việt có dấu trên userform trong VBA như những ứng dụng khác. Cho đến nay, em chỉ thể hiện tiếng việt không dấu hoặc english thui, điều này không thích hợp cho nhiều người sử dụng.

Thứ 2, làm thế nào để lấy dữ liệu từ một file excel khác. Có vài trường hợp sau:
  • Lấy dữ liệu toàn bộ trong file excel ( một sheet và nhiều sheet)
  • Lấy dữ liệu một vùng trong một sheet. Ví dụ, lấy dữ liệu từ B5 đến E100.
  • Có hàm nào giúp lấy tên cột hay chỉ số cột trong VBA không? Vì mỗi lần cần thì em tạo một array gồm 26 kí tự từ A-->W(em quy định) để tượng trưng cho các cột.
Thứ 3, nhiều file excel em down về từ forum, open thì chẳng thấy code đâu để tham khảo, như vậy là sao ah. Mình muốn show hay hide code thì làm thế nào ngoai trừ đặt password.
Mâý huynh/cao thủ giúp em nha ( Chú ý, em hỏi mã code trong VBA project)
 
atulavn đã viết:
Từ khi biết diễn đàn này, em thấy khá hay và hữu ích. Trước giờ, em chỉ làm C++ trên MS VSC++ 6.0 thui, giờ rèn luyện trên excel cũng khá thú vị. Nhưng em gặp một vài problem chưa biết giải quyết thế nào. Mong các huynh giúp đỡ.

Rất vui vì diễn đàn có thêm một cao thủ tham gia!

Thứ 1, làm thế nào thể hiện tiếng việt có dấu trên userform trong VBA như những ứng dụng khác. Cho đến nay, em chỉ thể hiện tiếng việt không dấu hoặc english thui, điều này không thích hợp cho nhiều người sử dụng.

bạn xem thêm tại Topic này nhé. http://GPE-ControlforOffice.notlong.com

Thứ 2, làm thế nào để lấy dữ liệu từ một file excel khác. Có vài trường hợp sau:
  • Lấy dữ liệu toàn bộ trong file excel ( một sheet và nhiều sheet)
Hình như không có cách nào lấy nhanh toàn bộ, ngoài việc bạn phải quét qua từng sheet
  • Lấy dữ liệu một vùng trong một sheet. Ví dụ, lấy dữ liệu từ B5 đến E100.
bạn dùng :
Mã:
 dim rng as range
set rng = sheets("yoursheetname").range("B5:E100")
msgbox "phần tử dòng 2, cột 3 có giá trị :" & rng.cells(2,3).value
...
set rng = nothing
  • Có hàm nào giúp lấy tên cột hay chỉ số cột trong VBA không? Vì mỗi lần cần thì em tạo một array gồm 26 kí tự từ A-->W(em quy định) để tượng trưng cho các cột.
Mã:
msgbox range("b5").column

Thứ 3, nhiều file excel em down về từ forum, open thì chẳng thấy code đâu để tham khảo, như vậy là sao ah. Mình muốn show hay hide code thì làm thế nào ngoai trừ đặt password.

hình như không có, nếu không muốn đặt pass thì chỉ có nước là bạn phải convert code thành dll hay xll thôi.

Chào bạn mới, ! trên đây là một số ý kiến của mình, bác nào hiểu rõ hơn thì cứ trình bày thêm cho mình học hỏi thêm nhé.
Thân.
 
Upvote 0
Xin lỗi, có lẻ em nói không rõ ràng. Em xin nói rõ thêm là lấy dữ liệu từ một file dữ liệu khác(code VBA)

Thứ 2, làm thế nào để lấy dữ liệu từ một file excel khác hay workbook khác(đang mở hay đóng, chỉ cần xác định path). Có vài trường hợp sau:
  • Lấy dữ liệu toàn bộ trong file excel ( một sheet và nhiều sheet)
  • Lấy dữ liệu một vùng trong một sheet. Ví dụ, lấy dữ liệu từ B5 đến E100.
Và một thắc mắc nhỏ nữa là: trong cùng workbook, em thay nhiều người dùng Sheet("tên/hay chỉ số").Range(....), nhưng khi em dùng thì error object nay không hổ trợ, và buộc em dùng worksheets("....").range(...) thì ok.
Code lấy data từ A4-->E8 trong workbook khác, theo một tài liệu có hướng dẫn là [tên workbook(kèm path)].Tên Sheet!(A4:E8)==> như vậy có đúng không ah, khi em run thì error.
 
Upvote 0
Hi,
làm thế nào để lấy dữ liệu từ một file excel khác hay workbook khác(đang mở hay đóng, chỉ cần xác định path).
Bạn tham khảo bài này!
(Bạn đọc hết topic đó nhé)
em thay nhiều người dùng Sheet("tên/hay chỉ số").Range(....), nhưng khi em dùng thì error object nay không hổ trợ, và buộc em dùng worksheets("....").range(...) thì ok.
Có lẽ bạn đã gõ thiếu chữ s: Sheets("tên/hay chỉ số").Range(....)?????
 
Upvote 0
Sử dụng ADO đi. Đơn giản vô cùng tận. Hình như có sample ở đâu đó ấy.

Connection:

Mã:
Public oConn As ADODB.Connection
Public Function OpenConnection(ByVal strExcelFilePathOnly As String, ByVal strExcelDBName As String) As Boolean
On Error GoTo Proc_Error
Dim strConnectionString As String

    OpenConnection = False
    
    strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
         "Data Source=" & strExcelFilePathOnly & strExcelDBName & ";" & _
         "Extended Properties=Excel 8.0;"

    Set oConn = New ADODB.Connection
    
    oConn.Open strConnectionString
    
    OpenConnection = True
    
Proc_Done:
    Exit Function
Proc_Error:
    MsgBox "Err#: " & Err.Number & vbCrLf & "Error: " & Err.Description
    GoTo Proc_Done
End Function


Public Sub CloseConnection()
On Error Resume Next
    If oConn.State <> 0 Then oConn.Close
    If Not oConn Is Nothing Then Set oConn = Nothing
End Sub

Connection usage
:

Mã:
     strDBPathOnly = IIf(Right$(App.Path, 1) <> "\", App.Path & "\", App.Path)
    strDBName = "Data.xls"
    isConnectionOpen = OpenConnection(strDBPathOnly, strDBName)
    
    If isConnectionOpen Then LoadData
    
    CloseConnection
    '// ...

Sample:

Mã:
 '// LoadData
...
strSQL = "SELECT * FROM [tblInventoryItem$]" '// tblInventoryItem là tên Sheet

oRS.Open strSQL, , adOpenForwardOnly, adLockReadOnly

...
 
Upvote 0
Web KT

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

Back
Top Bottom