Chuyên mục xử lý, gỡ rối code VBA (6 người xem)

Liên hệ QC

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

Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,957
không biết lỗi chỗ nào ?
Sub loc_du_lieu()
Dim cb As Range
Dim maxd As Range
For Each cb In Sheet3.Range("a1:a33") ' khai báo điều kiện lọc 1 ở đây
For Each maxd In Sheet3.Range("b1:b15") ' khai báo điều kiện lọc 2 ở đây
With Sheet2.Range("a1:eek:735") 'khai báo vùng lọc ở đây
.Parent.AutoFilterMode = False
.AutoFilter
.AutoFilter Field:=5, Criteria1:=cb
.AutoFilter Field:=14, Criteria1:=maxd
.Parent.AutoFilter.Range.Copy

Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = cb & "-" & maxd
Sheets(Sheets.Count).Range("a1").PasteSpecial.xlPasteValues
End With
Next

1. tình hình là mình muốn viết 1 macro nhằm tách các sheet và đặt tên cho nó. Mình đã làm đúng như hướng dãn song chỉ chay được 01 sheet đầu tiên.
Còn sau đó thì nó báo lỗi run-time error '424"
2. Nếu như mình muốn khai báo điều kiện lọc, vùng lọc khi chạy macro thì phải làm như thế nào ạ
nếu chọn 1 hoặc 2 điều kiện thì macro sẽ chạy tương ứng với kiểu lọc

Thật sự thì mình gà về VBA. Mong các bạn chỉ giáo.https://drive.google.com/open?id=0B_i2RtK5k81fVzlRU1BuaWpVSkE
sao không có ai giúp vậy nè huhu
 
Upvote 0
chạy code Test
Mã:
Sub Test()
  Dim Nmax As Long, Lrow As Long, iMin As Long, iMax As Long
  iMin = 2
  iMax = 3
  With Sheets("TH-K95")
    Lrow = .Range("A" & Rows.Count).End(xlUp).Row
    Nmax = IfMax(.Range("A3:A" & Lrow), .Range("E3:E" & Lrow), iMin, iMax)
    MsgBox ("Max là: " & Nmax)
  End With
End Sub

Private Function IfMax(ByVal ifRng As Range, ByVal MaxRng As Range, ByVal iMin As Long, ByVal iMax As Long)
  Dim i As Long, Nmax As Long
  For i = 1 To ifRng.Rows.Count
    If ifRng(i, 1) >= iMin And ifRng(i, 1) <= iMax Then
      If Nmax < MaxRng(i, 1) Then Nmax = MaxRng(i, 1)
    End If
  Next i
  IfMax = Nmax
End Function
anh ơi! có thể ghép hẳn thành 1 function được không ạ..
Để em cho vào Nmax vào vòng for code của em giúp em với
 
Upvote 0
Bạn nên nêu câu hỏi trên diễn đàn;
Có vậy bạn sẽ nhận được câu trả lời chính xác hơn từ cộng đồng.
Anh ơi anh cho em hỏi khi viết liền code như sau:
"Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$3" Then
Dim sht As Worksheet, rng As Range
If Len([e3]) > 8 Then Set sht = Sheet2 Else Set sht = Sheet3
With sht
Set rng = .Range(.[B7], .Cells(.Rows.Count, "B").End(3)).Find([E4], , xlValues, xlWhole, , , True)
Application.EnableEvents = False
If rng Is Nothing Then
[e10] = 0
GoTo thoat
End If
[e10].Value = rng(, [e6] + 2).Value

End With
End If
thoat:
Application.EnableEvents = True
End Sub"
với là tách ra viết 2 đoạn khác nhau như sau:
- trong sheet viết:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$K$4" Then GPE Target.Value
End Sub
- trong module viết:
"
Sub GPE(Gt)
On Error Resume Next
Dim i As Long, k As Long
Dim Arr, dArr, sArr
Arr = Range(Sheet3.[B10], Sheet3.[B65000].End(3)).Resize(, 12)
ReDim dArr(1 To UBound(Arr, 1), 1 To 1)
ReDim sArr(1 To UBound(Arr, 1), 1 To 1)
k = 0
For i = 1 To UBound(Arr, 1)
If Year(Arr(i, 12)) = Gt Then
k = k + 1
dArr(k, 1) = Arr(i, 1)
sArr(k, 1) = Arr(i, 12)
End If
Next i
Sheet5.Range("B6:B20").ClearContents
Sheet5.Range("B6").Resize(k) = dArr
Sheet5.Range("G6:G20").ClearContents
Sheet5.Range("G6").Resize(k) = sArr
End Sub" nó sẽ khác nhau thế nào ạ???
 
Upvote 0
Hai macro trên làm 2 công việc với 2 cách hoàn toàn khác nhau; Vậy sẽ khó trả lời đầy đủ cho iêu cầu của bạn rồi.

Tạm thời là vầy:

Macro GPE() được cung cấp bỡi 1 tham biến Gt; Nó là tham biến chỉ ra con số của 1 năm nào đó
Trong macro này nó sẽ so sánh tham biến được cung cấp với từng dòng của mảng; Nếu trùng với trị trong cột 12 của dòng biến mảng đang khảo sát thì làm thứ gì đó;
Thứ gì đó ở đây là ghi số liệu cột nào đó của dòng đang khảo sát vô các mảng đã khai báo cho bạn.

Thường người ta tách ra thành 1 chương trình con để:
Dễ bảo trì, sửa chữa
Làm việc linh hoạt hơn với tham biến tương ứng được cung cấp khác nhau

Lấy ví dụ macro được cung cấp 2 tham biến,
1 vẫn là Gt, & thêm tham biến thứ 2 là trị mang/ứng với số cột ( trong macro trên là cột 12 giả dụ là ngày vô; còn cột 13 là ngày ra. . .)
Thì bạn sẽ thấy rằng, macro GPE sẽ làm việc khác nhau khi nhận các tham biến khác nhau tương ứng.

Tạm thời chỉ vậy, nếu bạn cần ví dụ cụ thể hơn thì chờ đi vậy!
 
Upvote 0
Bỏ đoạn này đi là đc bạn
Sheet3.

Bạn nên gửi cả file lên như vậy tương tác trực tiếp sẽ dễ hơn!
nếu bỏ sheet3. thì nó lấy điều kiện ở đâu bạn ơi
ok, lần sau rút kinh nghiệm vụ gởi cả files trực tiếp. không gởi link.
cảm ơn bạn
 

File đính kèm

Upvote 0
nếu bỏ sheet3. thì nó lấy điều kiện ở đâu bạn ơi
ok, lần sau rút kinh nghiệm vụ gởi cả files trực tiếp. không gởi link.
cảm ơn bạn
Code yêu cầu bên trên gửi file lại là loại khác thì làm sao mà dc bạn?
Bạn phải đưa code vào mục code [.QUOTE] code [./QUOTE]
 
Upvote 0
Mọi người cho hỏi. Excel có cách nào tự giãn dòng khi đánh văn bản như word k. Word tự động căn chỉnh nên các dòng thẳng hàng lề bên phải. Excel lượn lề bên phải như rắn
 
Upvote 0
Có cái nào chỉ giùm đi bạn. Tôi tìm lâu lắm rồi mà chưa có cái nào đúng cả.
Híc. Kèo thơm bị khóa bài rồi anh. :p:p

Còn cái canh lề của bạn hỏi ở trên.
1. Excel có cách nào tự giãn dòng khi đánh văn bản như word: Giãn theo phương đứng hoặc phương ngang.

2. Word tự động căn chỉnh nên các dòng thẳng hàng lề bên phải. Excel lượn lề bên phải như rắn: Theo phương ngang.

Từ 1+2, suy luận cần canh lề theo phương ngang. Excel có Alignment, Horizontal, Justify + Wrap Text.

Ví dụ:
upload_2017-10-18_14-41-43.png
 
Upvote 0
Em có đoạn code sau

.Range("J8").Resize(K, 125)

Làm thế nào để định dạng số cho mảng này. Ví dụ 1000000 thành 1.000.000
 
Lần chỉnh sửa cuối:
Upvote 0
Chào mọi người em đang gặp khó với VBA mong mọi người giúp đỡ với ah!

em muốn làm phần Hyperlink trong cột "File" thì phải làm thế nào ah, em mày mò hoài mà không ra được phần đó.
Em tự mày mò nên cũng chỉ biết hạn chế, mong mọi người giúp đỡ ah
em xin chân thành cảm ơn!
 

File đính kèm

Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom