Chuyên đề giải đáp những thắc mắc về code VBA (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

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:
thầy ndu96081631 cho em hỏi thêm, em vẫn không tìm được chỗ nào có lệnh ẩn sheet mà kín vậy, click phải tên sheet không có unhide, của sổ VBAproject cũng không thấy có sheet hiện lên, cám ơn thầy
 
Upvote 0
em vẫn không tìm được chỗ nào có lệnh ẩn sheet mà kín vậy, click phải tên sheet không có unhide, của sổ VBAproject cũng không thấy có sheet hiện lên, cám ơn thầy
Ẩn bằng code luôn đó bạn. Ví dụ như file đó thì ẩn thế này: Sheets("Input").Visible = 2
 
Lần chỉnh sửa cuối:
Upvote 0
thầy ndu96081631 cho em hỏi thêm, em vẫn không tìm được chỗ nào có lệnh ẩn sheet mà kín vậy, click phải tên sheet không có unhide, của sổ VBAproject cũng không thấy có sheet hiện lên, cám ơn thầy

Có phải bạn tìm chỗ này?
Tại cửa sổ MS Excel, bạn nhấn tổ hợp phím Alt + F11. Tại cửa sổ Microsoft Visual Basic for Applications... hiện ra, bạn làm tiếp như hình dưới.

visible.jpg
 
Upvote 0
Hihi. Em biết chứ người hỏi đâu có biết đâu anh.

Code VBA không password, vào trong đó sẽ thấy ngay mà
Mã:
Sub ShowInput()
  With [COLOR=#ff0000]DialogSheets("Input")[/COLOR]
    [COLOR=#ff0000].Show[/COLOR]
    .EditBoxes("Input1").Text = ""
  End With
End Sub
(còn nếu không biết tí gì về VBA thì... không có gì để bàn nữa)
-----------------------------------
Có phải bạn tìm chỗ này?
Tại cửa sổ MS Excel, bạn nhấn tổ hợp phím Alt + F11. Tại cửa sổ Microsoft Visual Basic for Applications... hiện ra, bạn làm tiếp như hình dưới.

View attachment 145172

Trật lất! Bởi các sheet thuộc anh em nhà Macro4DialogSheet nó sẽ không cho bạn thấy dễ dàng thế đâu... Vậy nên việc dùng nó đễ viết virus cũng tỏ ra khá... nguy hiễm
(bạn cứ lấy file ở bài 242, vào cửa sổ VBA xem có thấy gì không?)
 
Upvote 0
Code VBA không password, vào trong đó sẽ thấy ngay mà
Mã:
Sub ShowInput()
  With [COLOR=#ff0000]DialogSheets("Input")[/COLOR]
    [COLOR=#ff0000].Show[/COLOR]
    .EditBoxes("Input1").Text = ""
  End With
End Sub
(còn nếu không biết tí gì về VBA thì... không có gì để bàn nữa)
-----------------------------------
(bạn cứ lấy file ở bài 242, vào cửa sổ VBA xem có thấy gì không?)
- em cũng biết tí về VBA, nhưng theo em tham khảo bài này của thầy http://www.giaiphapexcel.com/forum/showthread.php?31515-Tạo-Form-bằng-DialogSheet
thì code .EditBoxes("Input1").Text = "" là để gán cho cái input bằng rỗng thôi mà, đâu phải để ẩn sheet đó nhỉ, mong thầy nói rõ hơn, vì kiến thức nông cạn nhưng em muốn hiểu rõ vấn đề hơn
 
Upvote 0
Thông báo địa chỉ ờ

Em có câu lệnh
Mã:
eR = .[A50000].End(xlUp).Row + 1
em muống dùng " MsgBox eR" để nó thông báo đang ở địa chỉ nào? thì em fải sửa MsgBox như thế nào?
 
Upvote 0
Em có câu lệnh
Mã:
eR = .[A50000].End(xlUp).Row + 1
em muống dùng " MsgBox eR" để nó thông báo đang ở địa chỉ nào? thì em fải sửa MsgBox như thế nào?
Thử như thế này xem:
Mã:
Sub abc()
 Dim er
     er = Range("A" & Rows.Count).End(xlUp).Row + 1
       MsgBox "A" & er
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thử như thế này xem:
Mã:
Sub abc()
 Dim er
     er = Range("A" & Rows.Count).End(xlUp).Row [COLOR=#ff0000][B]+ 1[/B][/COLOR]
       MsgBox "A" & er
End Sub
Cảm ơn bạn!
Các bạn cho tôi hỏi thêm
Bây giờ muốn thay +1 thành 1 hằng số bất kỳ, hằng số này nằm ở ô F2 (ô màu vàng) thì
Mã:
er = Range("A" & Rows.Count).End(xlUp).Row [COLOR=#FF0000][B]+ 1[/B][/COLOR]
sẽ viết lại như thế nào?
xin cảm ơn các bạn
 

File đính kèm

Upvote 0
- em cũng biết tí về VBA, nhưng theo em tham khảo bài này của thầy http://www.giaiphapexcel.com/forum/showthread.php?31515-Tạo-Form-bằng-DialogSheet
thì code .EditBoxes("Input1").Text = "" là để gán cho cái input bằng rỗng thôi mà, đâu phải để ẩn sheet đó nhỉ, mong thầy nói rõ hơn, vì kiến thức nông cạn nhưng em muốn hiểu rõ vấn đề hơn

Tôi tô đỏ là cho bạn chú ý mà bạn lại chẳng chịu xem. Nhìn câu lệnh With DialogSheets("Input") thì phải biết trong file có 1 DialogSheet tên là "Input". Biết tên sheet rồi làm gì mà chẳng được (ẩn hiện tùy ý)
 
Upvote 0
Cảm ơn bạn!
Các bạn cho tôi hỏi thêm
Bây giờ muốn thay +1 thành 1 hằng số bất kỳ, hằng số này nằm ở ô F2 (ô màu vàng) thì
Mã:
er = Range("A" & Rows.Count).End(xlUp).Row [COLOR=#FF0000][B]+ 1[/B][/COLOR]
sẽ viết lại như thế nào?
xin cảm ơn các bạn
Thử như thế này:
Mã:
er = Range("A" & Rows.Count).End(xlUp).Row + [F2].Value
 
Upvote 0
Tôi tô đỏ là cho bạn chú ý mà bạn lại chẳng chịu xem. Nhìn câu lệnh With DialogSheets("Input") thì phải biết trong file có 1 DialogSheet tên là "Input". Biết tên sheet rồi làm gì mà chẳng được (ẩn hiện tùy ý)

Ý em hỏi ban đầu thầy dùng lệnh gì mà ẩn sheets("input"), chẳng lẽ thầy cho sheets("input").visible = false rồi sau đó xóa dòng code này đi à,
 
Upvote 0
Ý em hỏi ban đầu thầy dùng lệnh gì mà ẩn sheets("input"), chẳng lẽ thầy cho sheets("input").visible = false rồi sau đó xóa dòng code này đi à,

Chính xác là Sheets("Input").Visible = 2
Gõ dòng lệnh ấy trong cửa số Immediate là được rồi (khỏi cần phải tạo sub rồi lại mất công xóa đi)
Nói thêm: Trong cửa sổ VBA, cứ bấm Ctrl + G sẽ hiện ra cửa sổ Immediate
 
Upvote 0
Sự khác nhau giữa FormulaR1C1Local FormulaR1C1 là như thế nào?
vì tôi đi dạy tôi sử dụng
FormulaR1C1 và học viên hỏi FormulaR khác nhau như thế nào? và tôi đã giải thích rõ ràng về vấn đề này, tiếp tục tới Formulaarray vẫn ok, nhưng tới so sánh FormulaR1C1Local là bó tay, vì từ trước tới giờ thực hành cũng không thấy nó có sự khác biệt gì? mong được biết sự khác biệt giữa chúng và cho ví dụ cụ thể, xin chân thành cảm ơn các thành viên trên GPE

 
Upvote 0
Sự khác nhau giữa FormulaR1C1Local FormulaR1C1 là như thế nào?


Theo tôi được biết thì FormulaR1C1Local có liên quan đến Local's Language Settings. Cụ thể chúng khác nhau như thế nào thì ta phải cài Windows theo ngôn ngữ khác tiếng Anh để thử nghiệm mới biết (chắc là chúng sẽ có sự hiển thị tương ứng với ngôn ngữ thiết lập trên máy)
 
Upvote 0
Sự khác nhau giữa FormulaR1C1Local FormulaR1C1 là như thế nào?
vì tôi đi dạy tôi sử dụng
FormulaR1C1 và học viên hỏi FormulaR khác nhau như thế nào? và tôi đã giải thích rõ ràng về vấn đề này, tiếp tục tới Formulaarray vẫn ok, nhưng tới so sánh FormulaR1C1Local là bó tay, vì từ trước tới giờ thực hành cũng không thấy nó có sự khác biệt gì? mong được biết sự khác biệt giữa chúng và cho ví dụ cụ thể, xin chân thành cảm ơn các thành viên trên GPE

Trong link này, phần ví dụ còn thiếu nên có thể gây hiểu lầm. Ví dụ trong đó khi dùng Excel bản tiếng Anh - Mỹ, công thức A11=SUM(A1:A10). Khi mở file ở máy dùng Excel tiếng Đức, các công thức sẽ tự chuyển sang tiếng Đức, property Range("A11").FormulaR1C1Local sẽ trả về "=SUMME(Z1S1:Z10S1)".
Theo mình thì ví dụ trên sẽ rõ ngay khi đưa thêm
Range("A11").FormulaR1C1 trả về "=SUM(R1C1:R10C1)". Nghĩa là FormulaR1C1 luôn trả về chuỗi chứa công thức như ở bản Excel tiếng Anh, kể cả khi đang dùng Excel ngôn ngữ khác; FormulaR1C1Local trả về chuỗi chứa công thức tùy thuộc vào ngôn ngữ của bản Excel đang dùng. Khi ô không chứa công thức thì 2 thuộc tính trên đều trả về giá trị giống nhau là range("A11").text
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu dạy học sinh thì chỉ nên dạy những cái căn bản.
Nếu học trò tôi hỏi những câu hỏi như thế thì tôi trả lời:
"Ký tự A trong VBA là từ Application. Excel và VBA vì là ngôn ngữ thực dụng cho nên chúng có trăm vạn methods và attributes để tuỳ theo từng trường hợp mà sử dụng. Học hết thì bạc cả đầu. Là người thực tế, ta chỉ nên học nguyên tắc cấu trúc, cách thiết kế dữ liệu, và cách test/debug kết quả thôi. Tất cả những chuyện chi tiết còn lại, nếu ta chịu khó dùng debug sẽ nghiệm ra hết"
 
Upvote 0
Chắc phải học theo cách trả lời của anh VetMini rồi, chứ tìm hiểu mấy cái đó đau đầu thật đó, lúc trước tìm hiểu range và cells và các kiểu viết tắt, tại sao lúc gõ dấu . nó ra các thuộc tính lúc gõ nó không ra, và tại sao khi gán sheets(“abc”).range(“a1:b1”) nó không chịu mà sheet1.range(“a1:b1”) thì nó chịu ..v..v, mấy cái đó nghiên cứu lâu lắm mới hiểu quy tắc của nó để trả lời, và bây giờ lại phải nghiên cứu tới FormulaR1C1Local và ... nữa.Thật là để dạy được món nào đó, phải hiểu cặn kẽ từng cái thì mới có thể dạy tốt được, làm được thôi không nói được gì mà phải biết giải thích nữa ...
 
Upvote 0
Web KT

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

Back
Top Bottom