VB.NET Dành Cho Người đã Có Nền Tảng VBA

Menu Tự học VBA
  • Trang chủ
  • Diễn đàn Bài viết mới Tìm chủ đề
  • Có gì mới Bài viết mới Hoạt động mới nhất
Đăng nhập Đăng ký Có gì mới? Tìm kiếm

Tìm kiếm

Everywhere Chủ đề This forum This thread Chỉ tìm trong tiêu đề Bởi: Tìm Tìm kiếm nâng cao…
  • Bài viết mới
  • Tìm chủ đề
Menu Đăng nhập Đăng ký
  • Cách upload ảnh lên diễn đàn
  • Trang chủ
  • Diễn đàn
  • Ngôn ngữ lập trình khác
  • VB.NET
VB.NET dành cho người đã có nền tảng VBA
  • Thread starter vbano1
  • Ngày gửi 6/10/21
vbano1

vbano1

SMod
Thành viên BQT [VB.NET-1.1]Khai báo biến Khai báo biến nội bộ-Local Cách khai báo giống với VBA: Mã: Dim TenBien As String Gọi là biến local (nội bộ) vì nó được khai báo bên trong thân của chương trình, nằm giữa Sub và End Sub. Ví dụ: Mã: Sub abc() Dim i as Integer ... End Sub Nên nạp giá trị khởi tạo cho biến ngay khi khai báo biến Mã: Dim thvba As String = "" Hoặc: Mã: Dim i As Integer = 0 Chương trình mẫu Mã: Module Module1 Sub Main() ' Khai bao va tao gia tri khoi tao cho bien so Dim str1 As String = "" Dim str2 As String = "" Dim str3 As String = "" ' Xu ly gi do o day End Sub End Module T

thanhphong

Guest
Mọi người sẽ không phải học các toán tử (cộng, trừ , nhân, chia , số dư, nối ký tự,...) vì trước nay với VBA như thế nào thì VB.NET cũng y như vậy. Với các lệnh điều khiển (for, do loop until, do while loop) cũng y như VBA, nên cũng không cần học gì thêm. Vậy là bớt đi được kha khá thời gian rồi. [VB.NET-1.2]Làm việc với mảng Phần này có chút xíu khác biệt so với VBA. 1.2.1 Với một mảng được khai báo rõ ràng kiểu dữ liệu: Mã: Module Module1 Sub Main() ' Khai bao mang Dim str(10) As String For i As Integer = 0 To 10 ' Gian gia tri cho mang str(i) = "dong thu: " & (i + 1) ' Hien thi ket qua ra man hinh Console.WriteLine(str(i)) Next End Sub End Module Hoặc: Mã: 'Khai bao mang va nap gia tri khoi tao luon Dim kakaku() As Integer = {120, 80, 55, 300, 168} 1.2.2 Kích thước của mảng là từ 0 tới arr.Length - 1 Với VBA ta có Ubound(arr). Lệnh trên vẫn dùng được cho VB.Net nếu là mảng một chiều. Nhưng các bạn nên làm quen với cấu trúc Length, vì nó được sử dụng nhiều hơn trong VB.Net. Mã: Module Module1 Sub Main() ' Khai bao mang mot chieu va nap gia tri khoi tao Dim arrthvba() As Integer = {120, 80, 55, 300, 168} ' Thay doi gia tri cua mang arrthvba(1) = arrthvba(1) * -1 arrthvba(3) = arrthvba(3) * -1 ' Liet ke cac phan tu cua mang For i As Integer = 0 To arrthvba.Length - 1 Console.WriteLine(arrthvba(i)) Next End Sub End Module Chú ý: array.Length sẽ trả về kiểu Integer. Nếu bạn làm việc với mảng lớn, hãy dùng array.LongLength nó trả về kiểu Long. 1.2.3 Mảng hai chiều Khai báo cũng giống với VBA. Mã: ' khai bao mang hai chieu Dim arr(5, 4) As Integer Điều đó có nghĩa là: Mã: arr(0, 0)、arr(0, 1)、arr(0, 2)、arr(0, 3)、arr(0, 4) arr(1, 0)、arr(1, 1)、arr(1, 2)、arr(1, 3)、arr(1, 4) arr(2, 0)、arr(2, 1)、arr(2, 2)、arr(2, 3)、arr(2, 4) arr(3, 0)、arr(3, 1)、arr(3, 2)、arr(3, 3)、arr(3, 4) arr(4, 0)、arr(4, 1)、arr(4, 2)、arr(4, 3)、arr(4, 4) arr(5, 0)、arr(5, 1)、arr(5, 2)、arr(5, 3)、arr(5, 4) 1.2.4 Khai báo và đặt giá trị khởi tạo cho mảng hai chiều: Mã: ' khai bao va thiet dinh gia tri khoi tao cho mang Dim arr(,) As Integer = New Integer(,) {{50, 80}, {105, 70}} ' hoac la Dim arr(,) As Integer = {{50, 80}, {105, 70}} Ví dụ: Mã: Module Module1 Sub Main() ' row Dim r As Integer = 5 ' column Dim c As Integer = 3 ' Khai bao mang co 3 cot thong tin{Toan, Tieng Anh, Vat Ly} Dim seiseki(,,) As Integer = { _ {75, 85, 90}, _ {100, 80, 80}, _ {90, 90, 90}, _ {65, 90, 80}, _ {80, 85, 100} _ } ' Tong diem Dim tongdiem(0, 2) As Integer ' Diem trung binh, chu y kieu du lieu Dim diemtb(0, 2) As Double ' Tong diem For i As Integer = 0 To r - 1 tongdiem(0, 0) = tongdiem(0, 0) + seiseki(i, 0) tongdiem(0, 1) = tongdiem(0, 1) + seiseki(i, 1) tongdiem(0, 2) = tongdiem(0, 2) + seiseki(i, 2) Next ' Diem trung binh For j As Integer = 0 To c - 1 diemtb(0, j) = tongdiem(0, j) / r Console.Write("diemtb(0, " & j & ") = ") Console.WriteLine(diemtb(0, j)) Next End Sub End Module 1.2.5 Giá trị trả về của hàm là mảng Dùng Return khá giống code c. Nếu bạn không quen, thì cứ viết như VBA cũng không sao cả. Tên_Hàm= Giá_Trị Mã: Function Example() As String() Dim array(1) As String array(0) = "Tuhoc" array(1) = "VBA" Return array End Function 1.2.6 Kiểm tra mảng rỗng: Mã: If array.Length = 0 Then Logic trên đi từ suy nghĩ thông thường, không có gì mới. Đây là phần rộng, cho nên chúng ta sẽ còn quay lại sau. Bạn cần đăng nhập để thấy link Bạn cần đăng nhập để thấy link Sửa lần cuối bởi điều hành viên: 11/10/21 tuhocvba

tuhocvba

Administrator
Thành viên BQT Một điều khó khăn rất lớn là anh em không dùng được mảng khai báo variant trong VB.NET, nó không hiểu đâu. Đặc biệt là mảng là input của function hay sub. Bài toán của tôi như sau: Tôi cần ghi ra mảng xrr kết quả truy xuất ADO. Do dữ liệu có thể là số, là chữ. Chúng ta nghĩ tới variant trong VBA. Nhưng điều này không xử lý được trong VB.NET. Vậy chi bằng khai báo nó là một mảng hai chiều dạng string. Kích thước mảng không xác định do đó tôi khai báo là: Mã: '=====Sub Dim xrr(,) As String If laydulieuExcelADO(SQL, xrr) = False Then Exit Sub End If '=====Function Private Function laydulieuExcelADO(ByVal SQL As String, ByRef arr(,) As String) As Boolean r = rs.RecordCount c = rs.Fields.Count If r > 0 Then ReDim arr(r - 1, c - 1) rs.MoveLast() rs.MoveFirst() For i = 1 To rs.RecordCount For j = 1 To rs.Fields.Count arr(i - 1, j - 1) = CStr(rs.Fields(j - 1).Value) Next j rs.MoveNext() Next i laydulieuExcelADO = True Else MessageBox.Show _ ("File Excel không có dữ liệu") GoTo thoat End If T

thanhphong

Guest
1.2.7 Kích thước của mảng. Trong VB.NET, mảng bắt đầu từ chỉ mục 0. arr.Length sẽ cho biết mảng có bao nhiêu phần tử. Đối với mảng hai chiều thì chúng ta sử dụng: arr.GetLength(0) : Số hàng arr.GetLength(1) : Số cột Nếu trong VBA thì các bạn có thể khai báo mảng là variant. Tức là vừa là số integer, cũng có thể là ký tự string. Nhưng trong VB.NET bạn không thể khai báo mảng có kiểu như vậy. Do đó chúng ta hãy khai báo mảng string. Từ string chúng ta cũng có thể convert ra được số. Sửa lần cuối bởi điều hành viên: 11/10/21 T

thanhphong

Guest
1.2.8 Các lệnh Redim và Redim Preserve vẫn dùng được Mã: Dim array(4) As Integer array(0) = 150 array(1) = 160 array(2) = 170 array(3) = 180 array(4) = 190 ReDim Preserve array(5) For i As Integer = 0 To array.Length - 1 Console.Write(array(i) & " ") Next Console.WriteLine() Kết quả: Mã: 150 160 170 180 190 0 tuhocvba

tuhocvba

Administrator
Thành viên BQT Lệnh Redim của VBA Excel có thể nói là cực kỳ bất tiện. Nếu như không viết Option Base thì phần tử mảng nhỏ nhất của VBA Excel mặc định là 0. Nhưng từ khi khởi tạo mảng tới lúc cần phán đoán đây có phải là mảng rỗng hay không thì lại là vấn đề. Ở VB.NET thì mọi người có thể viết là ReDim tblValue(-1) . Sau đó mọi người kiểm tra độ dài mảng có phải là 0 , thì sẽ phán đoán được đây là mảng rỗng : Mã: tblValue.Length Chỉ mục lớn nhất sẽ viết là : tblValue.GetUpperBound(0) (VBA thì viết là UBound ) có giá trị trả về là -1. Ngược lại ở VBA mọi người không thể viết là ReDim tblValue(-1) , việc này sẽ gây ra lỗi. Khởi tạo mảng trong VBA chỉ có cách là viết như sau : Mã: ReDim tblValue(0) Khi đó sẽ không thể phán đoán mảng rỗng hay không hay là đã có một phần tử mảng được nạp vô rồi, nếu như dựa vào UBound(tblValue) (lúc này giá trị trả về là 0 ). Có lẽ chỉ còn cách kiểm tra nội dung của tblValue(0) mà thôi. Trong VBA nếu như viết Option Base 1, chỉ mục mảng sẽ bắt đầu là 1, vấn đề tưởng như được giải quyết, nhưng nếu lúc này bạn dùng lệnh ReDim tblValue(0) , thì sẽ xảy ra lỗi. Thông thường tôi sẽ dùng thêm một biến phụ là cnt để xác định quá trình nạp vào mảng đã được tiến hành hay chưa. Các bạn có thể thấy điều này được sử dụng rất nhiều trong các đoạn code của tôi. Tuy nhiên với VB.NET, việc kiểm tra mảng rỗng hay đã được nạp giá trị rồi, có vẻ là đơn giản hơn. P

phuonghong1997

Yêu THVBA như điếu đổ
Đúng là VB.NET không có kiểu dữ liệu variant, điều này khác với VBA. Vì vậy khi khai báo bên VB.NET các bạn có thể cho nó là kiểu string. VBA: Dim tblValue As Variant tblValue = Array("AAA", "BBB", "CCC") VB.NET: Dim tblValue() As String = New String() {"AAA", "BBB", "CCC"} V

vanthanhVBA

VIP

Trong VB.NET người ta có thể dùng Array.Resize để lưu giá trị cũ và thay đổi kích thước mảng. Mã: Module Module1 Sub Main() Dim x() As Integer = New Integer() {1, 2, 3} ' This keeps the existing elements. Array.Resize(x, 6) Console.WriteLine(String.Join(",", x)) End Sub End Module Kết quả: Mã: 1,2,3,0,0,0 Nguồn: Bạn cần đăng nhập để thấy link 1

17namvu

Yêu THVBA
tuhocvba nói: Một điều khó khăn rất lớn là anh em không dùng được mảng khai báo variant trong VB.NET, nó không hiểu đâu. Đặc biệt là mảng là input của function hay sub. Bài toán của tôi như sau: Tôi cần ghi ra mảng xrr kết quả truy xuất ADO. Do dữ liệu có thể là số, là chữ. Chúng ta nghĩ tới variant trong VBA. Nhưng điều này không xử lý được trong VB.NET. Vậy chi bằng khai báo nó là một mảng hai chiều dạng string. Kích thước mảng không xác định do đó tôi khai báo là: Mã: '=====Sub Dim xrr(,) As String If laydulieuExcelADO(SQL, xrr) = False Then Exit Sub End If '=====Function Private Function laydulieuExcelADO(ByVal SQL As String, ByRef arr(,) As String) As Boolean r = rs.RecordCount c = rs.Fields.Count If r > 0 Then ReDim arr(r - 1, c - 1) rs.MoveLast() rs.MoveFirst() For i = 1 To rs.RecordCount For j = 1 To rs.Fields.Count arr(i - 1, j - 1) = CStr(rs.Fields(j - 1).Value) Next j rs.MoveNext() Next i laydulieuExcelADO = True Else MessageBox.Show _ ("File Excel không có dữ liệu") GoTo thoat End If Nhấn để mở rộng...
cái này mình khai báo mảng thành object được này ad, chứa được cả dạng số và string Bạn phải đăng nhập hoặc đăng ký để bình luận. Chia sẻ: Facebook Twitter WhatsApp Email Link
  • Trang chủ
  • Diễn đàn
  • Ngôn ngữ lập trình khác
  • VB.NET
Top

Từ khóa » Khai Báo Mảng 2 Chiều Trong Vb.net