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

Điều hành viên: tungblt, vuathongtin

Miccpro
Bài viết: 3
Ngày tham gia: T.Tư 22/12/2010 4:27 pm
Has thanked: 2 time

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

Gửi bàigửi bởi Miccpro » T.Tư 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 ạ:

Mã: Chọn hết

 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


Mã: Chọn hết

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 chính thức
Thành viên chính thức
Bài viết: 33
Ngày tham gia: T.Năm 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 5 time

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

Gửi bàigửi bởi ncxn » T.Bảy 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
Bài viết: 3
Ngày tham gia: T.Tư 22/12/2010 4:27 pm
Has thanked: 2 time

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

Gửi bàigửi bởi Miccpro » CN 06/01/2019 2:45 pm

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

Mã: Chọn hết

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 chính thức
Thành viên chính thức
Bài viết: 33
Ngày tham gia: T.Năm 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 5 time

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

Gửi bàigửi bởi ncxn » T.Hai 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
Bài viết: 3
Ngày tham gia: T.Tư 22/12/2010 4:27 pm
Has thanked: 2 time

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

Gửi bàigửi bởi Miccpro » T.Hai 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.

Mã: Chọn hết

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 chính thức
Thành viên chính thức
Bài viết: 33
Ngày tham gia: T.Năm 27/01/2011 9:37 am
Has thanked: 1 time
Been thanked: 5 time

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

Gửi bàigửi bởi ncxn » T.Hai 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


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách