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:
Bạn nhận xét sai rồi. Tuy nhiên, tập nhận xét nhiều sẽ quen.
Với 1 sheet, phương thức Select mặc định là sheet đang active (activated)
Với nhiều sheets, trước khi select, bạn phải activate sheet
Code của bạn chỉ cần thêm
Sheets(j).Activate
Trước dòng
Sheets(j).Range("C1:S500").Select
 
Upvote 0
Bạn nhận xét sai rồi. Tuy nhiên, tập nhận xét nhiều sẽ quen.
Với 1 sheet, phương thức Select mặc định là sheet đang active (activated)
Với nhiều sheets, trước khi select, bạn phải activate sheet
Code của bạn chỉ cần thêm
Sheets(j).Activate
Trước dòng
Sheets(j).Range("C1:S500").Select
Em làm được rồi, em sẽ chú ý hơn những lần sau. Cám ơn anh nhiều
 
Upvote 0
Chào anh chị GPE,
Em có đoạn code muốn copy giá trị sheets như bên dưới, khi chạy báo lỗi dòng
PHP:
Sheets(j).Range("C1:S500").Select
anh chị kiểm tra giúp em nhé. em cám ơn ạ
PHP:
Sub copygiatri()
Dim j As Integer
Application.DisplayAlerts = False
    For j = 8 To Sheets.Count
        Sheets(j).Range("C1:S500").Select
        Selection.copy
    Selection.PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
    Next j
Application.DisplayAlerts = True
End Sub
Về phần tại sao báo lỗi thì các bài trên đã nói rồi. Tôi chỉ gợi ý bạn cách khác để rút gọn
1>
Mã:
Sub copygiatri()
  Dim j As Integer
  For j = 8 To Sheets.Count
       With Sheets(j).Range("C1:S500")
          .copy
          .PasteSpecial Paste:=xlPasteValues
       End With
    Next j
End Sub
Hoặc
2>
Mã:
Sub copygiatri()
  Dim j As Integer
  For j = 8 To Sheets.Count
       With Sheets(j).Range("C1:S500")
          .Value = .Value
       End With
    Next j
End Sub
 
Upvote 0
cho mình ké top chút nha, mình tạo macro trong excel mấy hôm trước tạo bình thường, nhưng bây giờ thị bị lỗi rồi, mình chỉ tạo được macro cho từng file excel thôi, không tao được macro dùng cho nhiều file excel. mọi người giúp mình nha, mình xài bản tiếng trung nên không biết nó thông báo gi, minh chọn 2 dòng dưới thì tạo được macro, còn chọn dòng trên cùng thì không tạo được.
 

File đính kèm

  • hinh.jpg
    hinh.jpg
    276.1 KB · Đọc: 6
  • hinh1.jpg
    hinh1.jpg
    280 KB · Đọc: 4
Upvote 0
cho mình ké top chút nha, mình tạo macro trong excel mấy hôm trước tạo bình thường, nhưng bây giờ thị bị lỗi rồi, mình chỉ tạo được macro cho từng file excel thôi, không tao được macro dùng cho nhiều file excel. mọi người giúp mình nha, mình xài bản tiếng trung nên không biết nó thông báo gi, minh chọn 2 dòng dưới thì tạo được macro, còn chọn dòng trên cùng thì không tạo được.
Đang hỏi bên đây cơ mà?
http://www.giaiphapexcel.com/dienda...g-mọi-người-giúp-mình-với.128044/#post-802102
 
Upvote 0
Cho em hỏi sao tên Macro của em bị dài thế nhỉ? có cách nào sửa không? lắm lúc nhìn hoa hết cả mắt! em xin cảm ơn
 

File đính kèm

  • 2.png
    2.png
    104.5 KB · Đọc: 21
Upvote 0
em gỡ hẳn đi xong add lại macro nó vẫn bị dài thế! giống như kiểu bật file khác có marco file, nhưng em mở 1 file thôi ạ!
cứ nhấn vào chạy thử đi bạn, vẫn chạy được là được rồi, không ảnh hưởng gì đến hòa bình thế giới đâu:D:p
 
Upvote 0
sẵn mọi người cho mình hỏi vấn đề này
mình nhớ hình như có 1 cách sắp xếp theo thứ tự tăng dần hoặc giảm dần dùng lệnh XXX.sort (mảng 1 chiều) mà quên mất chỗ XXX đó là cái gì, mong mọi người chỉ lại
mình nhớ mang máng nó là crep... hay con... gì gì đấy mà tìm google hoài chả ra
 
Upvote 0
sẵn mọi người cho mình hỏi vấn đề này
mình nhớ hình như có 1 cách sắp xếp theo thứ tự tăng dần hoặc giảm dần dùng lệnh XXX.sort (mảng 1 chiều) mà quên mất chỗ XXX đó là cái gì, mong mọi người chỉ lại
mình nhớ mang máng nó là crep... hay con... gì gì đấy mà tìm google hoài chả ra

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
 
Upvote 0
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
Web KT

Bài viết mới nhất

Back
Top Bottom