我正在尝试遍历 .xls 工作簿的一列。该一列的每一行都有数据需要复制到新的 .xlsm 工作簿,同时自动生成我制作的字符串(名称、描述等)。我尝试了下面列出的解决方案,但出现 1004 错误,我不知道如何继续。我对 VBA 很陌生,所以任何指针都将不胜感激。
我看到或可能需要解决的一些问题如下;
- 错误 1004(应用程序定义或对象定义错误)。错误发生在 if 语句 < .Range(Cells((x+1) etc. >
- 当我从 .xls 工作簿中的一行复制数据时,它会为新的 .xlsm 工作簿填充两行(故意)。因此,每次复制数据时,我都需要能够容纳额外的行。这就是为什么我在 for 循环中有 x = x + 1 的原因。
- 对于我正在复制的 .xls 工作簿的行中的一些数据,它们有 2 或 3 条数据需要解析为 2 的子集。因此,对于大多数工作簿来说,它是 1 条数据在新文档中变成 2 行,但如果是 2 条数据 > 4 行,等等。
TL;DR - 我如何克服这个错误以及如何让我的代码更好地在迭代单个列时成功地从另一个工作簿复制数据。
无论如何,这里是代码:
Sub TestThis()
Dim wb As Workbook
Dim x As Integer
Application.ScreenUpdating = False
Set wb = Workbooks.Open("C:\Users\blah\Documents\blah\Week 02\old file.xls", True, True)
With ThisWorkbook.Worksheets("template")
NumRows = wb.Sheets(1).Range("T9:T1116").Rows.Count
Range("T9:T1116").Select
For x = 1 To NumRows
If ActiveCell.Formula <> "" Then
.Range(Cells(x, 2)).Formula = "field 1"
.Range(Cells(x, 5)).Formula = "field 2"
.Range(Cells(x, 7)).Formula = "a sentence is here but is replaced"
.Range(Cells(x, 9)).Formula = "1"
.Range(Cells(x, 10)).Formula = "blah blah blah data"
.Range(Cells(x, 11)).Formula = "blah blah blah more data"
.Range(Cells((x + 1), 9)).Formula = "2"
.Range(Cells((x + 1), 10)).Formula = "Data in " + ActiveCell.Formula + " is stored in blah"
.Range(Cells((x + 1), 11)).Formula = "Data is stored in blah"
End If
x = x + 1
ActiveCell.Offset(1, 0).Select
Next
End With
wb.Close False
Set wb = Nothing
Application.ScreenUpdating = True
End Sub