Tôi đang tìm cách lập trình cố định hàng trên cùng của trang tính Excel từ VBA. Mục tiêu cuối cùng là tạo ra hiệu ứng tương tự như lệnh View > Freeze Panes > Freeze Top Row
trong Excel 2007 để hàng trên cùng của trang tính bị đóng băng và người dùng có thể thấy hàng trên cùng của trang tính ngay cả khi họ cuộn qua dữ liệu.Làm cách nào tôi có thể lập trình cố định hàng trên cùng của trang tính Excel trong Excel 2007 VBA?
Làm cách nào tôi có thể lập trình cố định hàng trên cùng của trang tính Excel trong Excel 2007 VBA?
Trả lời
Rows("2:2").Select
ActiveWindow.FreezePanes = True
Chọn phạm vi khác cho hiệu ứng khác, giống như cách bạn làm theo cách thủ công. Các "Freeze Top Row" thực sự chỉ là một phím tắt mới trong Excel 2007 (và lên), nó không chứa chức năng bổ sung so với phiên bản trước của Excel.
Tomalak đã cung cấp cho bạn câu trả lời đúng, nhưng tôi muốn thêm rằng hầu hết các lần bạn muốn biết mã VBA cần thiết để thực hiện một hành động nhất định trong giao diện người dùng đó là một ý tưởng hay để ghi lại macro.
Trong trường hợp này, hãy bấm Ghi lại macro trên tab nhà phát triển của ruy-băng, cố định hàng trên cùng và sau đó dừng ghi. Excel sẽ có macro sau ghi lại cho bạn mà cũng không được công việc:
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True
Có. Đây là câu trả lời đúng. Không cần phải chọn bất kỳ phần nào của bảng tính. – HuckIt
Câu trả lời hay nhưng tôi tò mò tại sao câu cuối cùng không được đưa vào câu lệnh Với ... Kết thúc với. – Jeeped
@Jeeped: Đây chỉ là đầu ra thô của máy ghi macro Excel. Tất nhiên, bạn có thể bao gồm các dòng trong khối 'With'. –
Vấn đề với các macro ghi lại là giống như các vấn đề với các hành động built-in: Excel chọn đóng băng phía trên nhìn thấy hàng, thay vì hàng trên cùng thực tế, nơi có thể tìm thấy thông tin tiêu đề.
Mục đích của macro trong trường hợp này là đóng băng hàng trên cùng thực tế. Khi tôi xem hàng # 405592 và tôi cần kiểm tra tiêu đề cho cột (vì tôi đã quên cố định hàng khi tôi mở tệp), tôi phải cuộn lên trên cùng, cố định hàng trên cùng, sau đó tìm đường quay lại hàng # 405592 một lần nữa. Vì tôi tin rằng đây là hành vi ngu ngốc, tôi muốn một macro để sửa nó, nhưng, như tôi đã nói, macro được ghi lại chỉ bắt chước hành vi ngu xuẩn tương tự.
Tôi đang sử dụng Office 2011 dành cho Mac OS X Lion
Cập nhật (2 phút sau):
Tôi tìm thấy một giải pháp ở đây: http://www.ozgrid.com/forum/showthread.php?t=19692
Dim r As Range
Set r = ActiveCell
Range("A2").Select
With ActiveWindow
.FreezePanes = False
.ScrollRow = 1
.ScrollColumn = 1
.FreezePanes = True
.ScrollRow = r.Row
End With
r.Select
Đối với bất kỳ người mới nào khác như tôi: Tôi có thể đóng băng 8 hàng đầu (nơi báo cáo "trang tổng quan" của tôi cư trú) bằng cách tạo Phạm vi ("A9") mà không thay đổi bất kỳ điều gì khác. – Sean
Chỉ cần nhấn cùng một vấn đề .. Vì lý do nào đó, lệnh freezepanes chỉ gây ra hiện tượng crosshairs xuất hiện ở giữa màn hình. Nó biến oout tôi đã chuyển ScreenUpdating off! Được giải quyết bằng mã sau:
Application.ScreenUpdating = True
Cells(2, 1).Select
ActiveWindow.FreezePanes = True
Bây giờ nó hoạt động tốt.
Rows("2:2").Select
ActiveWindow.FreezePanes = True
Đây là cách dễ nhất để cố định hàng trên cùng. Quy tắc cho FreezePanes
là quy tắc sẽ đóng băng số góc trên bên trái từ ô bạn đã chọn. Ví dụ, nếu bạn làm nổi bật C10, nó sẽ đóng băng giữa các cột B và C, các hàng 9 và 10. Vì vậy, khi bạn làm nổi bật Hàng 2, nó thực sự đóng băng giữa Hàng 1 và 2 là hàng trên cùng.
Ngoài ra, .SplitColumn
hoặc .SplitRow
sẽ chia cửa sổ của bạn sau khi bạn giải phóng cửa sổ mà không phải là cách tôi thích.
Để mở rộng câu hỏi này vào lĩnh vực sử dụng bên ngoài Excel của VBA, số ActiveWindow property phải được giải quyết là con của Excel.Application object.
Ví dụ để tạo một bảng tính Excel từ Access:
Sử dụng Excel.Application object trong dự án VBA khác ứng dụng Office sẽ yêu cầu bạn thêm Microsoft Excel 15.0 thư viện Object (hoặc tương đương đối với phiên bản riêng của bạn).
Option Explicit
Sub xls_Build__Report()
Dim xlApp As Excel.Application, ws As Worksheet, wb As Workbook
Dim fn As String
Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
xlApp.Visible = True
Set wb = xlApp.Workbooks.Add
With wb
.Sheets(1).Name = "Report"
With .Sheets("Report")
'report generation here
End With
'This is where the Freeze Pane is dealt with
'Freezes top row
With xlApp.ActiveWindow
.SplitColumn = 0
.SplitRow = 1
.FreezePanes = True
End With
fn = CurrentProject.Path & "\Reports\Report_" & Format(Date, "yyyymmdd") & ".xlsx"
If CBool(Len(Dir(fn, vbNormal))) Then Kill fn
.SaveAs FileName:=fn, FileFormat:=xlOpenXMLWorkbook
End With
Close_and_Quit:
wb.Close False
xlApp.Quit
End Sub
Quá trình cốt lõi thực sự chỉ là một sự lặp lại các câu trả lời gửi trước đó nhưng tôi nghĩ điều quan trọng là để chứng minh làm thế nào để đối phó với ActiveWindow khi bạn không ở trong VBA riêng của Excel. Trong khi mã ở đây là VBA, nó phải được chuyển trực tiếp sang các ngôn ngữ và nền tảng khác.
Bạn cũng có thể sử dụng 'Đặt xlApp = New Excel.Application', hoặc thậm chí' Dim xlApp As New Excel.Application'. –
- 1. Có thể thấy hơn 65536 hàng trong Excel 2007 không?
- 2. Cách viết bộ sưu tập VBA vào trang tính Excel
- 3. Truy vấn bảng tính excel của tôi với VBA
- 4. Nhập dữ liệu bảng tính Excel vào một bảng tính Excel khác có chứa VBA
- 5. Excel (2007) VBA - .Formula với dấu ngoặc kép trong đó
- 6. Xác định ComboBox của VBA Excel
- 7. Xóa hàng trống trong Excel bằng VBA
- 8. Excel vba - xlDown
- 9. Có cách nào để nhận đầy đủ IntelliSense cho VBA trong Access và Excel 2007 không?
- 10. Cách xác định nhanh các trang tính nào có macro trong Sổ làm việc Excel?
- 11. Excel: Vị trí nút cố định
- 12. Chuỗi VBA Excel VBA
- 13. CopyOrigin trên Chèn trong Excel VBA
- 14. Excel 2007 vấn đề PageSetup.FitToPagesWide
- 15. Nhập trang tính Excel vào Access bằng VBA
- 16. Tìm hàng cuối cùng trong bảng tính Excel
- 17. Chạy chức năng VBA excel khi trang tính được bấm
- 18. Cách xóa Phân loại trong Excel 2007
- 19. Làm cách nào để sao chép các cột từ trang tính này sang trang tính khác bằng VBA trong Excel?
- 20. Làm cách nào để kiểm tra xem các trang tính nhất định có tồn tại hay không trong Excel-VBA?
- 21. Có phải Excel VBA giống như VB.NET
- 22. Giới hạn kích thước mảng Excel 2007 VBA
- 23. Đặt mã Excel-VBA vào mô-đun hoặc trang tính?
- 24. Lập trình nhận hàng excel được điền cuối cùng bằng cách sử dụng C#
- 25. OnClick trong Excel VBA
- 26. Làm cách nào để xóa mọi thứ bên dưới hàng X trong VBA/Excel?
- 27. Có thể thực hiện tác vụ Excel VBA nào trên các trang tính hoặc sổ làm việc ẩn?
- 28. Array trong excel vba
- 29. Cách lấy địa chỉ ô có chức năng VBA trong trang tính Excel
- 30. Excel VBA loạt tên hàng tổng
Có vẻ như ScreenUpdating phải được bật để hoạt động, nhưng tuyệt vời hơn. Cảm ơn! –
Tôi không rõ ràng về cách bạn đang đóng băng hàng trên cùng bằng cách chọn hàng trên cùng. Để cố định hàng trên cùng, lựa chọn phải là 'Hàng (2)' hoặc 'Hàng (" 2: 2 ")'. Chọn kết quả 'Row (" 1: 1 ")' trong phần chia bốn góc của bảng tính. – Jeeped
@Jeeped m) - tất nhiên! Tốt, cảm ơn! – Tomalak