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:
Chẳng hạn workbook của em nó có nhiều sheets chẳng hạn. Thì có Phải khai bao biến hay như thế nào không ạ
Vậy dùng thế này.
Mã:
Sub GPE()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
    If sh.Name = "a" Or sh.Name = "b" Then MsgBox "lam dai cong viec gi do"
Next sh
End Sub
 
Upvote 0
Vậy dùng thế này.
Mã:
Sub GPE()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
    If sh.Name = "a" Or sh.Name = "b" Then MsgBox "lam dai cong viec gi do"
Next sh
End Sub
Nếu như mà em muốn làm gì đó trên cả 2 sheet a và b. Chẳng hạn a1 của cả 2 sheet cùng 1 kiểu thì viết đường dẫn vào từng sheet 1 ạ
 
Upvote 0
Mã:
Sub Boimau()
  Dim ws As Worksheet, LastRow As Long
  For Each ws In Worksheets
    If ws.Name = "Makikaeshi" Or ws.Name = "Yokomaki" Or ws.Name = "Tsunagi" Then
      With ws.Activate
        LastRow = .Cells(.Rows.Count, "H").End(xlUp).Row
      ws.Range("N7:O" & LastRown).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
      End With

    End If
  Next ws
End Sub
Nhờ các thầy xem giúp em. đoạn code tren em đang sai ở chỗ nào với ạ, mà không thấy nó chạy
 
Upvote 0
Mã:
Sub Boimau()
  Dim ws As Worksheet, LastRow As Long
  For Each ws In Worksheets
    If ws.Name = "Makikaeshi" Or ws.Name = "Yokomaki" Or ws.Name = "Tsunagi" Then
      With ws.Activate
        LastRow = .Cells(.Rows.Count, "H").End(xlUp).Row
      ws.Range("N7:O" & LastRown).Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
      End With

    End If
  Next ws
End Sub
Nhờ các thầy xem giúp em. đoạn code tren em đang sai ở chỗ nào với ạ, mà không thấy nó chạy
Bạn xem thử code dưới đây
Các dòng có dấu ' là lệnh cũ, dưới liền kề là mới
Mã:
Sub Boimau()
  Dim ws As Worksheet, LastRow As Long
  For Each ws In Worksheets
    If ws.Name = "Makikaeshi" Or ws.Name = "Yokomaki" Or ws.Name = "Tsunagi" Then
      'With ws.Activate
      ws.Activate
        'LastRow = .Cells(.Rows.Count, "H").End(xlUp).Row
        LastRow = Range("H" & Rows.Count).End(xlUp).Row
      'ws.Range("N7:O" & LastRown).Interior
      With ws.Range("N7:O" & LastRow).Interior '<-- LastRown sua thanh LastRow
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0.799981688894314
        .PatternTintAndShade = 0
      End With

    End If
  Next ws
End Sub
 
Upvote 0
Nhờ các anh chị giúp CODE ạ. Tôi muốn viết 1 macro lấy tên đối tượng mình click vào mà chưa làm được. Xin cám ơn trước ạ!
 

File đính kèm

Upvote 0
chào các thầy cô. cho em hỏi 1 chút à. có code nào khi mà em mở 1 file excell A lên. thì đồng thời file excell B ở thư mục khác sẽ cũng được mở lên cùng không ạ.
 
Upvote 0
chào các thầy cô. cho em hỏi 1 chút à. có code nào khi mà em mở 1 file excell A lên. thì đồng thời file excell B ở thư mục khác sẽ cũng được mở lên cùng không ạ.
Có bạn viết code mở file B rồi vứt nó vào sự kiện mở file trong excel A là được nhé.
 
Upvote 0
Nhờ các Bạn chỉ giúp mình gộp code bên dưới:
Mã:
If sArr(I, 23) <> Empty Then
        If Month(sArr(I, 23)) < 10 Then
            dArr(I, 3) = Right(sArr(I, 23), 2)
        ElseIf Month(sArr(I, 23)) > 9 Then
            dArr(I, 3) = Right(sArr(I, 23), 2) + 1
    End If
End If

    If sArr(I, 23) = Empty Then
            dArr(I, 3) = "kg"
        End If
Xin cảm ơn.
 
Upvote 0
Nhờ các Bạn chỉ giúp mình gộp code bên dưới:
Mã:
Xin cảm ơn.
[/QUOTE]
Bạn gộp vậy xem sao.
[CODE]If sArr(I, 23) <> Empty Then
        If Month(sArr(I, 23)) < 10 Then
            dArr(I, 3) = Right(sArr(I, 23), 2)
        ElseIf Month(sArr(I, 23)) > 9 Then
            dArr(I, 3) = Right(sArr(I, 23), 2) + 1
    End If
Else
   dArr(I, 3) = "kg"
End If
 
Upvote 0
Dear A/c có cách nào giúp tốc độ code phia dưới nhanh hơn dc ko , nhờ a/c giúp
Code dưới là ghi dữ liệu từ textbox trên userform vào sheet

Mã:
Private Sub CommandButton5_Click()

Dim lastrow As Long
Dim i As Long
With Sheets("Pak_in")
For i = 1 To 115 Step 6
lastrow = Sheets("Pak_in").Cells(Rows.Count, "D").End(xlUp).Row + 1
If Controls("TextBox" & i) = "" Then Exit Sub
.Range("D" & lastrow) = Controls("TextBox" & i)
.Range("E" & lastrow) = Controls("TextBox" & i + 1)
.Range("F" & lastrow) = Controls("TextBox" & i + 2)
.Range("G" & lastrow) = Controls("TextBox" & i + 3)
.Range("H" & lastrow) = Controls("TextBox" & i + 4).Value
.Range("I" & lastrow) = Controls("TextBox" & i + 5)

 Controls("TextBox" & i) = ""
 Controls("TextBox" & i + 1) = ""
 Controls("TextBox" & i + 2) = ""
 Controls("TextBox" & i + 3) = ""
 Controls("TextBox" & i + 4) = ""
 Controls("TextBox" & i + 5) = ""
Next i
End With
End Sub
 
Upvote 0
Dear A/c có cách nào giúp tốc độ code phia dưới nhanh hơn dc ko , nhờ a/c giúp
Code dưới là ghi dữ liệu từ textbox trên userform vào sheet

Mã:
Private Sub CommandButton5_Click()

Dim lastrow As Long
Dim i As Long
With Sheets("Pak_in")
For i = 1 To 115 Step 6
lastrow = Sheets("Pak_in").Cells(Rows.Count, "D").End(xlUp).Row + 1
If Controls("TextBox" & i) = "" Then Exit Sub
.Range("D" & lastrow) = Controls("TextBox" & i)
.Range("E" & lastrow) = Controls("TextBox" & i + 1)
.Range("F" & lastrow) = Controls("TextBox" & i + 2)
.Range("G" & lastrow) = Controls("TextBox" & i + 3)
.Range("H" & lastrow) = Controls("TextBox" & i + 4).Value
.Range("I" & lastrow) = Controls("TextBox" & i + 5)

Controls("TextBox" & i) = ""
Controls("TextBox" & i + 1) = ""
Controls("TextBox" & i + 2) = ""
Controls("TextBox" & i + 3) = ""
Controls("TextBox" & i + 4) = ""
Controls("TextBox" & i + 5) = ""
Next i
End With
End Sub
Cách thì có nhưng nhìn thấy file mới viết được code.
 
Upvote 0
Code bên dưới mình khai báo thêm Dic1 nhưng bị lỗi
Mã:
Dim Dic As Object, Dic1 As Object, Ma()
Dim sArr(), sArr1(), dArr(), tArr(), TieuDe(), DK As Boolean
Dim I As Long, J As Long, K As Long, N As Long, R As Long
    Set Dic = CreateObject("Scripting.Dictionary")
    Set Dic1 = CreateObject("Scripting.Dictionary")
    sArr = Sheets("Ma").Range("A2:B14").Value
    sArr1 = Sheets("Ma").Range("D2:E9").Value

    For I = 1 To 13
        Dic.Item(sArr(I, 1)) = sArr(I, 2)
        Dic1.Item(sArr1(I, 1)) = sArr1(I, 2)
    Next I
Các Bạn chỉ giúp cách sửa lại để không bị lỗi.
Xin cảm ơn.
 
Upvote 0
Code bên dưới mình khai báo thêm Dic1 nhưng bị lỗi
Mã:
Dim Dic As Object, Dic1 As Object, Ma()
Dim sArr(), sArr1(), dArr(), tArr(), TieuDe(), DK As Boolean
Dim I As Long, J As Long, K As Long, N As Long, R As Long
    Set Dic = CreateObject("Scripting.Dictionary")
    Set Dic1 = CreateObject("Scripting.Dictionary")
    sArr = Sheets("Ma").Range("A2:B14").Value
    [CODE]sArr1 = Sheets("Ma").Range("D2:E14").Value

For I = 1 To 13
Dic.Item(sArr(I, 1)) = sArr(I, 2)
Dic1.Item(sArr1(I, 1)) = sArr1(I, 2)
Next I[/CODE]
Các Bạn chỉ giúp cách sửa lại để không bị lỗi.
Xin cảm ơn.
Lỗi dòng lệnh này.
Mã:
   Dic1.Item(sArr1(I, 1)) = sArr1(I, 2)
Không liên quan gì đến DIC1 cả.Cái này gặp phải vấn đề là mảng nó không tồn tại.
Bạn sửa dòng này thành
Mã:
sArr1 = Sheets("Ma").Range("D2:E14").Value
 
Upvote 0
Lỗi dòng lệnh này.
Mã:
   Dic1.Item(sArr1(I, 1)) = sArr1(I, 2)
Không liên quan gì đến DIC1 cả.Cái này gặp phải vấn đề là mảng nó không tồn tại.
Bạn sửa dòng này thành
Mã:
sArr1 = Sheets("Ma").Range("D2:E14").Value
Vậy mình phải sửa lại như thế nào vậy Bạn.
Bài đã được tự động gộp:

Lỗi dòng lệnh này.
Mã:
   Dic1.Item(sArr1(I, 1)) = sArr1(I, 2)
Không liên quan gì đến DIC1 cả.Cái này gặp phải vấn đề là mảng nó không tồn tại.
Bạn sửa dòng này thành
Mã:
sArr1 = Sheets("Ma").Range("D2:E14").Value
Nhờ các Bạn xem giúp. Mình muốn kết quả như cột N trong sheet DN5. Xin cảm ơn
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom