【问题标题】:API PUT in VBA, exporting a CSV from range of cells (Microsoft Excel)VBA 中的 API PUT,从单元格范围导出 CSV (Microsoft Excel)
【发布时间】:2018-11-09 12:42:55
【问题描述】:

我正在尝试通过 API PUT 从 Excel 工作簿中导出一些数据。我使用的特定 API 要求数据采用 CSV 格式。

我有来自 site 的代码,可以将一系列单元格转换为 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 中的宏和/或模块完全自动化本网站显示的内容?

第二期: 如果找到问题 1 的解决方案,并且每次运行该宏后都会保存一个 CSV 文件,是否可以通过 API 调用将该 CSV 放入创建该文件的同一工作簿中?我正在尝试使一切自动化,以使最常使用此工作簿的人尽可能轻松。也许所有这些事情都可以在一个宏或模块中完成。

澄清

我正在寻求帮助,仅通过运行宏而不单击任何保存或文件命名来从一系列单元格创建 CSV。其次,我只是想问是否有可能,以及最好的做法是通过同一个工作簿中的 API 调用发送这个 CSV 文件,甚至是同一个宏,只需单击一次表单就可以完成。我不需要有关 API 调用细节方面的帮助...。

【问题讨论】:

  • 删除 WorkRng 并替换为您定义的范围。您的第二个问题有点令人困惑......您想要保存 CSV 文件,然后将 CSV 文件添加到 XLSX/XLSM/XLSB 文件中?看起来您已经保存到相同的文件扩展名。

标签: vba excel export-to-csv


【解决方案1】:

以我的评论为基础:

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

【讨论】:

    【解决方案2】:

    嗨@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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多