Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
基于excel vba宏中的过滤器创建文件时是否要包含标题行_Excel_Vba - Fatal编程技术网

基于excel vba宏中的过滤器创建文件时是否要包含标题行

基于excel vba宏中的过滤器创建文件时是否要包含标题行,excel,vba,Excel,Vba,我已经使用下面的代码基于D列中的过滤器创建了新的excel文件 现在,它应该排除标题行(不为其创建文件),但我希望将其包含在它创建的每个文件中 任何问题或想法都会被告知 非常感谢 Sub SplitWorkbook(Optional colLetter As String, Optional SavePath As String) If colLetter = "" Then colLetter = "D" Dim lastValue As String

我已经使用下面的代码基于D列中的过滤器创建了新的excel文件

现在,它应该排除标题行(不为其创建文件),但我希望将其包含在它创建的每个文件中

任何问题或想法都会被告知

非常感谢

Sub SplitWorkbook(Optional colLetter As String, Optional SavePath As String)
If colLetter = "" Then colLetter = "D"
Dim lastValue As String
Dim hasHeader As Boolean
Dim wb As Workbook
Dim c As Range
Dim currentRow As Long
hasHeader = True 'Indicate true or false depending on if sheet  has header row.

If SavePath = "" Then SavePath = ThisWorkbook.Path
'Sort the workbook.
ThisWorkbook.Worksheets(1).Sort.SortFields.Add Key:=Range(colLetter & ":" & colLetter), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ThisWorkbook.Worksheets(1).Sort
    .SetRange Cells
    If hasHeader Then ' Was a header indicated?
        .Header = xlYes
    Else
        .Header = xlNo
    End If
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

For Each c In ThisWorkbook.Sheets(1).Range("D:D")
    If c.Value = "" Then Exit For
    If c.Row = 1 And hasHeader Then
    Else
        If lastValue <> c.Value Then
            If Not (wb Is Nothing) Then
                wb.SaveAs SavePath & "\" & lastValue & ".xls"
                wb.Close
            End If
            lastValue = c.Value
            currentRow = 1
            Set wb = Application.Workbooks.Add
        End If
        ThisWorkbook.Sheets(1).Rows(c.Row & ":" & c.Row).Copy
        wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Select
        wb.Sheets(1).Paste

    End If
Next
If Not (wb Is Nothing) Then
    wb.SaveAs SavePath & "\" & lastValue & ".xls"
    wb.Close
End If
End Sub
子拆分工作簿(可选colLetter作为字符串,可选SavePath作为字符串)
如果colLetter=”则colLetter=“D”
将最后一个值设置为字符串
作为布尔值的Dim散列头
将wb设置为工作簿
调光范围
与当前行一样长
hasHeader=True'根据工作表是否有标题行指示True或false。
如果SavePath=”“,则SavePath=thiswoolk.Path
'对工作簿进行排序。
ThisWorkbook.Worksheets(1).Sort.SortFields.Add Key:=范围(colLetter&“:”&colLetter)_
SortOn:=xlSortOnValues,顺序:=XLASSENDING,数据选项:=xlSortNormal
使用此工作簿。工作表(1)。排序
.设置范围单元格
如果是HashHeader,那么“是否指示了标题?”?
.Header=xlYes
其他的
.Header=xlNo
如果结束
.MatchCase=False
.方向=xlTopToBottom
.SortMethod=xl拼音
.申请
以
对于本工作簿中的每个c。表(1)。范围(“D:D”)
如果c.Value=“”,则退出
如果c.Row=1且hashheader,则
其他的
如果lastValue c.值,则
如果不是(wb什么都不是),那么
wb.SaveAs保存路径&“\”&lastValue&“.xls”
wb.关闭
如果结束
lastValue=c.值
currentRow=1
设置wb=Application.Workbooks.Add
如果结束
此工作簿.Sheets(1).行(c.Row&“:”&c.Row).复制
wb.Sheets(1).单元格(Rows.Count,1).结束(xlUp).选择
工作分解表(1).粘贴
如果结束
下一个
如果不是(wb什么都不是),那么
wb.SaveAs保存路径&“\”&lastValue&“.xls”
wb.关闭
如果结束
端接头

所以您要过滤数据,然后复制结果并将其粘贴为新文件?然后不能将可见行设置为新文件中的某个范围吗?