VBA,群里的问题,如何单独只保存1个sheet,而不是保证整个工作簿workbook?

1 群里有人求助的问题1 

  • 有大神回答了,代码很简洁
  • 但是可能没注意到,这个求助的是需求把一个sheet单独导出为csv

2 方法1:单独把一个sheet另存为csv

  • 方法1的思路:
  • 先copy一个sheet,EXCEL会自动生成一个新的activeworkbook
  • 保存这个新的wb就行了
Sub 导出csv()

Dim str1 As String
Dim sh1, sh2 As Worksheet
Dim path1

path1 = "C:\Users\Administrator\Desktop"
str1 = InputBox("请输入您要导出的sheet名")

For Each sh1 In ThisWorkbook.Worksheets
    If sh1.Name = str1 Then
         sh1.Copy
         ActiveWorkbook.SaveAs path1 & "\" & sh1.Name & ".csv"
         ActiveWorkbook.Close
       Exit Sub
    Else
       MsgBox ("没有这个sheet或您输入的sheet名不对,请您修改后重试")
    End If
Next

End Sub

3  直接保存工作簿的语法(EXCEL正常只能整体保存workbook,不能单独保存worksheet)

3.1 workbooks().saveas

  • 简洁的代码如这个:
  • ActiveWorkbook.SaveAs Filename:="C:\A\" & 文件名 ".csv", FileFormat:=xlCSV

3.2 worksheets().saveas   和wb.saveas没区别

  • 除了使用workbooks().saveas
  • 居然也可以使用 worksheets().saveas,并且功能和wb.saveas一致,每个工作表和其改动都会保存。
  • thisworkbook.SaveAs path1 & "\" & sh1.Name & ".csv"
  • sh1.SaveAs path1 & "\" & sh1.Name & ".csv"
Sub 导出csv2()

Dim str1 As String
Dim sh1, sh2 As Worksheet
Dim path1

path1 = "C:\Users\Administrator\Desktop"

str1 = InputBox("请输入您要导出的sheet名")

For Each sh1 In ThisWorkbook.Worksheets
    If sh1.Name = str1 Then
       sh1.SaveAs path1 & "\" & sh1.Name & ".csv"
'       thisworkbook.SaveAs path1 & "\" & sh1.Name & ".csv"  '实测这2种写法都会全部保存wb
       Exit Sub
    Else
       MsgBox ("没有这个sheet或您输入的sheet名不对,请您修改后重试")
    End If
Next

4 扩展问题:有时候试试,多个sheet 这样是否OK

  • 反而更简洁
Sub 导出csv1()
Dim sh1 As Worksheet
Dim path1
path1 = "C:\Users\Administrator\Desktop"
    For Each sh1 In ThisWorkbook.Worksheets
        sh1.Copy
        ActiveWorkbook.SaveAs path1 & "\" & sh1.Name & ".xlsx"
        'ActiveWorkbook.SaveAs path1 & "\" & ThisWorkbook.Name & "-" & sh1.Name & ".xlsx"
        ActiveWorkbook.Close
    Next
End Sub

5  有其他方法单独保存一个worksheet吗?

发布了419 篇原创文章 · 获赞 47 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/xuemanqianshan/article/details/104416751
今日推荐