Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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 无法对导出为CSV的表应用VBA自动筛选_Excel_Vba - Fatal编程技术网

Excel 无法对导出为CSV的表应用VBA自动筛选

Excel 无法对导出为CSV的表应用VBA自动筛选,excel,vba,Excel,Vba,我有一个表,表中的行的单元格为“空白”?!所以我尝试以下方法来过滤这些行 Set tbl = Worksheets("FOR EXPORT").ListObjects("TableName") 'SET AUTOFILTER tbl.Range.AutoFilter Field:=3, Criteria1:="<>" 而不是我看到的已应用于工作表的筛选表 整个潜艇是 Sub saveTableToCSV() Dim tbl As ListObject Dim csvFilePat

我有一个表,表中的行的单元格为“空白”?!所以我尝试以下方法来过滤这些行

Set tbl = Worksheets("FOR EXPORT").ListObjects("TableName")
'SET AUTOFILTER
tbl.Range.AutoFilter Field:=3, Criteria1:="<>"
而不是我看到的已应用于工作表的筛选表

整个潜艇是

Sub saveTableToCSV()

Dim tbl As ListObject
Dim csvFilePath As String
Dim fNum As Integer
Dim tblArr As Variant


Dim rowArr

Dim csvVal


Set tbl = Worksheets("FOR EXPORT").ListObjects("TableName")
'SET AUTOFILTER
tbl.Range.AutoFilter Field:=3, Criteria1:="<>"

'SET PATH
csvFilePath = "C:\Users\FatherNick\Desktop\CSVFile.csv"
'COPY TABLE RANGE TO ARRAY
tblArr = tbl.Range.Value

'SET FILE OUTPUT
fNum = FreeFile()
Open csvFilePath For Output As #fNum

For i = 1 To UBound(tblArr)

    rowArr = Application.Index(tblArr, i, 0)
    csvVal = VBA.Join(rowArr, ";")
    Print #1, csvVal

Next
'RESET FILTER
'tbl.AutoFilter.ShowAllData
Close #fNum
Set tblArr = Nothing
Set rowArr = Nothing
Set csvVal = Nothing
End Sub
子存储表tocsv()
作为ListObject的Dim tbl
将csvFilePath设置为字符串
作为整数的Dim fNum
Dim tblArr作为变体
暗色罗瓦尔
暗csvVal
设置tbl=工作表(“用于导出”)。列表对象(“表名”)
'设置自动筛选
tbl.Range.AutoFilter字段:=3,标准1:=“”
'设置路径
csvFilePath=“C:\Users\FatherNick\Desktop\CSVFile.csv”
'将表范围复制到数组
tblArr=tbl.Range.Value
'设置文件输出
fNum=FreeFile()
打开csvFilePath,输出为#fNum
对于i=1至UBound(tblArr)
rowArr=Application.Index(tblArr,i,0)
csvVal=VBA.Join(rowArr,“;”)
打印#1,csvVal
下一个
'重置过滤器
'tbl.AutoFilter.ShowAllData
关闭#fNum
设置tblArr=无
设置rowArr=Nothing
设置csvVal=无
端接头

如何传递数组以过滤表而不是整个表?

尝试下面的代码(代码注释中的解释):


除了错误或像#REF!(参考)这样的特定错误之外,是否可以将所有内容都放入标准中@Nikos您可以使用“tbl.range.SpecialCells(xlErrors)”将范围设置为错误,您可以阅读更多关于它的信息
Sub saveTableToCSV()

Dim tbl As ListObject
Dim csvFilePath As String
Dim fNum As Integer
Dim tblArr As Variant


Dim rowArr

Dim csvVal


Set tbl = Worksheets("FOR EXPORT").ListObjects("TableName")
'SET AUTOFILTER
tbl.Range.AutoFilter Field:=3, Criteria1:="<>"

'SET PATH
csvFilePath = "C:\Users\FatherNick\Desktop\CSVFile.csv"
'COPY TABLE RANGE TO ARRAY
tblArr = tbl.Range.Value

'SET FILE OUTPUT
fNum = FreeFile()
Open csvFilePath For Output As #fNum

For i = 1 To UBound(tblArr)

    rowArr = Application.Index(tblArr, i, 0)
    csvVal = VBA.Join(rowArr, ";")
    Print #1, csvVal

Next
'RESET FILTER
'tbl.AutoFilter.ShowAllData
Close #fNum
Set tblArr = Nothing
Set rowArr = Nothing
Set csvVal = Nothing
End Sub
Dim VisRng As Range

' set the new Range object to the visible cells of `tbl.Range`
Set VisRng = tbl.Range.SpecialCells(xlCellTypeVisible)

' copy only the visible cells in range to array
tblArr = VisRng.Value