Excel VBA仅将可见数据保存到同一路径的新图纸中

Excel VBA仅将可见数据保存到同一路径的新图纸中,excel,vba,filter,Excel,Vba,Filter,我对VBA比较陌生。我编写了下面的代码,它工作得非常好,直到我决定在保存工作表之前过滤非空白 这样做的目的是在过滤掉所有空白值后,将我的工作表保存在相同的路径中。新文件将仅为CSV格式的值。同样,除了过滤数据和保存文件外,所有这些都起到了作用 现在我明白了 “运行时错误438对象不支持此属性或方法” 关于下面的代码 此工作簿。工作表(“SHEET1”)。特殊单元格(xlCellTypeVisible)。复制 完整代码 Private Sub CommandButton1_Click() If

我对VBA比较陌生。我编写了下面的代码,它工作得非常好,直到我决定在保存工作表之前过滤非空白

这样做的目的是在过滤掉所有空白值后,将我的工作表保存在相同的路径中。新文件将仅为CSV格式的值。同样,除了过滤数据和保存文件外,所有这些都起到了作用

现在我明白了

“运行时错误438对象不支持此属性或方法”

关于下面的代码

此工作簿。工作表(“SHEET1”)。特殊单元格(xlCellTypeVisible)。复制

完整代码

Private Sub CommandButton1_Click()

If Sheets("SHEET1").AutoFilterMode Then Sheets("SHEET1").AutoFilterMode = False

sDate = Format(Sheets("SHEET2").Range("F1"), "YYYY.MM.DD")
cell = "NAME - " & sDate
ThisWorkbook.Sheets("SHEET1").Range("A:C").AutoFilter Field:=2, Criteria1:="<>"
ThisWorkbook.Sheets("SHEET1").SpecialCells(xlCellTypeVisible).Copy
With ActiveSheet.UsedRange
.Value = .Value
End With

ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & cell & ".csv", FileFormat:=xlCSV
End Sub
Private子命令按钮1\u单击()
如果为工作表(“SHEET1”).AutoFilterMode,则为工作表(“SHEET1”).AutoFilterMode=False
sDate=格式(图纸(“图纸2”).范围(“F1”),“YYYY.MM.DD”)
cell=“NAME-”和sDate
ThisWorkbook.Sheets(“SHEET1”)。范围(“A:C”)。自动筛选字段:=2,标准1:=“”
此工作簿。工作表(“SHEET1”)。特殊单元格(xlCellTypeVisible)。复制
使用ActiveSheet.UsedRange
.Value=.Value
以
ActiveWorkbook.SaveAs ThisWorkbook.Path&“\”单元格&“.csv”,文件格式:=xlCSV
端接头

请阅读代码注释,并根据需要进行调整

编辑:调整了此行的类型
sourceSheet.UsedRange.SpecialCells(xlCellTypeVisible)。复制targetWorkbook.Worksheets(targetWorkbook.Sheets.Count)。范围(“A1”)

Private子命令按钮1\u单击()
将targetWorkbook设置为工作簿
将源表设置为工作表
将格式化日期设置为字符串
将文件名设置为字符串
设置sourceSheet=ThisWorkbook.Worksheets(“Sheet1”)
'卸下过滤器
如果sourceSheet.AutoFilterMode,则sourceSheet.AutoFilterMode=False
如果sourceSheet.Range(“F1”).Value为vbNullString,则
formatDate=格式(sourceSheet.Range(“F1”).Value,“YYYY.MM.DD”)
如果结束
'设置新工作簿文件名
fileName=“NAME-”格式日期(&F)
'筛选文件名
sourceSheet.Range(“A:C”)。自动筛选字段:=2,标准1:=“”
'添加新工作簿并设置引用
设置targetWorkbook=工作簿。添加
'复制新工作簿中的可见文件名
sourceSheet.UsedRange.SpecialCells(xlCellTypeVisible)。复制targetWorkbook.Worksheets(targetWorkbook.Sheets.Count)。范围(“A1”)
'保存新工作簿
targetWorkbook.SaveAs ThisWorkbook.Path&“\”文件名&“.csv”,文件格式:=xlCSV
端接头

让我知道它是否有效

是一个
范围
对象的方法,而不是一个工作表。嗨,BigBen,我如何修复代码以仅使用工作表对象复制可见内容?您可以添加一个新工作簿,然后将可见单元格复制到第一个工作表中。您的意思是将结果保存到新工作表中,然后将该工作表保存到新工作簿中?有更好的方法吗?因为最终目标是将工作表另存为新工作簿,作为CSVYes中的值。这就是我的意思。你好,李嘉图!首先,非常感谢。我在这个代码中得到了错误438。想法?
sourceSheet.UsedRange.SpecialfileNames(xlfileNameTypeVisible)。复制
我有一个打字错误。请参阅我的编辑。再次复制代码。很抱歉嗨,里卡多,它工作得很好。因此,基本上你是告诉Excel添加一个新的工作表,粘贴可见数据,然后将其保存为CSV。非常感谢你,我像往常一样学到了很多。很高兴它奏效了。如果你还需要什么,请告诉我。请发布一个新问题,并附上一些预期结果的样本。
Private Sub CommandButton1_Click()

    Dim targetWorkbook As Workbook
    Dim sourceSheet As Worksheet

    Dim formatDate As String
    Dim fileName As String

    Set sourceSheet = ThisWorkbook.Worksheets("Sheet1")

    ' Remove filter
    If sourceSheet.AutoFilterMode Then sourceSheet.AutoFilterMode = False

    If sourceSheet.Range("F1").Value <> vbNullString Then
        formatDate = Format(sourceSheet.Range("F1").Value, "YYYY.MM.DD")
    End If

    ' Set the new workbook file name
    fileName = "NAME - " & formatDate

    ' Filter the fileNames
    sourceSheet.Range("A:C").AutoFilter Field:=2, Criteria1:="<>"

    ' Add new workbook and set reference
    Set targetWorkbook = Workbooks.Add

    ' Copy the visible fileNames in a new workbook
    sourceSheet.UsedRange.SpecialCells(xlCellTypeVisible).Copy targetWorkbook.Worksheets(targetWorkbook.Sheets.Count).Range("A1")

    ' Save the new workbook
    targetWorkbook.SaveAs ThisWorkbook.Path & "\" & fileName & ".csv", FileFormat:=xlCSV

End Sub