Chuyên đề giải đáp những thắc mắc về code VBA

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cái XXX dó là một object của một class bên trong có ít nhất là một cái mảng và một phương thức tên là sort
em nhớ nó là 1 hàm của thư viện chứ không phải là class do người dùng viết anh ạ
và em đã tìm được nó trong diễn đàn này trong 1 file đính kèm, mà giờ chẳng biết file đó là file nào để mà tìm lại
nội dung nó tương tự như này
chỗ XXXXXX đấy ạ
Mã:
Sub GPE()
    Dim objArray As Object
    Set objArray = CreateObject("XXXXXX")
    ReDim myArray(0 To 5) As Integer
    myArray(0) = 4
    myArray(1) = 1
    myArray(2) = 5
    myArray(3) = 6
    myArray(4) = 7
    myArray(5) = 2
    myArray = objArray.Sort(myArray)
    Range("A1").Resize(6, 0) = myArray
End Sub
[code]
 
Upvote 0
Chào mọi người. như ta có code sau để Set NameRibbon = RIBBON
RIBBON là tab trên Ribbon của người dùng tạo
Mã:
Public NameRibbon As IRibbonUI
Sub OnLoadRibbon(RIBBON As IRibbonUI)
   Set NameRibbon = RIBBON
End Sub
nhưng nếu có 1 câu lệnh End thì biến NameRibbon sẽ mất
và như thế lại phải đóng file mở lại để có thể Set NameRibbon = RIBBON lại được nữa
vậy làm sao có thể set luôn khi đã biết id của nó không ví dụ như TAB người dùng đó có ID là "XYZ"
 
Lần chỉnh sửa cuối:
Upvote 0
em nhớ nó là 1 hàm của thư viện chứ không phải là class do người dùng viết anh ạ
và em đã tìm được nó trong diễn đàn này trong 1 file đính kèm, mà giờ chẳng biết file đó là file nào để mà tìm lại
nội dung nó tương tự như này
chỗ XXXXXX đấy ạ
Mã:
Sub GPE()
    Dim objArray As Object
    Set objArray = CreateObject("XXXXXX")
    ReDim myArray(0 To 5) As Integer
    myArray(0) = 4
    myArray(1) = 1
    myArray(2) = 5
    myArray(3) = 6
    myArray(4) = 7
    myArray(5) = 2
    myArray = objArray.Sort(myArray)
    Range("A1").Resize(6, 0) = myArray
End Sub
[code]
Có phải bạn nói cái này không?
PHP:
CreateObject("System.Collections.ArrayList")
 
Upvote 0
Có phải bạn nói cái này không?
PHP:
CreateObject("System.Collections.ArrayList")
vâng, cảm ơn anh huuthang_bd, đúng là nó rồi.
sẵn cho em hỏi thêm, nếu dùng cách này để sắp xếp dữ liệu thì nó có nhanh hơn nếu dùng vòng lặp so sánh thông thường hay dùng CreateObject("MSScriptControl.ScriptControl") để sắp xếp không anh nhỉ
nếu dùng CreateObject("System.Collections.ArrayList")
thì có khác gì so với CreateObject("MSScriptControl.ScriptControl") hay không
 
Upvote 0
vâng, cảm ơn anh huuthang_bd, đúng là nó rồi.
sẵn cho em hỏi thêm, nếu dùng cách này để sắp xếp dữ liệu thì nó có nhanh hơn nếu dùng vòng lặp so sánh thông thường hay dùng CreateObject("MSScriptControl.ScriptControl") để sắp xếp không anh nhỉ
nếu dùng CreateObject("System.Collections.ArrayList")
thì có khác gì so với CreateObject("MSScriptControl.ScriptControl") hay không
Chỉ là gửi link tham khảo:
http://www.giaiphapexcel.com/dienda...o-dãy-số-ngẫu-nhiên-không-trùng.125815/page-3

http://www.giaiphapexcel.com/dienda...-tự-động-sắp-xếp-tăng-dần-trong-1-cell.98151/

So sánh nhanh chậm phải vào trường hợp cụ thể, xét nhiều trường hợp của dữ liệu mới đánh giá được. (Ví dụ: so sánh tốc độ mổ gà / mổ trâu của 2 con dao, không tính các yếu tố khác ngoài dao).
 
Upvote 0
em nhớ nó là 1 hàm của thư viện chứ không phải là class do người dùng viết anh ạ

Tôi có nói nó là class do ngừoi dùng viết đâu?
CreateObject("System.Collections.ArrayList")
Bài #1108 nói về 2 cái, 1 là object2 là class
ArrayList là một class được định nghĩa trong thư viên System.Collection

Trước khi tiếp tục tìm hiểu thêm về ba cái mớ sọt siếc này nọ, bạn cần học hỏi thêm về khái niệm thư viện, hàm và class. Hàm/phương thức/thủ tục là một phần tử của class.

 
Upvote 0
Chỉ là gửi link tham khảo:
http://www.giaiphapexcel.com/diendan/threads/nhờ-chỉnh-code-tạo-dãy-số-ngẫu-nhiên-không-trùng.125815/page-3

http://www.giaiphapexcel.com/diendan/threads/nhờ-giúp-làm-hàm-tự-động-sắp-xếp-tăng-dần-trong-1-cell.98151/

So sánh nhanh chậm phải vào trường hợp cụ thể, xét nhiều trường hợp của dữ liệu mới đánh giá được. (Ví dụ: so sánh tốc độ mổ gà / mổ trâu của 2 con dao, không tính các yếu tố khác ngoài dao).

Chính MS cảnh báo rằng ScriptControl là cái đặc biệt chỉ nên dùng cho dân làm Web. So sánh cái quái gì nữa. Chả biết ngừoi hỏi câu này lấy ở đâu ra để mà thắc mắc. Lượm lặt code thì chịu khó sử dụng chúng mọt thời gian cho quen rồi hãy nghĩ đến việc so sánh. Ít nhất khi đó ngừoi ta có cái cơ sở để benchmark.
 
Upvote 0
Nhờ các anh xem hộ em code hidesheet bị lỗi debug
----------------------------------------------------------
Sub HideSheets()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
For Each ws In ThisWorkbook.Worksheets
If InStr(1, ws.Name, "Sheet17", vbTextCompare) = 0 Then
ws.Visible = xlVeryHidden
End If
Next ws
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
 

File đính kèm

  • test 1.xlsm
    168.5 KB · Đọc: 5
Upvote 0
Nhờ các anh xem hộ em code hidesheet bị lỗi debug
----------------------------------------------------------
Sub HideSheets()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
For Each ws In ThisWorkbook.Worksheets
If InStr(1, ws.Name, "Sheet17", vbTextCompare) = 0 Then
ws.Visible = xlVeryHidden
End If
Next ws
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
1. ws.CodeName, "Sheet17"
hoặc:
2. ws.Name, "Thong tin"
 
Upvote 0
Nhờ các anh xem hộ em code hidesheet bị lỗi debug
----------------------------------------------------------
Sub HideSheets()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
For Each ws In ThisWorkbook.Worksheets
If InStr(1, ws.Name, "Sheet17", vbTextCompare) = 0 Then
ws.Visible = xlVeryHidden
End If
Next ws
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
Sao không so sánh bằng mà dùng hàm InStr?
 
Upvote 0
e chỉ biết sử dụng code thôi anh à! lỗi này bác Befaint sửa rồi ạ
biết sử dụng chứ không biết viết sao bạn (thông cảm! chỉ thắc mắc thôi chứ không có ý khác, tại thấy mấy bài trước có code nhìn kinh vãi)
à! sẵn gửi cho bạn code FixRowHight ở mấy bài trước bạn nhờ sửa lỗi
mình có xem và phát hiện ra code sẽ lỗi nếu ngay trên trang tính của bạn có lỗi
ví dụ #VALUE hoặc tương tự.... có lỗi là nó tèo ngay
code này bạn chỉ cần truyền vùng cần fix vào thôi, hoặc lười thì nó tự tìm vùng mà chỉnh cho bạn
tốt nhất nên cho code này vào Addins rồi dùng. tại vì trong quá trình sử dụng code sẽ tạo 1 sheet tạm để chạy code
 

File đính kèm

  • FixRowHight.txt
    26.8 KB · Đọc: 5
Upvote 0
So sánh chuỗi trong VBA người ta thường dùng Like
Và trước khi so sánh thì cần chuyển về cùng kiểu chữ in hoa hay chữ thường.
Trong trường hợp này tên sheet là do mình đặt nên tôi nghĩ so sánh bằng trực tiếp không cần chuyển chữ hoa-thường cũng không vấn đề gì.
 
Upvote 0
Chào mọi người,

Hiện tại e có useform này, em muốn paste dữ liệu đã copy sẵn bên cột clipboard sang useform, nhưng không được, mọi người có code nào có thể hỗ trợ giùm em với ạ
 

File đính kèm

  • Book1.xlsm
    232.6 KB · Đọc: 7
  • Untitled.png
    Untitled.png
    187.6 KB · Đọc: 11
Upvote 0
Chào mọi người,

Hiện tại e có useform này, em muốn paste dữ liệu đã copy sẵn bên cột clipboard sang useform, nhưng không được, mọi người có code nào có thể hỗ trợ giùm em với ạ

Sao bạn làm phức tạp vấn đề thế.
- Bạn hãy nêu lại câu hỏi rõ ràng, mục đích , có đầu đuôi xem nào?
 
Upvote 0
Hi bạn,

Mục đích của mình là copy từ những trang web hoặc ứng dụng bên ngoài, sử dụng chế độ clipboar để có thể copy cùng lúc nhiều thứ như trong hình, sau đó sẽ mở useform và paste những thứ đã copy được vào useform này , bạn hiểu ý mình không ?
 
Upvote 0
Cho em hỏi? em mở file cell lên bị báo lỗi như này làm thế nào ạ:
lỗi mở excel Error desciption: open method of workbooks class faied
 
Upvote 0
Web KT
Back
Top Bottom