• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Giúp viết Function từ VBA sang VB.NET

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Moderators: tungblt, vuathongtin

Miccpro
Posts: 3
Joined: Wed 22/12/2010 4:27 pm
Has thanked: 2 times

Giúp viết Function từ VBA sang VB.NET

Postby Miccpro » Wed 02/01/2019 11:09 pm

Kính chào các anh chị trên diễn đàn, trước em có biết qua về VBA, giờ muốn học VB.NET mà còn loay hoay chưa hiểu được gì nhiều. Mong các anh chị chuyển giúp em 2 hàm ở VBA sang VB.NET được không ạ:

Code: Select all

 Function Tachchuoi(Ma As Variant, ByVal dau As String, n As Long) As String
    Application.Volatile
    On Error Resume Next
    Dim tmp, Tach As String
   
    If Ma <> Empty Then
        tmp = Split(Ma, dau)
        Tach = Split(tmp)
        Tachchuoi = tmp(n - 1)
    End If
    If Ma = Empty Then Tachchuoi = ""
End Function


Code: Select all

Function NDPPKT(Ma As String, rng As Range, n As Long)
    Dim my_arr, sArr, Dic As Object, Tem  As String, R As Long
    Dim j As Long, i As Long
    Set Dic = CreateObject("Scripting.Dictionary")
    sArr = rng.value
    my_arr = Split(Ma, "|")
    For i = 1 To UBound(sArr)
        Tem = sArr(i, 1)
        If Tem <> Empty Then
            Dic.Item(Tem) = i
        End If
    Next i
    For j = 0 To UBound(my_arr)
        Tem = Trim(my_arr(j))
        R = Dic.Item(Tem)
        If R Then
            If NDPPKT <> Empty Then
                NDPPKT = NDPPKT & sArr(R, n)
            Else
                NDPPKT = sArr(R, n)
            End If
        End If
    Next j
End Function

Đặc biệt là hàm thứ 2 liên quan đến Range. Mong các anh chị giúp đỡ, em xin chân thành cảm ơn



ncxn
Thành viên năng nổ
Thành viên năng nổ
Posts: 55
Joined: Thu 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 6 times

Re: Giúp viết Function từ VBA sang VB.NET

Postby ncxn » Sat 05/01/2019 2:14 pm

VB.net thì đơn giản
  1.      
  2. Dim words As String() = s.Split(New Char() {"ký tự muốn cắt"c})
  3.  

Miccpro
Posts: 3
Joined: Wed 22/12/2010 4:27 pm
Has thanked: 2 times

Re: Giúp viết Function từ VBA sang VB.NET

Postby Miccpro » Sun 06/01/2019 2:45 pm

Các anh chị giúp em sửa code này được không ạ

Code: Select all

Imports Excel = Microsoft.Office.Interop.Excel
 Public Function Vlookup_1(ByVal Ma As String, ByVal rng As Excel.Range, ByVal n As Long) As String
        Dim sArr = rng.Value
        Dim my_arr = Ma.Split("|")
        Dim i, j, R As Long
        Dim Tem As String

        Dim Dic As New Dictionary(Of String, Int16)
        For i = 1 To UBound(sArr)
            Tem = sArr(i, 1)
            If Tem <> vbEmpty Then
                Dic.Item(Tem) = i

            End If
        Next
        For j = 0 To UBound(my_arr)
            Tem = Trim(my_arr(j))
            R = Dic.Item(Tem)
            If R Then
                Dim Ketqua As String = sArr(R, n)
            End If
        Next
        Return Ketqua

    End Function

Em không chạy được hàm này ạ

ncxn
Thành viên năng nổ
Thành viên năng nổ
Posts: 55
Joined: Thu 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 6 times

Re: Giúp viết Function từ VBA sang VB.NET

Postby ncxn » Mon 07/01/2019 9:05 am

Dim array(), ví dụ: string(); int(), hoặc as New ArrayList ....

Vòng lặp đầu tiên thì dùng phương thức Add sẽ được một list("value",key)
Ví dụ:
Dic.Add(tem,i)

Vòng lặp thứ 2, theo mình thì bạn đang so sánh trong list() để tìm những phần tử trùng với range() trong file excel rồi lấy kết quả là một mảng ketqua as string()?

---------------
Mà nếu bài toán là tìm các phần tử giống nhau ở 2 mảng thì trên này có rất nhiều bài viết rồi nhé.

Miccpro
Posts: 3
Joined: Wed 22/12/2010 4:27 pm
Has thanked: 2 times

Re: Giúp viết Function từ VBA sang VB.NET

Postby Miccpro » Mon 07/01/2019 9:39 am

Vòng lặp thứ 2, theo mình thì bạn đang so sánh trong list() để tìm những phần tử trùng với range() trong file excel rồi lấy kết quả là một mảng ketqua as string()?

Đúng như vậy ạ, đó là 1 hàm giống Vlookup, với tham số n là cột trả về giá trị trong range.

Code: Select all

Imports Excel = Microsoft.Office.Interop.Excel
 Public Function Vlookup_1(ByVal Ma As String, ByVal rng As Excel.Range, ByVal n As Long) As String

em khai báo tham số rng dạng range như thế có sai không ạ, nó không chạy

ncxn
Thành viên năng nổ
Thành viên năng nổ
Posts: 55
Joined: Thu 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 6 times

Re: Giúp viết Function từ VBA sang VB.NET

Postby ncxn » Mon 07/01/2019 11:20 am

nếu chỉ là vlookup thì dùng luôn hàm của excel

  1. Imports Excel = Microsoft.Office.Interop.Excel
  2.  
  3.     Function VBNET_vlookup(ByVal key As string, ByVal xlRange As Excel.Range, n as int )
  4.  
  5.         Dim xlApp As Excel.Application
  6.         Dim VlResult As String = ("")
  7.         Dim xlBook As Excel.Workbook
  8.         Dim xlSheet As Excel.Worksheet
  9.        
  10.  
  11.         xlApp = New Excel.Application()
  12.         xlBook = xlApp.Workbooks.Open("C:\examples.xlsx")
  13.         xlSheet = xlBook.Worksheets("Sheet cố định thì chơi cái này")
  14.         xlRange = xlSheet.UsedRange
  15.         ' Muốn lấy range do người dùng chọn thì dùng acticesheet.rang.selected
  16.         Dim id As VariantType = " xyz"
  17.  
  18.         Try
  19.            ' Nếu muốn kết quả là một mảng thì loop + công thức này để lấy kết quả
  20.             VlResult = xlApp.WorksheetFunction.VLookup(id, xlRange, n, 0)
  21.  
  22.         Catch ex As Exception
  23.  
  24.         End Try
  25.  
  26.         return = VlResult
  27.  
  28.         xlBook.Close()
  29.  
  30.     End Function


Return to “Visual Basic .NET và C# (VB.NET & C#)”

Who is online

Users browsing this forum: No registered users and 3 guests