您可以使用 VBA 在维护预先存在的数据的 csv 中填充字段吗?

Can you use VBA to populate a field in a csv whist maintaining the pre-existing data?

提问人:Satron 提问时间:9/26/2023 最后编辑:Satron 更新时间:9/27/2023 访问量:53

问:

第一次在这里问任何事情,即使我没有这方面的经验,我的任务也是在 VBA 中做一些事情。我已经阅读了其他帮助我取得一些进展的文章,但我正在尝试从电子表格中提取一些数据,比如 A10:M10,因此从一行中选择几个单元格,然后我必须将它们放入一个预先存在的.csv中,该已经填充了很多字段,这些字段不会因使用而异,但我需要从 A10 获取数据:M10 在 csv 中相当于 Z2:Z12,因此一行到一列。这可能吗?到目前为止,我只设法让我的代码用一些标题填充空白的 .csv,但我真的认为我为每个字段键入每个值是不可行的。任何帮助都非常感谢。

Sub WriteFile()

  Dim ColNum As Integer
  Dim Line As String
  Dim LineValues() As Variant
  Dim OutputFileNum As Integer
  Dim PathName As String
  Dim RowNum As Integer
  Dim SheetValues() As Variant

  PathName = Application.ActiveWorkbook.Path
  OutputFileNum = FreeFile

  Open PathName & "\file.csv" For Output Lock Write As #OutputFileNum

  Print #OutputFileNum, "Field1" & "," & "Field2" & "," & "Field3" & "," & "..." & "," & "Field26" 



  Close OutputFileNum

End Sub
Excel VBA CSV 数据转换

评论

0赞 VBasic2008 9/26/2023
代码是否位于具有源范围的工作簿中?您是否知道包含此代码的工作簿需要具有 or 扩展名?源工作表的名称是什么?两个文件是否在同一个文件夹中?最好通过编辑您的帖子来添加其他信息。.xlsm.xlsb
0赞 Tim Williams 9/26/2023
如果在 Excel 中打开 CSV,则可以更新/添加数据,而不会丢失任何其他现有内容。然后保存并关闭 CSV。

答:

0赞 VBasic2008 9/26/2023 #1

将行复制到列

Sub CopyRowToColumn()
   
    ' Source
    Dim swb As Workbook: Set swb = ThisWorkbook ' workbook containing this code
    Dim sws As Worksheet: Set sws = swb.Sheets("Sheet1")
    Dim srg As Range: Set srg = sws.Range("A10:M10") ' 13 cells hence 'Z2:Z14'

    Application.ScreenUpdating = False
    
    ' Destination
    Dim dwb As Workbook:
    Set dwb = Workbooks.Open(swb.Path & Application.PathSeparator & "File.csv")
    Dim dws As Worksheet: Set dws = wb.Sheets(1) ' the one and only
    Dim dfCell As Range: Set dfCell = dws.Range("Z2")
    Dim drg As Range: Set drg = dfCell.Resize(srg.Columns.Count)
    
    ' Copy values.
    drg.Value = Application.Transpose(srg.Value)
    
    ' Save and close.
    dwb.Close SaveChanges:=True
    
    Application.ScreenUpdating = True

    ' Inform.
    MsgBox "Row copied to column.", vbInformation
    
End Sub

评论

0赞 Satron 9/27/2023
我得到了这个工作,谢谢。如何修改它以将单个单元格从第一个工作簿复制到第二个工作簿?比如说,从源头的 A10 需要转到目的地的 A2,还需要 4 或 5 个单独的单元格,而不是以任何特定的顺序,因为并不总是 A 到 A 列?我很抱歉,如果这真的是我非常欣赏和帮助的基本内容。
0赞 VBasic2008 9/27/2023
这很特别,因为您正在转置(行到列,反之亦然)。否则,它要简单得多,例如.我的意思是,你可以一个单元格一个单元格地进行转置,对吧?dws.Range("A2").Value = sws.Range("A10").Value