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 giải thích rõ ra chứ.Và có file với code.Mọi người còn biết.Sheets chỉ định ẩn thì nó cố định hay là thay đổi thường xuyên.

Bạn xem giúp nha
GỘP 2 NÚT ẨN HIỆN THÀNH 1 NÚT
=>ẤN LẦN 1 LÀ ẨN,LẦN 2 LÀ HIỆN
mình thấy người ta làm, mà mình ko biết làm sao
 

File đính kèm

  • Book2.xlsb
    21.3 KB · Đọc: 7
Upvote 0
Code:

With Sheet gì đó
If .Visible = xlSheetVeryHidden Then
.Visible = True
Else
.Visible = Not .Visible
End If
End With
 
Upvote 0
Gửi các anh chị. Em mới tự học và làm thử code trên file excel công việc của em. Có đoạn code tự làm này mà không hiểu sao nó làm file của em tính toán chậm quá ạ. Mọi người giúp em khắc phục được không ạ
Nhập tháng làm việc
Mã:
Private Sub Workbook_Open()
Dim thang As Integer
Dim nam As Integer
Sheets("luong").Activate
Application.Calculation = xlCalculationManual
On Error Resume Next
thang = InputBox("chon thang lam viec", , Month(Date))
On Error GoTo 0
Range("b2").Value = thang
If thang > 12 Or thang <= 0 Then
   MsgBox "Chua chon thang", vbCritical
   Range("b2").Value = Month(Date)
End If
On Error Resume Next
nam = InputBox("chon nam lam viec", , Year(Date))
On Error GoTo 0
Range("b3").Value = nam
If nam <= 2007 Then
   MsgBox "Chua chon nam", vbCritical
   Range("b3").Value = Year(Date)
End If
Application.Calculation = xlCalculationSemiautomatic
End Sub
End Sub
Module1:
Mã:
Function thanglv() As Date
Application.Volatile
thanglv = DateSerial(Range("b3").Value, Range("b2").Value, 15)
End Function
Code này em dùng để nhập tháng làm việc sau đó lấy hàm lấy ngày tháng làm việc đó dùng trong công thức khoảng 300 dòng.
ai giúp em tìm ra nguyên nhân file của em bị chậm khi dùng code này, mỗi khi em copy dữ liệu đi và đến file nó calculator lâu được không ạ.
Em quên gửi file
 

File đính kèm

  • Tính lương kì 1 (1).xlsm
    126.5 KB · Đọc: 10
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Sub laycode()
Dim a As Long, arrBOM, dic As Object, code, I As Long
Set dic = CreateObject("scripting.dictionary")
a = Sheet2.Range("c" & Rows.Count).End(xlUp).Row 'lay so dong cuoi cung
arrBOM = Sheet2.Range("c4:i" & a).Value ' kich thuoc mang BOM
For I = 1 To UBound(arrBOM) ' bien I de xet mang
If arrBOM(I, 1) <> "" And Left(arrBOM(I, 1), 2) <> "4-" Then
  If Not dic.Exists(arrBOM(I, 1)) Then
  code = arrBOM(I, 1)
  dic.Add arrBOM(I, 1), True
End If
End If
Next I
Sheet6.Cells(7, 3).Resize(2000).Value = code
End Sub
Em đang tập tành viết 1 code, các code trên đều là đi mượn của mọi người ạ, hiện giờ đang bị lỗi là nó chỉ trả về 1 giá trị thôi ạ, mọi người cho em hỏi nó đang sai ở đâu ạ. em xin cảm ơn!
 
Upvote 0
Mã:
Sub laycode()
Dim a As Long, arrBOM, dic As Object, code, I As Long
Set dic = CreateObject("scripting.dictionary")
a = Sheet2.Range("c" & Rows.Count).End(xlUp).Row 'lay so dong cuoi cung
arrBOM = Sheet2.Range("c4:i" & a).Value ' kich thuoc mang BOM
For I = 1 To UBound(arrBOM) ' bien I de xet mang
If arrBOM(I, 1) <> "" And Left(arrBOM(I, 1), 2) <> "4-" Then
  If Not dic.Exists(arrBOM(I, 1)) Then
  code = arrBOM(I, 1)
  dic.Add arrBOM(I, 1), True
End If
End If
Next I
Sheet6.Cells(7, 3).Resize(2000).Value = code
End Sub
Em đang tập tành viết 1 code, các code trên đều là đi mượn của mọi người ạ, hiện giờ đang bị lỗi là nó chỉ trả về 1 giá trị thôi ạ, mọi người cho em hỏi nó đang sai ở đâu ạ. em xin cảm ơn!
Bạn sai ở chỗ cái code kia nó chỉ nhận 1 giá trị thôi mà.Bạn xem code.
Mã:
Sub laycode()
Dim a As Long, arrBOM, dic As Object, code, I As Long, b As Long
Set dic = CreateObject("scripting.dictionary")
a = Sheet2.Range("c" & Rows.Count).End(xlUp).Row 'lay so dong cuoi cung
arrBOM = Sheet2.Range("c4:i" & a).Value ' kich thuoc mang BOM
ReDim code(1 To UBound(arrBOM), 1 To 1)
For I = 1 To UBound(arrBOM) ' bien I de xet mang
If arrBOM(I, 1) <> "" And Left(arrBOM(I, 1), 2) <> "4-" Then
  If Not dic.Exists(arrBOM(I, 1)) Then
  b = b + 1
  code(b, 1) = arrBOM(I, 1)
  dic.Add arrBOM(I, 1), True
End If
End If
Next I
Sheet6.Cells(7, 3).Resize(2000).Value = code
End Sub
 
Upvote 0
NHờ xem code Advanced Filter tại sao không chạy
Cùng 1 cấu trúc mà không hiểu sao Advanced Filter của em không chạy. Các anh chị chỉ giúp nguyên nhân với. Em đã thử 1 số tình huống mà vẫn không chịu ra kết quả như mong muốn. Em cảm ơn.
 

File đính kèm

  • Test_AdvFilter.xlsm
    656.8 KB · Đọc: 6
Upvote 0
NHờ xem code Advanced Filter tại sao không chạy
Cùng 1 cấu trúc mà không hiểu sao Advanced Filter của em không chạy. Các anh chị chỉ giúp nguyên nhân với. Em đã thử 1 số tình huống mà vẫn không chịu ra kết quả như mong muốn. Em cảm ơn.
Hình như "mà thì là" cột G sheet "TongHop" không phải Date.
 
Upvote 0
NHờ xem code Advanced Filter tại sao không chạy
Cùng 1 cấu trúc mà không hiểu sao Advanced Filter của em không chạy. Các anh chị chỉ giúp nguyên nhân với. Em đã thử 1 số tình huống mà vẫn không chịu ra kết quả như mong muốn. Em cảm ơn.
Bạn phạm 3 lỗi sơ đẳng.

1. Cột G không chứa ngày tháng. Nó chỉ là ngày tháng cho mắt của bạn nhưng với Excel đó là text - ngày tháng nhái.

Biến thành ngày tháng theo chuẩn Excel: chọn TongHop!G4:G10000 -> Data -> text to columns -> Next -> Next -> chọn option Date -> bên cạnh chọn DMY -> Finish

2. Không có cái gọi là "=<". Chỉ có cái gọi là "<=". Sửa Data!R3

3. Sửa thành
Mã:
Sheet3.Range("B3:J10000").AdvancedFilter 2, Sheet4.[O2:R3], Sheet4.[B3:H3]

Để như cũ bạn chỉ nhận được cột B.
 
Upvote 0
Bạn phạm 3 lỗi sơ đẳng.

1. Cột G không chứa ngày tháng. Nó chỉ là ngày tháng cho mắt của bạn nhưng với Excel đó là text - ngày tháng nhái.

Biến thành ngày tháng theo chuẩn Excel: chọn TongHop!G4:G10000 -> Data -> text to columns -> Next -> Next -> chọn option Date -> bên cạnh chọn DMY -> Finish

2. Không có cái gọi là "=<". Chỉ có cái gọi là "<=". Sửa Data!R3

3. Sửa thành
Mã:
Sheet3.Range("B3:J10000").AdvancedFilter 2, Sheet4.[O2:R3], Sheet4.[B3:H3]

Để như cũ bạn chỉ nhận được cột B.
Cảm ơn anh đã giải đáp.
cả 3 lỗi anh nêu đều đúng. Tuy nhiên cái lỗi thứ 3 như anh thấy ở cái Sub Test_AdvFilter cho sheet Ví dụ 2 vẫn chạy được là sao nhỉ ?
 
Upvote 0

File đính kèm

  • Tính lương kì 1 (1).xlsm
    160.3 KB · Đọc: 10
Upvote 0
Ai chỉ mình dòng code để thay đổi chiều cao tất cả các dòng thuộc vùng đã select với
Ví dụ chiều cao mỗi dòng tăng lên 2 đơn vị
 
Upvote 0
Select nhiều dòng thì nó lấy chiều cao dòng trên cùng làm chuẩn, sao lại không có tác dụng gì?
Vầy mới được Thảo ơi

Selection.RowHeight = Cells(Selection.Row, 1).RowHeight + 2

Theo kinh nghiệm thì khi mình chọn 2 dòng không cùng độ cao thì code nó ngu ngu sao ấy
 
Upvote 0
Web KT

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

Back
Top Bottom