Tôi có một câu hỏi khác mà tôi hy vọng sẽ giải quyết với sự giúp đỡ của bạn.Mã VBA không xem qua các hàng ẩn để thêm hàng có số theo dõi
Tôi muốn làm gì. Tôi sử dụng Excel để theo dõi công việc, hoạt động, danh bạ, v.v. Trong khi làm điều đó tôi thấy tôi đã làm rất nhiều công việc lặp đi lặp lại trong việc thêm hàng ở cuối của một tờ gọi là "Hoạt động".
Điều tôi muốn làm là: - Nhấn nút và thêm hàng. - Tăng số theo dõi bằng 1 - Chèn giá trị mặc định
Mã. Để tự động này, tôi đã tìm thấy (sao chép, dán, điều chỉnh nó cho nhu cầu của tôi) đoạn mã sau:
Sub AddRowActiviteiten_NewAtEnd()
'Add's a new row at the end of the sheet.
Dim wsActiviteiten As Worksheet
Set wsActiviteiten = Sheets("Activiteiten")
DefType = "Daily"
DefStatus = "Open"
DefIssue = "*****"
DefImpact = "*****"
DefPrio = "Laag"
MyDate = Date
wsActiviteiten.Range("A4").Value = "1"
'Copy the "One Row To Rule Them All"
wsActiviteiten.Range("A3:Q3").Copy
wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteAll)
'Stop the "copy-action"
Application.CutCopyMode = False
'Increase the tracking number with "one"
LastNumber = wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Value
wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = LastNumber + 1
'Insert default values
LastRow = wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(-1, 0).Row
Cells(LastRow + 1, 2) = DefType
Cells(LastRow + 1, 3) = DefStatus
Cells(LastRow + 1, 4) = DefIssue
Cells(LastRow + 1, 5) = DefImpact
Cells(LastRow + 1, 6) = DefPrio
Cells(LastRow + 1, 8) = MyDate
'Step down 1 row from present location.
ActiveCell.Offset(1, 0).Select
End Sub
Vấn đề. Trong trang tính này, tôi mở các mục mới, nhưng tôi cũng đóng chúng lại. Tôi làm điều này bằng cách thay đổi trạng thái của họ và ẩn chúng khỏi chế độ xem. Và đây là điểm mà nó đi sai. Khi tôi đóng mục cuối cùng trên danh sách và muốn thêm hàng mới, macro thêm hàng mới bên dưới mục nhập lần hiển thị cuối cùng. Nó không tìm thấy mục nhập cuối cùng mà tôi vừa mới ẩn. Ngoài ra, khi điều này xảy ra, việc thêm các giá trị mặc định vào hàng mới sẽ không hoạt động. Nó thêm chúng ở hàng phía trên phần được thêm vào.
Bằng cách nào đó điều này có ý nghĩa hoàn hảo. Tôi nói với macro để tìm mục nhập cuối cùng, nhưng những gì tôi không hiểu là lý do tại sao nó nhìn vào mục nhập mới nhất có thể nhìn thấy và tại sao nó không nhìn vào hàng ẩn.
Để nhân rộng. Sao chép mã vào một trang tính (có thể bạn cần thay đổi tên của trang tính) và thêm một vài dòng. Đặt một số thông tin ở hàng cuối cùng và ẩn nó đi. Thêm một vài dòng khác và xem điều gì xảy ra.
Giải pháp. Có cách nào để giải quyết vấn đề này không? Có thể có cách làm thông minh hơn? Tôi nhìn vào mọi thứ, nhưng chủ yếu là tôi có kết quả bằng cách sử dụng "(" A "& Rows.Count) .End (xlUp)". Một vòng lặp có thể làm việc, nhưng tôi sợ rằng 1) Nó không tìm kiếm thông qua các hàng ẩn và 2) nó làm cho bảng (hơi) chậm chạp. Tôi phải nói rằng tôi đã cố gắng để làm cho một vòng lặp, đầu tiên tôi muốn xem nếu giải pháp đầu tiên của tôi là salvageable.
Cảm ơn bạn đã nhập liệu, nếu có bất kỳ câu hỏi nào, vui lòng cho tôi biết.
Simon EDIT: Mã làm việc cho bất cứ ai quan tâm đến
Sub AddRowActiviteiten_NewAtEnd()
'Add's a new row at the end of the sheet.
Dim wsActiviteiten As Worksheet
Set wsActiviteiten = Sheets("Activiteiten")
DefType = "Daily"
DefStatus = "Open"
DefIssue = "*****"
DefImpact = "*****"
DefPrio = "Laag"
MyDate = Date
'Copy the One Row To Rule Them All
wsActiviteiten.Range("A3:Q3").Copy
'Offset(y,x)
'De -16 is een getal dat iets doet, maar ik weet niet wat.
wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(1, -16).PasteSpecial (xlPasteAll)
'Stop the "copy-action"
Application.CutCopyMode = False
'Het volgnummer verhogen met 1
'Het laatste getal selecteren (LastNumber) en dan plus 1.
LastNumber = wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(0, -16).Value
wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(1, -16).Value = LastNumber + 1
'Insert default values
LastRow = wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(-1, 0).Row
Cells(LastRow + 1, 2) = DefType
Cells(LastRow + 1, 3) = DefStatus
Cells(LastRow + 1, 4) = DefIssue
Cells(LastRow + 1, 5) = DefImpact
Cells(LastRow + 1, 6) = DefPrio
Cells(LastRow + 1, 8) = MyDate
'Step down 1 row from present location.
ActiveCell.Offset(1, 0).Select
End Sub
Tôi sẽ sử dụng câu hỏi của bạn làm ví dụ về cách đặt câu hỏi. –
Có lẽ [MSDN - SpecialCells] (https://msdn.microsoft.com/en-us/library/office/ff196157.aspx) có thể hữu ích. Đặc biệt 'xlCellTypeLastCell' – Skaterhaz