2011-07-23 26 views
5

Tôi đang cố gắng viết một hàm nhỏ có trong tệp (nơi sổ làm việc được lưu tại), đường dẫn đích (nơi tệp pdf sẽ được lưu vào) và một chuỗi tên tab (pipe (|) delimited) trong excel.VBA Tham khảo trang tính so với biểu đồ

Người dùng chức năng không phải nhập một chuỗi tên tab (tùy chọn) và nếu không, tôi muốn chọn tất cả các tab hiển thị và in chúng. Đây sẽ là trong trường hợp nếu người dùng có 50 bảng xếp hạng trong bảng tính riêng biệt và không muốn viết một chuỗi như "Chart1 | Chart2 | ...."

Code:

For Each WSO.Name In WBO.Worksheets 
    strSheets = strSheets & WSO.Name & "|" 
Next WSO 

strSheets = Left(strSheets, Len(strSheets) - 1) 
arraySheets() = Split(strSheets, "|") 

WBO.Sheets(arraySheets()).Select  
WBO.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _ 
    strFilePath, Quality:=xlQualityStandard, _ 
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ 
    True 

Có hai các vấn đề với vòng lặp For Each: nó không lấy bất kỳ trang tính nào như "Chart1", nó chỉ lấy các trang tính như "Sheet1". Ngoài ra, nó sẽ lấy tờ ẩn để khi tôi cố gắng chọn tất cả tôi nhận được một lỗi ngoài giới hạn.

Tôi không biết liệu trang tính biểu đồ có được giới thiệu khác đi không, sau đó một trang tính thông thường hoặc tại sao trang tính ẩn cũng được chọn.

Trả lời

6

Sử dụng WBO.Sheets thay vì WBO.Worksheets trong vòng lặp.

Xác minh rằng WSO.Visible = xlSheetVisible để lọc ra các trang tính bị ẩn.

6

Có hai vấn đề với các Đối Mỗi vòng lặp: nó không lấy bất cứ tờ như "Chart1", nó chỉ lấy tờ như "Sheet1"

Charts và Worksheets là hai bộ sưu tập khác nhau.
Hãy thử điều này:

Sub Demo() 
Dim oWs As Worksheet 
Dim oCs As Chart 

For Each oWs In ActiveWorkbook.Worksheets 
    Debug.Print oWs.Name 
Next 

For Each oCs In ActiveWorkbook.Charts 
    Debug.Print oCs.Name 
Next 
End Sub 
+0

Tất nhiên, 'ActiveWorkbook.Sheets' bao gồm cả 'ActiveWorkbook.Worksheets' và' ActiveWorkbook.Charts'. –

Các vấn đề liên quan