【发布时间】:2019-07-01 14:38:14
【问题描述】:
我有一个程序应该从其他工作簿复制一些值,最初我将其设置为从特定销售中获取值。
现在我正在尝试实现搜索功能,而不是手动插入列数。
我正在尝试使用以下功能
Col = wb.Worksheets("Calculation").Rows(2).Find("31.12.2018").Column
但即使文件中有特定值 31.12.2018,它仍然无法正常工作。
此外,它以某种方式工作,直到我改变了一些东西并且现在找不到错误。还有一个问题,如果脚本找不到数据,它会导致无法定义对象的错误(似乎你不能分配.column,当没有找到信息时)。
strFilter = "Excel Files (*.xls;*.xlsb;*.xlsx),*.xls;*xlsb;*.xlsx"
strTitle = "Select input file (XXXX)"
arrfiles = Application.GetOpenFilename(strFilter, 2, strTitle, , True)
If VarType(arrfiles) = vbBoolean Then Exit Sub
Dim out As String
out = Cells(2, 7)
brow = Cells(2, 8)
bcol = Cells(2, 9)
Dim Target As Range
Dim Source As Range
Dim Col As Integer
For b = 1 To UBound(arrfiles)
Set wb = Workbooks.Open(Filename:=arrfiles(b), UpdateLinks:=False)
lLastRow = wb.Worksheets("Calculation").Cells(Rows.Count, 3).End(xlUp).Row
ThisWorkbook.Worksheets(out).Cells(brow, 1) = wb.Worksheets("Template").Cells(3, 3)
ThisWorkbook.Worksheets(out).Cells(brow, 2) = wb.Worksheets("Template").Cells(2, 3)
lLastRow = wb.Worksheets("Calculation").Cells(Rows.Count, 3).End(xlUp).Row
lLastRowCol = ThisWorkbook.Worksheets("Build").Cells(Rows.Count,1).End(xlUp).Row
For k = 2 To lLastRowCol
ThisWorkbook.Worksheets(out).Cells(brow, 1) = wb.Worksheets("Template").Cells(3, 3)
ThisWorkbook.Worksheets(out).Cells(brow, 2) = wb.Worksheets("Template").Cells(2, 3)
Col = wb.Worksheets("Calculation").Rows(2).Find("31.12.2018").Column
ThisWorkbook.Worksheets(out).Cells(brow, 3) = wb.Worksheets("Calculation").Cells(2, Col)
Set Target =ThisWorkbook.Worksheets(out).Range(ThisWorkbook.Worksheets(out).Cells(brow, 4),
ThisWorkbook.Worksheets(out).Cells(brow, 4 + lLastRow - 4))
Set Source = wb.Worksheets("Calculation").Range(wb.Worksheets("Calculation").Cells(4, Col), wb.Worksheets("Calculation").Cells(lLastRow, Col))
Source.Copy
Target.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
brow = brow + 1
Next k
对象未定义是最常见的错误,而且未找到值的文件处理也不起作用(未在上面的代码中显示)
【问题讨论】:
-
您需要检查该值是否为空。如果它是 null 如果它有一个值则给出一个错误执行脚本。
-
好吧,正如我已经说过的,它不知何故找不到值,即使它在那里:/。这就是我现在面临的主要问题
-
您为什么要在 Rows(2) 中搜索?第二行是你想要的值吗?
-
我不确定,但也许 Col = wb.Worksheets("Calculation").Rows(2).Column.Find("31.12.2018") 或 Col = wb.Worksheets("Calculation" ).Rows(2).Find("31.12.2018") 第二个有结果吗?
-
a) 在您的工作表中运行手动查找,看看它是否找到您的文本。如果确实如此,则说明您的代码有问题,否则您尝试查找的文本有问题。 b) 当使用
.Find()时,最好也明确定义.LookAt参数,阅读此处了解更多信息:docs.microsoft.com/en-us/office/vba/api/excel.range.find