从多个Excel工作表复制数据,并使用VBScript将其附加到单个Excel工作表

时间:2014-10-16 01:40:43

标签: excel vba excel-vba vbscript

方案如下:

  1. 我有一个包含数据的excel(.xls)文件。 (例如 A.xls
  2. 此Excel文件中的数据位于单个工作表(工作表1)上。
  3. 此文件中的列数是固定的,即8
  4. 但是,包含数据的行数可能会不时变化。 (此文件不时由其他程序更新)
  5. 现在,我有另一个excel文件(例如 B.xls ),其数据类型相似但与 A.xls 的内容不一样。
  6. B.xls 中的列数也是8。但是,包含数据的行数未知。
  7. 我想要复制 A.xls 第2行以后排除包含列标题的第1行)的内容并追加/将其粘贴到B.xls文件中,而不会覆盖B.xls上的现有数据。

    考虑到所有这些细节,我想编写一个vbscript来自动执行此任务。

    请帮忙。

    非常感谢,提前。

2 个答案:

答案 0 :(得分:2)

它需要大量清理,但这样的事情应该有效。我会稍微清理一下然后进行编辑。

Sub CopyRows()
  ' Choose the name of the Second Workbook and last column.
  ' It must be in the same directory as your First Workbook.
  secondWorkbook = "B.xls"
  lastColumn = "H"

  ' A couple more variables
  currentWorkbook = ThisWorkbook.Name
  Workbooks.Open ThisWorkbook.Path & "\" & secondWorkbook

  ' In the First Workbook, find and select the first empty
  ' cell in column A on the first Worksheet.
  Windows(currentWorkbook).Activate
  With Worksheets(1).Columns("A:A")
    Set c = .Find("", LookIn:=xlValues)
    If Not c Is Nothing Then
      ' Select and copy from A2 to the end.
      secondAddress = Replace(c.Address, "$A$", "")
      Range("A2:" & lastColumn & CStr(CInt(secondAddress) - 1)).Select
      Selection.Copy
    End If
  End With

  ' Activate the Second Workbook
  Windows(secondWorkbook).Activate
  With Worksheets(1).Columns("A:A")
    Set c = .Find("", LookIn:=xlValues)
    If Not c Is Nothing Then
      ' Select and paste the data from First Workbook
      Range(c.Address).Select
      ActiveSheet.Paste
    End If
  End With
End Sub

更新:这应该可以解决问题。我也是第一次从错误的工作簿中复制过来。如果您有疑问,请告诉我。

答案 1 :(得分:2)

这是Macro Recoder可能为您编写的内容。你会提出不同的方法。

开启录音。打开A.xls和B.xls。在a上向下移动一行。按 Shift + 结束然后,然后 Shift + 结束 + 。然后 Ctrl + C 复制数据。切换回B. 结束 + 。粘贴 Ctrl + V 。关闭录音。

您可以在Excel中录制。

替代 + Ť中号 - [R

然后 Home 键然后。停止录音。

看看Excel写的是什么

Selection.End(xlUp).Select

或者您是否有录制的“转到”对话框

Application.Goto Reference:="R1C1"

或者如果您录制了 Ctrl + Home

Range("A1").Select

转换为vbscript

记录excel宏录制器中的步骤。你必须重写一下,因为它使用了一种vbs没有的语法。

这适用于(我在vba中没有中篇9)xlRangeAutoFormatAccounting4

Selection.AutoFormat Format:=xlRangeAutoFormatAccounting4, Number:=True, _
    Font:=True, Alignment:=True, Border:=True, Pattern:=True, Width:=True

首先在vba的对象浏览器中查找常量。 xlRangeAutoFormatAccounting4 = 17

然后在对象浏览器中查看该函数,并查看函数定义的底部。

Function AutoFormat([Format As XlRangeAutoFormat = xlRangeAutoFormatClassic1], [Number], [Font], [Alignment], [Border], [Pattern], [Width])

所以vba变成vbs(和vbs在vba中工作)(正如你所看到的,你可以通过正确的方式计算出来,而不需要通常查看函数)

Selection.AutoFormat 17, True, True, True,True, True, True

所以你的代码变成了

objXLWs.Range("A3").CurrentRegion.Select.AutoFormat 17, True, True, True,True, True, True