API PUT в VBA, экспорт CSV из диапазона ячеек (Microsoft Excel) - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь экспортировать немного данных из рабочей книги Excel через API PUT.Конкретный API, который я использую, требует, чтобы данные были в CSV.

У меня есть код с этого сайта , который преобразует диапазон ячеек в CSV.

Sub ExportRangetoFile()
'Update 20150628
Dim Rng As Range
Dim WorkRng As Range
Dim xFile As Variant
Dim xFileString As String
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, 
Type:=8)
Application.ActiveSheet.Copy
Application.ActiveSheet.Cells.Clear
WorkRng.Copy Application.ActiveSheet.Range("A1")
Set xFile = CreateObject("Scripting.FileSystemObject")
xFileString = Application.GetSaveAsFilename("", filefilter:="Comma Separated 
Text (*.CSV), *.CSV")
Application.ActiveWorkbook.SaveAs Filename:=xFileString, FileFormat:=xlCSV, 
CreateBackup:=False
End Sub

1-й выпуск: This пример требует нескольких дополнительных шагов после запуска;выбор диапазона и сохранение / присвоение имени файлу.У меня есть постоянный диапазон ячеек, которые будут преобразованы в CSV (хотя они не имеют постоянного значения), и я не хочу, чтобы пользователь что-либо делал с CSV.Я пытаюсь сделать это как можно более автоматизированным, чтобы другие могли просто нажать кнопку в рабочей книге, чтобы выполнить этот экспорт. Как мне сделать то, что показывает этот сайт, но полностью автоматизировано с помощью макросов и / или модулей в VBA?

2-й выпуск: Если решение проблемы 1найден, и файл CSV сохраняется после каждого запуска этого макроса. Можно ли ПОСТАВИТЬ CSV через вызов API в той же книге, в которой был создан файл? Снова я пытаюсь сделать все автоматизированным, чтобы сделать егокак можно проще для людей, которые больше всего будут использовать эту книгу.Возможно, все эти вещи можно сделать в одном макросе или модуле.

Уточнение

Я прошу помощи в создании CSV из диапазона ячеек, просто запустивмакрос и не нажимая никаких сохранений или имен файлов.Во-вторых, я просто спрашиваю, возможно ли это и рекомендуется ли отправлять этот CSV-файл через вызов API в той же книге или даже в том же макросе, где все это можно сделать одним щелчком мыши по форме.Мне не нужна помощь с особенностями вызова API ... пока.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Привет @Gene ниже - это модифицированный код
примечание: измените somename в соответствии со своим требованием, форматом даты и диапазоном в Set WorkRng = workbook.sheet1.range (" A1: D " & lastrow & "Надеюсь, это сработает для вас.

Sub ExportRangetoFile()
'Update 20150628

Dim Rng As Range

Dim WorkRng As Range

Dim xFile As Variant

Dim xFileString As String

On Error Resume Next
xTitleId = "KutoolsforExcel"
 lastrow= workbook.sheet1.range("A "& rows.count & "").end(xlup).row 
 Set WorkRng = workbook.sheet1.range("A1:D " & lastrow & "")
'Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, 
Type:=8)
Application.ActiveSheet.Copy
Application.ActiveSheet.Cells.Clear
WorkRng.Copy Application.ActiveSheet.Range("A1")
Set xFile = CreateObject("Scripting.FileSystemObject")
xFileString = "somename"& format(now(),"ddmmyyyy")
'Application.GetSaveAsFilename("", filefilter:="Comma         Separated 
Text (*.CSV), *.CSV")
Application.ActiveWorkbook.SaveAs Filename:=xFileString, FileFormat:=xlCSV, 
CreateBackup:=False
End Sub
0 голосов
/ 30 мая 2018

Чтобы построить мой комментарий:

Sub ExportRangetoFile()
'Update 20150628
    Dim Rng As Range, s_row as long, s_col as long, e_row as long e_col as long
    Dim xFile As Variant
    Dim xFileString As String
    'define range
    s_row = 1    'start row
    s_col = 1    'start column
    e_row = 200  'end row
    e_col = 5    'end column
    'back to normal code
    On Error Resume Next
    xTitleId = "KutoolsforExcel"
    Application.ActiveSheet.Copy
    Application.ActiveSheet.Cells.Clear
    'using defined range to copy, then paste
    Range(Cells(s_row,s_col),Cells(e_row,e_col)).Copy Application.ActiveSheet.Range("A1")
    Set xFile = CreateObject("Scripting.FileSystemObject")
    xFileString = Application.GetSaveAsFilename("", filefilter:="Comma     Separated Text (*.CSV), *.CSV")
    Application.ActiveWorkbook.SaveAs Filename:=xFileString, FileFormat:=xlCSV, 
    CreateBackup:=False
End Sub
...