导出工作表vba时创建空图纸

导出工作表vba时创建空图纸,vba,excel,Vba,Excel,代码: Dim sItem As String Dim backslash As String Private Sub browse_Button_Click() Dim fldr As FileDialog Dim strPath As String Set fldr = Application.FileDialog(msoFileDialogFolderPicker) With fldr .title = "Select a Folder" .AllowMultiSelec

代码:

Dim sItem As String
Dim backslash As String

Private Sub browse_Button_Click()
Dim fldr As FileDialog
Dim strPath As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
    .title = "Select a Folder"
    .AllowMultiSelect = False
    .InitialFileName = strPath
    If .Show <> -1 Then Exit Sub
    sItem = .SelectedItems(1)
End With
showFilePath.Text = sItem
backslash = Right(sItem, 1)
End Sub

Private Sub cancel_button_Click()
Unload Me
End Sub

Private Sub export_button_Click()
If showFilePath = "" Then
    MsgBox "Select a folder"
    Exit Sub
End If
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim xWs As Worksheet
Dim xWb As Workbook
Dim FolderName As String
Application.ScreenUpdating = False
Set xWb = Application.ThisWorkbook
DateString = Format(Now, "yyyy-mm-dd hh-mm-ss")
If (backslash = Chr(92)) Then
    FolderName = sItem & xWb.Name & " " & DateString
Else
    FolderName = sItem & "\" & xWb.Name & " " & DateString
End If
MkDir FolderName
For Each xWs In xWb.Worksheets
    xWs.Copy
        If xlsx = True Then
            FileExtStr = ".xlsx": FileFormatNum = 51
            Unload Me
        ElseIf xlsm = True Then
            FileExtStr = ".xlsm": FileFormatNum = 52
            Unload Me
        ElseIf xls = True Then
            FileExtStr = ".xls": FileFormatNum = 56
            Unload Me
        ElseIf xlsb = True Then
            FileExtStr = ".xlsb": FileFormatNum = 50
            Unload Me
        ElseIf csv = True Then
            FileExtStr = ".csv": FileFormatNum = 6
            Unload Me
        ElseIf txt = True Then
            FileExtStr = ".txt": FileFormatNum = -4158
            Unload Me
        ElseIf txt_unicode = True Then
            FileExtStr = ".txt": FileFormatNum = 42
            Unload Me
        ElseIf html = True Then
            FileExtStr = ".html": FileFormatNum = 44
            Unload Me
        ElseIf mhtml = True Then
            FileExtStr = ".mhtml": FileFormatNum = 45
            Unload Me
        ElseIf prn = True Then
            FileExtStr = ".prn": FileFormatNum = 36
            Unload Me
        ElseIf dbf3 = True Then
            FileExtStr = ".dbf": FileFormatNum = 8
            Unload Me
        ElseIf dbf4 = True Then
            FileExtStr = ".dbf": FileFormatNum = 11
            Unload Me
        End If
    xFile = FolderName & "\" & Application.ActiveWorkbook.Sheets(1).Name & FileExtStr
    Application.ActiveWorkbook.SaveAs xFile, FileFormat:=FileFormatNum
    Application.ActiveWorkbook.Close False
Next

MsgBox "You can find the files in " & FolderName
Application.ScreenUpdating = True
End Sub
Dim sItem作为字符串
暗反斜杠为字符串
专用子浏览按钮点击()
Dim fldr As FILE对话框
将strPath设置为字符串
设置fldr=Application.FileDialog(msoFileDialogFolderPicker)
与fldr
.title=“选择一个文件夹”
.AllowMultiSelect=False
.InitialFileName=strPath
如果.Show-1,则退出Sub
sItem=.SelectedItems(1)
以
showFilePath.Text=sItem
反斜杠=右(sItem,1)
端接头
专用子取消按钮单击()
卸下我
端接头
专用子导出按钮单击()
如果showFilePath=“”,则
MsgBox“选择文件夹”
出口接头
如果结束
Dim FileExtStr作为字符串
Dim FileFormatNum尽可能长
将xWs设置为工作表
Dim xWb作为工作簿
Dim FolderName作为字符串
Application.ScreenUpdating=False
设置xWb=Application.ThisWorkbook
DateString=格式(现在为“yyyy-mm-dd-hh-mm-ss”)
如果(反斜杠=Chr(92)),则
FolderName=sItem&xWb.Name&“”&DateString
其他的
FolderName=sItem&“\”&xWb.Name&“&DateString
如果结束
MkDir FolderName
对于xWb.工作表中的每个xWs
拷贝
如果xlsx=True,则
FileExtStr=“.xlsx”:FileFormatNum=51
卸下我
ElseIf xlsm=则为真
FileExtStr=“.xlsm”:FileFormatNum=52
卸下我
ElseIf xls=则为真
FileExtStr=“.xls”:FileFormatNum=56
卸下我
ElseIf xlsb=则为真
FileExtStr=“.xlsb”:FileFormatNum=50
卸下我
ElseIf csv=则为真
FileExtStr=“.csv”:FileFormatNum=6
卸下我
ElseIf txt=则为真
FileExtStr=“.txt”:FileFormatNum=-4158
卸下我
ElseIf txt_unicode=True然后
FileExtStr=“.txt”:FileFormatNum=42
卸下我
ElseIf html=True则
FileExtStr=“.html”:FileFormatNum=44
卸下我
ElseIf mhtml=则为真
FileExtStr=“.mhtml”:FileFormatNum=45
卸下我
ElseIf prn=则为真
FileExtStr=“.prn”:FileFormatNum=36
卸下我
ElseIf dbf3=则为真
FileExtStr=“.dbf”:FileFormatNum=8
卸下我
ElseIf dbf4=则为真
FileExtStr=“.dbf”:FileFormatNum=11
卸下我
如果结束
xFile=FolderName&“\”&Application.ActiveWorkbook.Sheets(1).Name&FileExtStr
Application.ActiveWorkbook.SaveAs xFile,FileFormat:=FileFormatNum
Application.ActiveWorkbook.Close False
下一个
MsgBox“您可以在”&FolderName中找到文件
Application.ScreenUpdating=True
端接头
用户表单:

此代码在创建为单独的
.xlsm
文件时有效。但是,当我将其作为一个功能区控件时,如下图所示,它不起作用。实际上,它创建了三张名为
Sheet1、Sheet2和Sheet3的空图纸。我的工作表命名为
预算、利润
。只有2张工作表,而代码创建了3张工作表,其中有不同的名称,没有记录。

请提供所需帮助。

功能区控件:

  • 此工作簿
    表示运行此代码的工作簿

  • ActiveWorkbook
    重新发送当前处于活动状态(具有焦点)的工作簿

所以你可能应该改变

Set xWb = Application.ThisWorkbook
进入


如果您将其用作加载项。否则,它会尝试访问加载项中的工作表,而不是您的工作簿。

您的代码在哪里设置工作表的数量及其名称?@SolarMike不会。它直接导出所有工作表,因此无需设置图纸数量。并且名称与工作簿中的名称相同。这是工作簿名称之间差异的一个很好的示例。。。excel所假设的……那真是太神奇了。我不知道这会是个错误。很多。
Set xWb = Application.ActiveWorkbook