Экспорт таблицы Excel в CSV через VBA с отображением результатов формулы - PullRequest
0 голосов
/ 04 марта 2019

У меня есть книга Excel с несколькими листами, я пытаюсь экспортировать конкретный лист в виде файла CSV и сохранить его на рабочем столе пользователя, не затрагивая оригинал.Кажется, все работает, однако файл выходит в формате PDF, есть идеи?Код ниже:

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

Спасибо, Ник

1 Ответ

0 голосов
/ 04 марта 2019

Следующие строки кода / кодовые блоки необходимы для исправления.Также вы должны включить Option Explicit в начале кода, чтобы необъявленные переменные были легко идентифицированы.

A.)

Set wsA = Sheet8

Даст ошибку компилятора.Переменная не определена.Его следует изменить на

Set wsA = Sheets("Sheet8")

Аналогично

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

Его следует изменить на

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

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

Необходимо изменить на

        '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

С этими изменениями ваш окончательный код должен работать нормально.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...