#excel #vba
#excel #vba
Вопрос:
У меня есть рабочая книга 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 amp; ""
'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" amp; "_" amp; Sheet16.Range("C17").Text amp; "_" amp; Sheet16.Range("B2").Text amp; ".csv"
strPathFile = strPath amp; 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: " _
amp; vbCrLf _
amp; myFile
End If
exitHandler:
Exit Sub
errHandler:
MsgBox "Could not create CSV file"
Resume exitHandler
End Sub
Спасибо,
Ник
Комментарии:
1.
xlCSV
не является типом XlFixedFormatType . Недопустимые аргументы типа, вероятно, просто по умолчанию равны 0 и выдают вам PDF.2.
SaveAs
вместоExportAsFixedFormat
должно сработать.
Ответ №1:
Следующие строки кода / блоки кода необходимо исправить. Также вы должны включить Option Explicit
в начале кода, чтобы необъявленные переменные были легко идентифицированы.
A.)
Set wsA = Sheet8
Выдаст ошибку компилятора. Переменная не определена. Его следует изменить на
Set wsA = Sheets("Sheet8")
Аналогично
strFile = "INT-ONLY-SAGE-PRICELIST" amp; "_" amp; Sheet16.Range("C17").Text amp; "_" amp; Sheet16.Range("B2").Text amp; ".csv"
strPathFile = strPath amp; strFile
Его следует изменить на
strFile = "INT-ONLY-SAGE-PRICELIST" amp; "_" amp; Sheets("Sheet16").Range("C17").Text amp; "_" amp; Sheets("Sheet16").Range("B2").Text amp; ".csv"
strPathFile = strPath amp; strFile
B.) Блок кода для сохранения в виде PDF-файла имеет неправильный синтаксис.
If myFile <> "False" Then
wsA.ExportAsFixedFormat _
Type:=xlCSV, _
Filename:=myFile
'confirmation message with file info
MsgBox "Sage pricebook CSV created: " _
amp; vbCrLf _
amp; 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: " _
amp; vbCrLf _
amp; 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 amp; ""
'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" amp; "_" amp; Sheets("Sheet16").Range("C17").Text amp; "_" amp; Sheets("Sheet16").Range("B2").Text amp; ".csv"
strPathFile = strPath amp; 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: " _
amp; vbCrLf _
amp; myFile
End If
exitHandler:
Exit Sub
errHandler:
MsgBox "Could not create CSV file"
Resume exitHandler
End Sub