- Tham gia
- 23/3/16
- Bài viết
- 705
- Được thích
- 52
Vậy Mình tạm keo vầy không biết chính xác không nữa .... sai ta sửa lại1. VBA không phải là ngôn ngữ lập trình tổng quát (như Java, C/C++), không phải lập trình giáo khoa (Pascal), không phải lập trình HĐT (Java, Delphi, C#, C++), không phải lập trình web (PHP, Java, C#)
2. VBA là ngôn ngữ lập trình ứng dụng hổ trợ cho các phần mềm lớn của Microsoft. Điển hình là Office. Lưu ý là ngay cả từ "ứng dụng" ở trên cũng trong phạm vi hạn hẹp, tức là nó chỉ giới hạn trong các ứng dụng của Microsoft. Có thể các hệ thống khác cũng dùng được, nhưng không có nghĩa là họ chịu trách nhiệm bảo trì.
3. Trên thực tế còn vài ngôn ngữ lập trình ứng dụng được giới lập trình ủng hộ rất mạnh. Điển hình là Python (rộng), R (thống kê), PHP (web).
4. Khi lạm dụng VBA để làm những công việc điều khiển hệ thống, quý vị đã cố tình quên rằng Windows có Powershell làm việc hiệu quả hơn. Trên thực tế, nếu không cần sử dụng các đối tượng của Excel hay Access thì làm việc với VBScript dễ dàng hơn VBA. (theo đúng tên của nó, script là loại ngôn ngữ "thảo", không phải là lập trình tổng quát)
Từ "hoàn chỉnh" có thể mang tính chất chủ quan, và dễ gây hiểu lầm.Vậy Mình tạm keo vầy không biết chính xác không nữa .... sai ta sửa lại
1/ VBA là 1 ngôn ngữ lập trình ... Nhưng chưa hoàn chỉnh như những ngôn ngữ khác VD: Delphi, VB6 , C#, ...
2/ Nếu vậy thì tái khẳng định ai đó nói VBA không phải là ngôn ngữ lập trình là sai cơ Bản 70% ... hên lại trúng dòng này
Có người cho là markup language như XML là ngôn ngữ lập trình nhưng đa số không coi là ngôn ngữ lập trình. Ai cũng có lý, tùy theo xét "tiêu chuẩn" nào thôi.Vậy Mình tạm keo vầy không biết chính xác không nữa .... sai ta sửa lại
1/ VBA là 1 ngôn ngữ lập trình ... Nhưng chưa hoàn chỉnh như những ngôn ngữ khác VD: Delphi, VB6 , C#, ...
2/ Nếu vậy thì tái khẳng định ai đó nói VBA không phải là ngôn ngữ lập trình là sai cơ Bản 70% ... hên lại trúng dòng này
Chỗ này bác không chính xác, vì bác viết tắt. Nếu cân đo đong đếm bằng dụng cụ tiểu ly thì: Delphi là môi trường lập trình mà ngôn ngữ là Object PascalDelphi, Pascal và Angol đều được tiêu chuẩn hóa và đều là ngôn ngữ lập trình tổng quát.
Không phải tôi viết tắt mà là tôi lầm thật....
Chỗ này bác không chính xác, vì bác viết tắt. Nếu cân đo đong đếm bằng dụng cụ tiểu ly thì: Delphi là môi trường lập trình mà ngôn ngữ là Object Pascal![]()
Trên mạng luôn có những cuộc tranh cãi nảy lửa và những người như bác tự thấy là thuộc đẳng cấp "bề trên" đấy.Không phải tôi viết tắt mà là tôi lầm thật.
Hồi nào giờ tôi cứ ngỡ Delphi là tên chữ của Object Pascal. Vì không có duyên lắm với cái này nên tôi lười tìm hiểu thêm. Không phải tôi chê, nhưng hoàn cảnh lúc đó tôi chỉ được chọn lựa giữa C++ và Java.
Nghe bác nói, bây giờ ngẫm lại cái từ Delphi (tiếng Hy lạp) thì là môi trường cũng phải.
mà sao em thấy Delphi chỉ phát triển ở nhật, Đức, Nga và Mỹ, tàu .... còn lại thấy ít lắm ... ở Việt nam càng ítTrên mạng luôn có những cuộc tranh cãi nảy lửa và những người như bác tự thấy là thuộc đẳng cấp "bề trên" đấy.Mọi người chỉ cho Dephi (Object Pascal) ngồi chiếu dưới thôi.
Tôi thì 2 món của bác chào thua.
Public Sub TestMe()
Dim varArray As Variant
Dim lCounter As Long
Dim lCounter2 As Long
Dim rngCell As Range
''varArray = Array(Array(1, 2, 3, 4), Array(11, 12, 13, 14))
varArray = Array(Array(1, 2, 3, 4), Array(11, 12, 13, 14), Array(16, 17, 18, 19))
Set rngCell = Cells(1, 1)
For lCounter = LBound(varArray) To UBound(varArray)
For lCounter2 = LBound(varArray(lCounter)) To UBound(varArray(lCounter))
Debug.Print varArray(lCounter)(lCounter2)
rngCell = varArray(lCounter)(lCounter2)
Set rngCell = rngCell.Offset(0, 1)
Next lCounter2
Debug.Print "-----------"
Set rngCell = Cells(rngCell.Row + 1, 1)
Next lCounter
End Sub
Cách đây khoảng 1 tháng, có bạn hỏi về cách dùng Redim Preserve để thay đổi số dòng trong mảng 2 chiều (Redim Preserve chỉ thay đổi được số cột)lang thang tìm tài liệu trên Internet thấy Tây nó xài đa mảng .... mà chưa thấy trên GPE xài .... hay xài rồi mà mình ko biết nữa ?!
Vậy Bài 49 keo là Dùng mảng trong mảng .... hay Tây nó keo là đa mảng cũng chính là NóCách đây khoảng 1 tháng, có bạn hỏi về cách dùng Redim Preserve để thay đổi số dòng trong mảng 2 chiều (Redim Preserve chỉ thay đổi được số cột)
Trong bài trả lời, tôi có đề cập 2 phương pháp:
1. Đảo cột thành dòng
2. Dùng mảng trong mảng.
Cái này kêu thế em thấy hơi phức tạp, kiểu nâng cao quan điểm ấy.Vậy Bài 49 keo là Dùng mảng trong mảng .... hay Tây nó keo là đa mảng cũng chính là Nó
Nếu mảng variant thì như vậy. Bởi vì variant có thể là bất cứ kiểu gì. Trước đây có một bạn viết bài nói về mảng variant.Cái này kêu thế em thấy hơi phức tạp, kiểu nâng cao quan điểm ấy.
Em cũng hay dùng cái này, chỉ hiểu đơn giản các phần tử của mảng có thể là bất kỳ kiểu dữ liệu nào (hình như object cũng được), có thể là một giá trị đơn hay một mảng. Hồi em tìm hiểu về mấy bài Hastable, Dictionary... phát hiện item có thể là giá trị đơn hay mảng nên thử với Array luôn..
thì lâu nay Mình đang tìm tài liệu học Delphi ... cái mong muốn tìm thì nó ko ra mà cứ ra cái liên quan ...đang suy nghĩ 1 chút nhiều khả năng là mình ko biết tiếng anh và tây nó keo một đường Mình lại keo 1 nẻo và Google nó ko hiểu ý mình nên nó cứ tìm ra chéo cánh vậy ...Tây nào vậy. Cho biết nguồn chính và nguồn dịch.
' QuickSort for 2D array in form Array(cols,rows)
' Enter in 1, 2, or 3 columns to sort by, each can be either asc or desc
Public Sub QuickSortStart(ThisArray As Variant, sortColumn1 As Integer, asc1 As Boolean, Optional sortColumn2 As Integer = -1, Optional asc2 As Boolean = True, Optional sortColumn3 As Integer = -1, Optional asc3 As Boolean = True)
Dim LowerBound As Integer
Dim UpperBound As Integer
LowerBound = LBound(ThisArray, 2)
UpperBound = UBound(ThisArray, 2)
Call QuickSort(ThisArray, LowerBound, UpperBound, sortColumn1, asc1, sortColumn2, asc2, sortColumn3, asc3)
End Sub
Private Sub QuickSort(ThisArray As Variant, FirstRow As Integer, LastRow As Integer, sortColumn1 As Integer, asc1 As Boolean, sortColumn2 As Integer, asc2 As Boolean, sortColumn3 As Integer, asc3 As Boolean)
Dim pivot1 As Variant
Dim pivot2 As Variant
Dim pivot3 As Variant
Dim tmpSwap As Variant
Dim tmpFirstRow As Integer
Dim tmpLastRow As Integer
Dim FirstCol As Integer
Dim LastCol As Integer
Dim i As Integer
tmpFirstRow = FirstRow
tmpLastRow = LastRow
FirstCol = LBound(ThisArray, 1)
LastCol = UBound(ThisArray, 1)
pivot1 = ThisArray(sortColumn1, (FirstRow + LastRow) \ 2)
If sortColumn2 <> -1 Then
pivot2 = ThisArray(sortColumn2, (FirstRow + LastRow) \ 2)
End If
If sortColumn3 <> -1 Then
pivot3 = ThisArray(sortColumn3, (FirstRow + LastRow) \ 2)
End If
While (tmpFirstRow <= tmpLastRow)
While (compareFirstLoop(ThisArray, pivot1, pivot2, pivot3, tmpFirstRow, sortColumn1, asc1, sortColumn2, asc2, sortColumn3, asc3) And tmpFirstRow < LastRow)
tmpFirstRow = tmpFirstRow + 1
Wend
While (compareSecondLoop(ThisArray, pivot1, pivot2, pivot3, tmpLastRow, sortColumn1, asc1, sortColumn2, asc2, sortColumn3, asc3) And tmpLastRow > FirstRow)
tmpLastRow = tmpLastRow - 1
Wend
If (tmpFirstRow <= tmpLastRow) Then
For i = FirstCol To LastCol
tmpSwap = ThisArray(i, tmpFirstRow)
ThisArray(i, tmpFirstRow) = ThisArray(i, tmpLastRow)
ThisArray(i, tmpLastRow) = tmpSwap
Next i
tmpFirstRow = tmpFirstRow + 1
tmpLastRow = tmpLastRow - 1
End If
Wend
If (FirstRow < tmpLastRow) Then
Call QuickSort(ThisArray, FirstRow, tmpLastRow, sortColumn1, asc1, sortColumn2, asc2, sortColumn3, asc3)
End If
If (tmpFirstRow < LastRow) Then
Call QuickSort(ThisArray, tmpFirstRow, LastRow, sortColumn1, asc1, sortColumn2, asc2, sortColumn3, asc3)
End If
End Sub
Private Function compareFirstLoop(ThisArray As Variant, pivot1 As Variant, pivot2 As Variant, pivot3 As Variant, checkRow As Integer, sortColumn1 As Integer, asc1 As Boolean, sortColumn2 As Integer, asc2 As Boolean, sortColumn3 As Integer, asc3 As Boolean)
If asc1 = True And ThisArray(sortColumn1, checkRow) < pivot1 Then
compareFirstLoop = True
ElseIf asc1 = False And ThisArray(sortColumn1, checkRow) > pivot1 Then
compareFirstLoop = True
'Move to Second Column
ElseIf sortColumn2 <> -1 And ThisArray(sortColumn1, checkRow) = pivot1 Then
If asc2 = True And ThisArray(sortColumn2, checkRow) < pivot2 Then
compareFirstLoop = True
ElseIf asc2 = False And ThisArray(sortColumn2, checkRow) > pivot2 Then
compareFirstLoop = True
'Move to Third Column
ElseIf sortColumn3 <> -1 And ThisArray(sortColumn2, checkRow) = pivot2 Then
If asc3 = True And ThisArray(sortColumn3, checkRow) < pivot3 Then
compareFirstLoop = True
ElseIf asc3 = False And ThisArray(sortColumn3, checkRow) > pivot3 Then
compareFirstLoop = True
Else
compareFirstLoop = False
End If
Else
compareFirstLoop = False
End If
Else
compareFirstLoop = False
End If
End Function
Private Function compareSecondLoop(ThisArray As Variant, pivot1 As Variant, pivot2 As Variant, pivot3 As Variant, checkRow As Integer, sortColumn1 As Integer, asc1 As Boolean, sortColumn2 As Integer, asc2 As Boolean, sortColumn3 As Integer, asc3 As Boolean)
If asc1 = True And pivot1 < ThisArray(sortColumn1, checkRow) Then
compareSecondLoop = True
ElseIf asc1 = False And pivot1 > ThisArray(sortColumn1, checkRow) Then
compareSecondLoop = True
'Move to Second Column
ElseIf sortColumn2 <> -1 And ThisArray(sortColumn1, checkRow) = pivot1 Then
If asc2 = True And pivot2 < ThisArray(sortColumn2, checkRow) Then
compareSecondLoop = True
ElseIf asc2 = False And pivot2 > ThisArray(sortColumn2, checkRow) Then
compareSecondLoop = True
'Move to Third Column
ElseIf sortColumn3 <> -1 And ThisArray(sortColumn2, checkRow) = pivot2 Then
If asc3 = True And pivot3 < ThisArray(sortColumn3, checkRow) Then
compareSecondLoop = True
ElseIf asc3 = False And pivot3 > ThisArray(sortColumn3, checkRow) Then
compareSecondLoop = True
Else
compareSecondLoop = False
End If
Else
compareSecondLoop = False
End If
Else
compareSecondLoop = False
End If
End Function