簡體   English   中英

獲取Excel工作表的實際打印區域(通過VBA)

[英]Get Actual Print Area of an Excel Sheet (Through VBA)

如何在Excel中獲得實際的“已用范圍”(包括圖表)?

問題是,用戶將不會定義任何打印區域。 但是他應該在剪貼板中獲得所有使用范圍(包括圖表)的圖片:

如果我喜歡的話, Sheet1.PageLayout.PrintArea它給我一個空白字符串。

如果我喜歡Sheet1.UsedRange.Address ,它不會考慮底部的圖表。

請提出解決方法。

謝謝。

您不能使用ChartObject的 TopLeftCellBottomRightCell並檢查某些圖表是否在UsedRange之外嗎? 像這樣:

Sub test()
    Dim usedRangeEx As Range
    Set usedRangeEx = GetUsedRangeIncludingCharts(Worksheets("Sheet1"))
    usedRangeEx.Activate
    Debug.Print usedRangeEx.Address
End Sub

Private Function GetUsedRangeIncludingCharts(target As Worksheet) As Range
    Dim firstRow As Long
    Dim firstColumn As Integer
    Dim lastRow As Long
    Dim lastColumn As Integer
    Dim oneChart As ChartObject

    With target
        firstRow = .UsedRange.Cells(1).Row
        firstColumn = .UsedRange.Cells(1).Column
        lastRow = .UsedRange.Cells(.UsedRange.Cells.Count).Row
        lastColumn = .UsedRange(.UsedRange.Cells.Count).Column

        For Each oneChart In .ChartObjects
            If oneChart.TopLeftCell.Row < firstRow Then _
                firstRow = oneChart.TopLeftCell.Row
            If oneChart.TopLeftCell.Column < firstColumn Then _
                firstColumn = oneChart.TopLeftCell.Column
            If oneChart.BottomRightCell.Row > lastRow Then _
                lastRow = oneChart.BottomRightCell.Row
            If oneChart.BottomRightCell.Column > lastColumn Then _
                lastColumn = oneChart.BottomRightCell.Column
        Next oneChart

        Set GetUsedRangeIncludingCharts = .Range(.Cells(firstRow, firstColumn), _
                                                 .Cells(lastRow, lastColumn))
    End With

End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM