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:
Không ạ, em muốn mỗi lần Insert Copied Cells thi nó coppy và chèn hàng ở trên chữ END anh ạ
 

File đính kèm

  • Them dong.xlsm
    14.4 KB · Đọc: 13
Upvote 0
Thực tế em chỉ muốn tăng thêm 1 hàng trống mà không làm mất đi công thức trong đó nên dùng Insert Copied Cell, em cmuốn nó chèn hàng mới ngay ở chỗ Button ạ
Trúng thì trúng, không trúng thì trượt:
Mã:
Sub ChenThemDong()


    Dim X&


    With ActiveWorkbook.ActiveSheet
        
        X = .[B100000].End(3).Row
        
        If Not UCase(.Cells(X, 2).Value) Like "END" Then
            
            Exit Sub
        
        Else
            
            Rows(X - 1).Insert
            .Range("C" & X) = .Range("B" & X)
        
        End If
    End With
 
Upvote 0
Thực tế em chỉ muốn tăng thêm 1 hàng trống mà không làm mất đi công thức trong đó nên dùng Insert Copied Cell, em cmuốn nó chèn hàng mới ngay ở chỗ Button ạ
Trời chỉ cần dòng lệnh: Sheet1.Range("B65500").End(xlUp).EntireRow.Insert
(do có chữ copied tưởng cần copy hàng trước khi chèn chứ)
 
Upvote 0
Bạn nhờ mọi ngừoi giúp code. Trong khi post cái file lên là .xlsx không có code. Ai biết bạn muốn làm gì. Chí ít thì cũng có cái code sẵn có trong đó, tùy nghi mà chỉnh sửa cho đúng với bài của bạn.

Tôi nghĩ bạn post bài kiểu này không ai đủ kiên nhẩn để hiểu được bạn muốn gì mà code giúp bạn!
Ôi, em xin lỗi ạ, vì mới tập tọe nên còn sai xót. Mong anh/chị thông cảm ạ. Em xin post lại file
 

File đính kèm

  • Book1.xlsm
    38.8 KB · Đọc: 10
Upvote 0
Híc, cảm ơn các bác đã góp ý, rõ ràng em đã kiểm tra trước khi up file lên mà không hiểu sao, thôi em chép code nhờ các bác vậy ạ???+-+-+-+
"Public Sub GPE()
Application.Calculation = xlCalculationManual
Dim CT1(), CT2(), NumR As Long, a As Long, b As Long, Chen As Long, I As Long
CT1 = [A11:M12].FormulaR1C1
CT2 = [A65000].End(xlUp).Offset(1, 5).Resize(43, 170).FormulaR1C1
Chen = InputBox("So Dong muon Chen them:", "GPE")
'----------
a = [A65000].End(xlUp).Row + 1: b = a + Chen - 1
Rows(a & ":" & b).Insert Shift:=xlDown
'---------------
For I = a To b
Range("A" & I).Resize(, 13).FormulaR1C1 = CT1
Next I
Range("F" & b + 1).Resize(43, 170).FormulaR1C1 = CT2
Range("A" & a & ":M" & b).Borders.LineStyle = xlHairline
Application.Calculation = xlCalculationAutomatic
End Sub"
Em muốn đổi đoạn code chỗ Border thành "kẻ viền đường thẳng đứng là nét liền, đường ngang là nét ...." ạ!
Thành thật xin lỗi các bác
 
Upvote 0
Cho mình hỏi là Trong VBA dùng lệnh nào để show all dòng bị ẩn (khi trước đó đã dùng Advanced Filter lọc tại chỗ) nhỉ?
Trả về trạng thái như chưa Advanced Filter (các dòng không bị hide, khoản cách đều nhau như ban đầu.)

Cảm ơn!

dùng lệnh nào để hide thì cũng dùng lệnh đó để unhide . lêu lêu -\\/.-\\/.
 
Upvote 0
Ừ hỉ. có vậy mà cứ nghỉ đi đâu cao siêu không á... cứ nghỉ là sẽ có nút lệnh gì đó như unhide row cơ chứ... làm 1 phát nó show hết ra. Cơ mà phải chơi chiêu Ad ngược lại cái ban đầu thôi...khứa khứa khứa..//**///**///**/
nói vậy hình như là đang đi sai đường rồi đó bồ ơi .
 
Upvote 0
Nhờ mọi người xem và sửa lỗi trong Code giúp em với ạ. Em trình bày cụ thể trong File rồi đó.( File này là của thầy BaTe)
Và nếu có thể xin giải thích giúp em đoạn này trong Code với ạ:

Tem = Split(Trim(Str), " ")
Target.Offset(, 1).Value = Tem(UBound(Tem))
Target.Value = Trim(Left(Str, Len(Str) - Len(Target.Offset(, 1))))

Hàm Split có chức năng gì ạ.
Em xin cảm ơn
 

File đính kèm

  • TachTen.xls
    33 KB · Đọc: 14
Upvote 0
Nhờ mọi người xem và sửa lỗi trong Code giúp em với ạ. Em trình bày cụ thể trong File rồi đó.( File này là của thầy BaTe)
Và nếu có thể xin giải thích giúp em đoạn này trong Code với ạ:

Tem = Split(Trim(Str), " ")
Target.Offset(, 1).Value = Tem(UBound(Tem))
Target.Value = Trim(Left(Str, Len(Str) - Len(Target.Offset(, 1))))

Hàm Split có chức năng gì ạ.
Em xin cảm ơn

Code bị lỗi khi target là empty.
Bẫy lỗi cho nó.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
Dim Tem, Str As String
If Target.Column = 3 And Target.Count = 1 Then
    If Target <> Empty Then
        Str = UCase(Target)
        Tem = Split(Trim(Str), " ")
        Target.Offset(, 1).Value = Tem(UBound(Tem))
        Target.Value = Trim(Left(Str, Len(Str) - Len(Target.Offset(, 1))))
    Else
        Target.Offset(, 1) = Empty
    End If
End If
Application.EnableEvents = True
End Sub
Muốn hiểu Split là gì thì ấn F1.
 
Upvote 0
Code bị lỗi khi target là empty.
Bẫy lỗi cho nó.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
Dim Tem, Str As String
If Target.Column = 3 And Target.Count = 1 Then
    If Target <> Empty Then
        Str = UCase(Target)
        Tem = Split(Trim(Str), " ")
        Target.Offset(, 1).Value = Tem(UBound(Tem))
        Target.Value = Trim(Left(Str, Len(Str) - Len(Target.Offset(, 1))))
    Else
        Target.Offset(, 1) = Empty
    End If
End If
Application.EnableEvents = True
End Sub
Muốn hiểu Split là gì thì ấn F1.
Em vẫn biết mọi người nói là không hiểu chổ nào thì mình vào F1 để được trợ giúp, vâng và em cũng đã làm thế rồi nhưng đằng này em cảm thấy vẫn chưa hiểu lắm bởi dịch từ ngôn ngữ nước ngoài về tiếng mẹ đẻ không phải lúc nào cũng chính xác. Vì vậy em muốn nhờ mọi người giảng lại 1 chút cho em bằng tiếng Việt ( theo ý hiểu của riêng mình) cho dể hiểu í mà.

Xin cảm ơn thầy Ba Tê
 
Lần chỉnh sửa cuối:
Upvote 0
Em vẫn biết mọi người nói là không hiểu chổ nào thì mình vào F1 để được trợ giúp, vâng và em cũng đã làm thế rồi nhưng đằng này em cảm thấy vẫn chưa hiểu lắm bởi dịch từ ngôn ngữ nước ngoài về tiếng mẹ đẻ không phải lúc nào cũng chính xác. Vì vậy em muốn nhờ mọi người giảng lại 1 chút cho em bằng tiếng Việt ( theo ý hiểu của riêng mình) cho dể hiểu í mà.

Xin cảm ơn thầy Ba Tê

Tiếng Anh tui cũng "ba hột, ba đồng", xem ví dụ, lần theo nó, làm thử với vài món "đồ" của mình xem kết quả mỗi món đồ đó khác nhau thế nào, "mò mẫm, rờ rẫm, sờ sẫm" riết rồi cũng "ra" thôi mà.
Tui "chuyên" mò kiểu đó, nên dị ứng với mấy bài viết với giọng văn tiếng nước ngoài " hai hột, hai đồng", dân quê tui hay gọi là "cà chớn lửa".
Ví dụ:
Ô A1 nhập "Doi tui co don nen yeu ai cung ba lon"
Viết Sub đại khái như vầy:
PHP:
Public Sub MoMam()
Dim Arr
Arr = Split([A1], " ")
[C1].Resize(, UBound(Arr) + 1) = Arr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Tiếng Anh tui cũng "ba hột, ba đồng", xem ví dụ, lần theo nó, làm thử với vài món "đồ" của mình xem kết quả mỗi món đồ đó khác nhau thế nào, "mò mẫm, rờ rẫm, sờ sẫm" riết rồi cũng "ra" thôi mà.
Tui "chuyên" mò kiểu đó, nên dị ứng với mấy bài viết với giọng văn tiếng nước ngoài " hai hột, hai đồng", dân quê tui hay gọi là "cà chớn lửa".

help của office có tiếng việt mà bác, tất nhiên là online trên trang của microsoft
 
Upvote 0
Mã:
Public Sub Chen_dong_DMCV()Application.Calculation = xlCalculationManual
Dim CT1(), CT2(), NumR As Long, a As Long, b As Long, Chen As Long, I As Long
CT1 = [A7:X7].FormulaR1C1
CT2 = [A65000].End(xlUp).Offset(1, 5).Resize(43, 24).FormulaR1C1
Chen = InputBox("So Dong muon Chen them:", "GPE")
'----------
a = [A65000].End(xlUp).Row + 1: b = a + Chen - 1
    Rows(a & ":" & b).Insert Shift:=xlDown
'---------------
For I = a To b
    Range("A" & I).Resize(, 24).FormulaR1C1 = CT1
Next I
Range("F" & b + 1).Resize(43, 24).FormulaR1C1 = CT2
Range("A" & a & ":X" & b).Borders.LineStyle = xlContinuous
Application.Calculation = xlCalculationAutomatic
End Sub
Mình dùng code này để chèn hàng, nhưng khi khóa và ẩn công thức trong bảng tính thì bị lỗi Run-time error '1004'. Mọi người giúp mình vừa khóa được công thức vừa dùng được code để chèn hàng không ạ. Cảm ơn cả nhà /-*+/
 
Upvote 0
Mã:
Public Sub Chen_dong_DMCV()Application.Calculation = xlCalculationManual
Dim CT1(), CT2(), NumR As Long, a As Long, b As Long, Chen As Long, I As Long
CT1 = [A7:X7].FormulaR1C1
CT2 = [A65000].End(xlUp).Offset(1, 5).Resize(43, 24).FormulaR1C1
Chen = InputBox("So Dong muon Chen them:", "GPE")
'----------
a = [A65000].End(xlUp).Row + 1: b = a + Chen - 1
    Rows(a & ":" & b).Insert Shift:=xlDown
'---------------
For I = a To b
    Range("A" & I).Resize(, 24).FormulaR1C1 = CT1
Next I
Range("F" & b + 1).Resize(43, 24).FormulaR1C1 = CT2
Range("A" & a & ":X" & b).Borders.LineStyle = xlContinuous
Application.Calculation = xlCalculationAutomatic
End Sub
Mình dùng code này để chèn hàng, nhưng khi khóa và ẩn công thức trong bảng tính thì bị lỗi Run-time error '1004'. Mọi người giúp mình vừa khóa được công thức vừa dùng được code để chèn hàng không ạ. Cảm ơn cả nhà /-*+/
Muốn vậy thì bạn phải có lệnh mở khóa ở đầu thủ tục và khóa lại ở cuối thủ tục
PHP:
Sub Chen_dong_DMCV()
    ActiveSheet.Protect Password:="Password của bạn"
    ...
    ActiveSheet.Unprotect Password:="Password của bạn"
End Sub
 
Upvote 0
Cảm ơn bác huuthang_bd nhưng em thử không được.
 

File đính kèm

  • Chen_Dong.xlsm
    19.9 KB · Đọc: 6
Upvote 0
Web KT

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

Back
Top Bottom