Dạ em chào các anh chị, Dạ em hiện tại đang viết 1 đoạn chuyển đổi code vba sang vb.net mà hiện tại em viết mãi đoạn code này không được , dạ anh chị nào viết được , viết giúp em ạ, em gửi phí cf ạ , Dạ mong anh chị giúp đỡ em ạ
Dạ em chào các anh chị, Dạ em hiện tại đang viết 1 đoạn chuyển đổi code vba sang vb.net mà hiện tại em viết mãi đoạn code này không được , dạ anh chị nào viết được , viết giúp em ạ, em gửi phí cf ạ , Dạ mong anh chị giúp đỡ em ạ
Dạ em chào các anh chị, Dạ em hiện tại đang viết 1 đoạn chuyển đổi code vba sang vb.net mà hiện tại em viết mãi đoạn code này không được , dạ anh chị nào viết được , viết giúp em ạ, em gửi phí cf ạ , Dạ mong anh chị giúp đỡ em ạ
Khai báo của bạn chỉ có giá trị trong sub mà bạn khai báo thôi.
Khi bạn dùng
PHP:
Sub Khai_Bao()
Set IP_Sht = ThisWorkbook.Sheets("INPUT_DATA")
Set SD_Sht = ThisWorkbook.Sheets("SUM_DATA")
....
thì giá trị IP_Sht và SD_Sht chỉ có ý nghĩa trong Sub Khai_Bao, nên khi bạn gọi tại Sub Sum_Force() thì máy báo không hiểu định nghĩa;
PHP:
Sub Sum_Force()
Call Khai_Bao
Call Tat_man_hinh
...
Bạn tìm hiểu thêm biến toàn cục / biến cục bộ để hiểu về việc này.
p/s:
(1) VBA với mình là ngôn ngữ rất thân thiện, code như lời nói, dễ ứng dụng. Đặc biệt đối tượng bạn đang hướng tới vẫn là file excel (.xls) thì VBA là một lợi thế lớn.
(2) Bạn cần phải nắm rõ việc khai báo trong VBA, các đối tượng ít nhất là trong bảng tính hiện tại thì mới nghĩ đến chuyển đổi code sang ngôn ngữ khác.
- VB.Net cũng gần gủi với VBA vì đều họ VB, nhưng VB.net thì cần cài netframe tương ứng, khai báo và lưu trữ tận dụng tốt tài nguyên của máy thì ở tầm khác rồi. Một code đơn giản để xử lý trên Excel có thể rất nhẹ nhàng, nhưng chạy độc lập trên VB.Net thì cũng không đơn giản.
- Còn thuần nhúng *.dll để chạy cho người khác không dòm thì bạn nên tận dụng để tìm hiểu VBA trước đã.
VB.Net nếu dùng đúng chức năng của nó thì là loại ngôn ngữ Hướng Đối Tượng.
VBA không phải, và cũng không bao giờ có ý định Hướng Đối Tượng.
Là dân HĐT thì ai cũng biết khái niệm Toàn Cục/Nội Bộ hãy nên quên đi.
Trong môi trường này, Wrapper Classes (Static) làm công việc của Toàn Cục. Và người thông thạo môi trường này biết cách gói gọn Nội Bộ.
Khai báo của bạn chỉ có giá trị trong sub mà bạn khai báo thôi.
Khi bạn dùng
PHP:
Sub Khai_Bao()
Set IP_Sht = ThisWorkbook.Sheets("INPUT_DATA")
Set SD_Sht = ThisWorkbook.Sheets("SUM_DATA")
....
thì giá trị IP_Sht và SD_Sht chỉ có ý nghĩa trong Sub Khai_Bao, nên khi bạn gọi tại Sub Sum_Force() thì máy báo không hiểu định nghĩa;
PHP:
Sub Sum_Force()
Call Khai_Bao
Call Tat_man_hinh
..
[QUOTE="huhumalu, post: 1130863, member: 234335"]
Khai báo của bạn chỉ có giá trị trong sub mà bạn khai báo thôi.
Khi bạn dùng
[CODE=php]
Sub Khai_Bao()
Set IP_Sht = ThisWorkbook.Sheets("INPUT_DATA")
Set SD_Sht = ThisWorkbook.Sheets("SUM_DATA")
....
thì giá trị IP_Sht và SD_Sht chỉ có ý nghĩa trong Sub Khai_Bao, nên khi bạn gọi tại Sub Sum_Force() thì máy báo không hiểu định nghĩa;
PHP:
Sub Sum_Force()
Call Khai_Bao
Call Tat_man_hinh
...
Bạn tìm hiểu thêm biến toàn cục / biến cục bộ để hiểu về việc này.
p/s:
(1) VBA với mình là ngôn ngữ rất thân thiện, code như lời nói, dễ ứng dụng. Đặc biệt đối tượng bạn đang hướng tới vẫn là file excel (.xls) thì VBA là một lợi thế lớn.
(2) Bạn cần phải nắm rõ việc khai báo trong VBA, các đối tượng ít nhất là trong bảng tính hiện tại thì mới nghĩ đến chuyển đổi code sang ngôn ngữ khác.
- VB.Net cũng gần gủi với VBA vì đều họ VB, nhưng VB.net thì cần cài netframe tương ứng, khai báo và lưu trữ tận dụng tốt tài nguyên của máy thì ở tầm khác rồi. Một code đơn giản để xử lý trên Excel có thể rất nhẹ nhàng, nhưng chạy độc lập trên VB.Net thì cũng không đơn giản.
- Còn thuần nhúng *.dll để chạy cho người khác không dòm thì bạn nên tận dụng để tìm hiểu VBA trước đã.
À, cố gắng đừng viết tắt, chấm phẩy, hoa thường cho gọn gàng nhé.
Dạ vâng ạ, do em muốn viết dạng bên vb.net mà nhìu chỗ em viết nó chưa chạy được, nó rất nhìu dạng mới , nên em mới hỏi để tham khảo đoạn code tìm hiểu dễ hơn ạ
.
[/CODE]
Bạn tìm hiểu thêm biến toàn cục / biến cục bộ để hiểu về việc này.
p/s:
(1) VBA với mình là ngôn ngữ rất thân thiện, code như lời nói, dễ ứng dụng. Đặc biệt đối tượng bạn đang hướng tới vẫn là file excel (.xls) thì VBA là một lợi thế lớn.
(2) Bạn cần phải nắm rõ việc khai báo trong VBA, các đối tượng ít nhất là trong bảng tính hiện tại thì mới nghĩ đến chuyển đổi code sang ngôn ngữ khác.
- VB.Net cũng gần gủi với VBA vì đều họ VB, nhưng VB.net thì cần cài netframe tương ứng, khai báo và lưu trữ tận dụng tốt tài nguyên của máy thì ở tầm khác rồi. Một code đơn giản để xử lý trên Excel có thể rất nhẹ nhàng, nhưng chạy độc lập trên VB.Net thì cũng không đơn giản.
- Còn thuần nhúng *.dll để chạy cho người khác không dòm thì bạn nên tận dụng để tìm hiểu VBA trước đã.
À, cố gắng đừng viết tắt, chấm phẩy, hoa thường cho gọn gàng nhé.
[/QUOTE]
VB.Net nếu dùng đúng chức năng của nó thì là loại ngôn ngữ Hướng Đối Tượng.
VBA không phải, và cũng không bao giờ có ý định Hướng Đối Tượng.
Là dân HĐT thì ai cũng biết khái niệm Toàn Cục/Nội Bộ hãy nên quên đi.
Trong môi trường này, Wrapper Classes (Static) làm công việc của Toàn Cục. Và người thông thạo môi trường này biết cách gói gọn Nội Bộ.
Public Class Class1
Public Shared Sub Sum_Force()
Dim IP_Sht As Object = Myaddin.Sh_INPUTDATA
Dim SD_Sht As Object = Myaddin.Sh_SUMDATA
Dim i As Long
Dim lr As Long
lr = Math.Max(IP_Sht.Cells(1048576, "AD").End(XlDirection.xlUp).Row, 3)
Dim Pt_rngData As Object(,) = IP_Sht.Range("AE3:AK" & lr).Value
Dim Pt_rng As New System.Data.DataTable()
For j As Integer = 1 To Pt_rngData.GetLength(1)
Dim newColumn As New DataColumn()
newColumn.ColumnName = "Column " & j.ToString() ' Đặt tên cho cột mới
Pt_rng.Columns.Add(newColumn) ' Thêm cột mới vào DataTable
Next
For z As Integer = 1 To Pt_rngData.GetLength(0)
Dim newRow As DataRow = Pt_rng.NewRow()
For j As Integer = 1 To Pt_rngData.GetLength(1)
newRow(j - 1) = Pt_rngData(z, j) ' Thêm giá trị từ mảng vào từng cột tương ứng trong DataTable
Next
Pt_rng.Rows.Add(newRow) ' Thêm dòng mới vào DataTable
Next
If X_End > X_Start Then
CHIEU = "THUAN"
ElseIf X_End < X_Start Then
CHIEU = "NGUOC"
Else
If Y_End > Y_Start Then
CHIEU = "THUAN"
Else
CHIEU = "NGUOC"
End If
End If