简体   繁体   English

通过VBA将Excel工作表导出为CSV,并显示公式结果

[英]Exporting excel worksheet to CSV via VBA with formula results shown

I have an excel workbook with multiple sheets, i'm trying to export a particular sheet as a CSV file and save it to the users desktop without impacting the original. 我有一个包含多个工作表的excel工作簿,我正在尝试将特定工作表导出为CSV文件并将其保存到用户桌面,而不会影响原始工作表。 Everything seems to work, however the file is coming out as a PDF, any ideas? 一切似乎正常,但是文件以PDF格式发布,有什么想法吗? Code is below: 代码如下:

Sub CSVSagePricelist_Click()

Dim wsA As Worksheet
Dim wbA As Workbook
Dim TempWB As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
On Error GoTo errHandler

Set wbA = ActiveWorkbook
Set wsA = Sheet8
strTime = Format(Now(), "yyyymmdd\_hhmm")

'get active workbook folder, if saved
strPath = CreateObject("WScript.Shell").specialfolders("Desktop")
If strPath = "" Then
strPath = CreateObject("WScript.Shell").specialfolders("Desktop")
End If
strPath = strPath & "\"

'replace spaces and periods in sheet name
strName = Replace(wsA.Name, " ", "")
strName = Replace(strName, ".", "_")

'create default name for saving file
strFile = "INT-ONLY-SAGE-PRICELIST" & "_" & Sheet16.Range("C17").Text & "_"     & Sheet16.Range("B2").Text & ".csv"
strPathFile = strPath & strFile

'use can enter name and
'select folder for file
myFile = Application.GetSaveAsFilename _
(InitialFileName:=strPathFile, _
    FileFilter:="CSV (Comma delimited) (*.csv), *.csv", _
    Title:="Select Folder and FileName to save")

'export to PDF if a folder was selected
If myFile <> "False" Then
    wsA.ExportAsFixedFormat _
        Type:=xlCSV, _
        Filename:=myFile
    'confirmation message with file info
    MsgBox "Sage pricebook CSV created: " _
      & vbCrLf _
      & myFile
End If

exitHandler:
    Exit Sub
errHandler:
    MsgBox "Could not create CSV file"
    Resume exitHandler
End Sub

Thanks, Nick 谢谢,尼克

Following code lines / code blocks are needed to corrected. 以下代码行/代码块需要更正。 Also you should include Option Explicit in the beginning of code so that undeclared variables are easily identified. 另外,您还应该在代码开头包含Option Explicit ,以便容易识别未声明的变量。

A.) 一种。)

Set wsA = Sheet8

Will give Compiler error. 将给出编译错误。 Variable not defined. 变量未定义。 It should be changed to 它应该更改为

Set wsA = Sheets("Sheet8")

Similarly 同样

      strFile = "INT-ONLY-SAGE-PRICELIST" & "_" & Sheet16.Range("C17").Text & "_"     & Sheet16.Range("B2").Text & ".csv"
strPathFile = strPath & strFile

It should be changed to 它应该更改为

      strFile = "INT-ONLY-SAGE-PRICELIST" & "_" & Sheets("Sheet16").Range("C17").Text & "_" & Sheets("Sheet16").Range("B2").Text & ".csv"
strPathFile = strPath & strFile

B.) Block of code for saving as pdf file has incorrect syntax. B.)保存为pdf文件的代码块语法错误。

  If myFile <> "False" Then
        wsA.ExportAsFixedFormat _
            Type:=xlCSV, _
            Filename:=myFile
        'confirmation message with file info
         MsgBox "Sage pricebook CSV created: " _
          & vbCrLf _
          & myFile
    End If

Needs to be Changed to 需要更改为

        'export to PDF if a folder was selected
If myFile <> "False" Then
    wsA.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=myFile, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    'confirmation message with file info
    MsgBox "PDF file has been created: " _
      & vbCrLf _
      & myFile
End If

With these changes your final code should work fine. 经过这些更改,您的最终代码应该可以正常工作。

Option Explicit
Sub CSVSagePricelist_Click()

Dim wsA As Worksheet
Dim wbA As Workbook
Dim TempWB As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
On Error GoTo errHandler

Set wbA = ActiveWorkbook
Set wsA = Sheets("Sheet8")
strTime = Format(Now(), "yyyymmdd\_hhmm")

'get active workbook folder, if saved
strPath = CreateObject("WScript.Shell").specialfolders("Desktop")
If strPath = "" Then
strPath = CreateObject("WScript.Shell").specialfolders("Desktop")
End If
strPath = strPath & "\"

'replace spaces and periods in sheet name
strName = Replace(wsA.Name, " ", "")
strName = Replace(strName, ".", "_")

'create default name for saving file
strFile = "INT-ONLY-SAGE-PRICELIST" & "_" & Sheets("Sheet16").Range("C17").Text & "_" & Sheets("Sheet16").Range("B2").Text & ".csv"
strPathFile = strPath & strFile

'use can enter name and
'select folder for file
myFile = Application.GetSaveAsFilename _
(InitialFileName:=strPathFile, _
    FileFilter:="CSV (Comma delimited) (*.csv), *.csv", _
    Title:="Select Folder and FileName to save")

'export to PDF if a folder was selected
If myFile <> "False" Then
    wsA.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=myFile, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    'confirmation message with file info
    MsgBox "PDF file has been created: " _
      & vbCrLf _
      & myFile
End If

exitHandler:
    Exit Sub
errHandler:
    MsgBox "Could not create CSV file"
    Resume exitHandler
End Sub

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM