【问题标题】:Excel 2010 VBA to copy range A:Z and Paste A2:ZExcel 2010 VBA 复制范围 A:Z 并粘贴 A2:Z
【发布时间】:2015-11-12 07:53:34
【问题描述】:

我尝试进行研究,但对我想要实现的目标一无所获。我正在使用两个不同的文件; file1.csv(sheet1) 和 workbook1(sheet2)

file1.csv(sheet1) 包含来自 A:EW 列的数据,超过 1000 行,并定期更新新行

这里的最终目标是自动复制 file1.csv(sheet1) 的全部内容并将数据从 sheet1 粘贴到 workbook1(sheet2) 中,从 sheet2 上的 A2 开始,因为我需要 A1 在 sheet2 上保持空白

我还要注意,我不能提供实际文件,因为它们是机密文件,如果需要,我可以制作一个示例文件。

这是我目前在 workbook1 中的代码,但在向/从不同范围复制时不起作用。如果我将其更改为从 A:EW 复制到 A:EW 但是,它会很好用,我需要从 Sheet1 上的 A:EW 复制到 sheet2 上的 A2:EW。有人有什么建议吗?

Sub auto_open()
'
' auto_open Macro
'
ChDir "C:\"
Workbooks.Open Filename:="C:\Users\Username\Desktop\file1.csv"
Sheets("sheet1").Range("A:EW").Copy
Windows(ThisWorkbook.Name).Activate
Worksheets("sheet2").Activate
Range("A2:EW").Select
ActiveSheet.Paste
Windows("sheet1").Activate
Application.CutCopyMode = False
ActiveWorkbook.Close

' Change date/time format of column A from 20151111 090412 to 11/11/2015 9:04
Dim x As Integer
Dim y As Date
Dim z As String
Dim w As String

NumRows = Range("A2", Range("A2").End(xlDown)).Rows.Count

Windows(ThisWorkbook.Name).Activate
For x = 2 To NumRows
     z = Cells(x, 1).Value
     y = Mid(z, 5, 2) & "/" & Mid(z, 7, 2) & "/" & Left(z, 4)
     w = Mid(z, 10, 2) & ":" & Mid(z, 12, 2) & ":" & Mid(z, 14, 2)
     y = y + TimeValue(w)
     Cells(x, 1).Value = y
Next x

Range("A2").Select

End Sub

【问题讨论】:

    标签: vba excel csv


    【解决方案1】:

    Range.CurrentRegion property 可以快速引用源自 A1 的数据“孤岛”。

    Dim wb As Workbook
    Set wb = Workbooks.Open(Filename:="C:\Users\Username\Desktop\file1.csv")
    
    With wb
         'CSVs open with a single worksheet; usually named the same as the CSV, not Sheet1
        With .Worksheets(1)
            With .Range("A1").CurrentRegion
                'reference the destination workbook correctly (ThisWorkbook...?)
                .Copy Destination:=ThisWorkbook.Worksheets("sheet2").Range("A2")
            End With
        End With
    .Close
    End With
    

    您只需要引用左上角的单元格作为粘贴的目的地。

    【讨论】:

    • 现在可以将数据从 A:EW 粘贴到 A2,但它破坏了日期格式脚本。 A3 及以下包含时间戳格式 yyyymmdd hhmmss 的日期,我试图将其转换为 mm/dd/yy hh:mm。我尝试修改上面的代码以更改从 A3 开始的日期,但到目前为止没有运气。它有一个调试错误,突出显示为 "y = Mid(z, 5, 2) & "/" & Mid(z, 7, 2) & "/" & Left(z, 4)"
    【解决方案2】:

    您不能将整列复制到减去一行的列中。如果你这样做,就会发生溢出。限制你的副本多一点,例如你可以试试

    Workbooks.Open Filename:="C:\Users\Username\Desktop\file1.csv"
    intersect(Sheets("sheet1").Range("A:EW"),sheets("sheet1).usedrange).Copy ThisWorkbook.Sheets("sheet2").Range("A2")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多