Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 修改当前打印区域以删除第一列_Vba_Excel_Excel 2010 - Fatal编程技术网

Vba 修改当前打印区域以删除第一列

Vba 修改当前打印区域以删除第一列,vba,excel,excel-2010,Vba,Excel,Excel 2010,在Excel工作簿中,我有几个工作表,每个工作表包含一些敏感数据和一个表(ListObject)。打印时,仅表格应位于打印区域 为了实现这一点(以及设置其他打印默认值),我使用了Workbook\u BeforePrint事件。我有两个sub将WS的值设置为当前工作表,将Table设置为第一个ListObject 但是,我有一个表,无法从中打印第一列。我能够确定工作表/表格的目标,但我不知道如何从打印区域中去掉第一列 .PrintArea = Table.Range.Address If WS.

在Excel工作簿中,我有几个工作表,每个工作表包含一些敏感数据和一个表(ListObject)。打印时,仅表格应位于打印区域

为了实现这一点(以及设置其他打印默认值),我使用了
Workbook\u BeforePrint
事件。我有两个
sub
WS
的值设置为当前工作表,将
Table
设置为第一个ListObject

但是,我有一个表,无法从中打印第一列。我能够确定工作表/表格的目标,但我不知道如何从打印区域中去掉第一列

.PrintArea = Table.Range.Address
If WS.Name = "FileNameLength" Then
    { remove the frist column from the print area }
End If

您需要从打印范围中减去第一列中的单元格

像这样的事情应该让你开始:

    Dim aCell As Range
    Dim rng1 As Range
    Dim rng2 As Range
    Dim rng3 As Range

    Set rng1 = Table.Range
    Set rng2 = Range("Table1[[#Headers],[columnheadertext]]")

    Set rng3 = Nothing

    For Each aCell In rng1

        If Intersect(aCell, rng2) Is Nothing Then
            If rng3 Is Nothing Then
                Set rng3 = aCell
            Else
            Set     rng3 = Union(rng3, aCell)
            End If
        End If

    Next aCell

'rng3 is your new range to be printed

 .PrintArea = rng3

没有进一步的代码,我不能裁剪它,但你应该能够适应以下

Sub StripFirstCol()

    Dim tbl As ListObject: Set tbl = ActiveSheet.ListObjects("Table1")
    Dim PrintRng As Range: Set PrintRng = tbl.Range

    Dim ws As Worksheet: Set ws = ActiveSheet

    With ws.PageSetup
        If ws.Name = "FileNameLength" Then
            .PrintArea = Intersect(PrintRng, PrintRng.Offset(0, 1)).Address
        Else
            .PrintArea = PrintRng.Address
        End If
    End With

End Sub

太好了,我没有那样想。感谢您的发帖:)在一个范围内的所有单元格中循环是一项巨大的开销,特别是当您在该范围内有60000多行时。所以这不是给我的,但是谢谢你的发帖。我更喜欢另一个答案!