一段时间以来,我一直在寻找答案,并且已经很接近了。
简而言之,我有一个包含各种列的表单。其中之一就是数量。此列将始终具有一个值,好像没有数量时将保持空白。但是,如果单元格中填充了一个值,则需要将整个公式行复制到下面的行中。
今天早上,我在这里碰到了以下内容,这是我所见过的最接近的内容,但是我对代码的理解不足,无法满足我的需要(或者甚至不是最好的方法?)
我找到的代码:
pdfStamper.FormFlattening = true;
pdfStamper.Close();
pdfReader.Close();
在我的表格上,数量从E15开始(订购的零件在之前的栏中)。如果E15有一个值,则公式应复制到下一行,依此类推。如果下一行的数量为空,那么我需要删除输入的任何公式。因此,从本质上讲,只有在原始表中的数量值存在时才进行填充,因为最后还要放置一行。我可以做最后一部分,但是我之前找到的所有代码都输入公式,因此,单元格当然不是空白并引起其他问题,因此请问是否可以用这种方式来完成?
这是表格的副本。您会注意到,编号为No的部分的值从A15开始,如果下一行订购了任何内容,则需要整行信息。
这是转换后的版本,正如您所看到的那样,但是我需要按照说明进行复制。
我其余的代码都有效,这只是我遇到问题的这一部分。当前的完整代码-
Sub SmartCopy()
Dim s1 As Worksheet, s2 As Worksheet
Dim N As Long, i As Long, j As Long
Set s1 = Sheets("Order")
Set s2 = Sheets("Converted")
N = s1.Cells(Rows.Count, "C").End(xlUp).Row
j = 1
For i = 1 To N
If s1.Cells(i, "C").Value = "" Then
Else
s1.Cells(i, "C").EntireRow.Copy s2.Cells(j, l)
j = j + 1
End If
Next i
End Sub
“'将列填充到单元格C3的最后一行数据”部分是当前无法执行的操作。
编辑:我还应该添加一点,可以订购任意数量的零件,因此我不能指定一行到一行,它可以是一个零件,可以是1000。
因此在转换后的版本中,您将在第33行看到TRA。这是因为当前方法正在向下复制并寻找下一个空白单元格,因为它们中的公式不是空白,因此询问是否可以完成此操作用这种方式代替。我希望有帮助吗?
答案 0 :(得分:0)
这里有很多事情要做,我首先建议您减少对“选择”和“激活”的所有引用。 Check here,以获取一些极好的信息。
您的代码添加了一个命名工作表,但是随后几乎所有后续内容都引用了您刚刚创建的工作表中没有的范围。您需要专门命名工作表,在这里使用with
块会有所帮助。就您而言:
'Add new sheet for table
Sheets.Add.Name = "Converted"
With worksheets("Converted")
'Populate new worksheet
.Range("A1") = "MSG"
.Range("B1").formula = "=Order!F2"
.Range("C1") = "ORDER"
.Range("D1") = "1400008000"
.Range("E1") = "501346009175"
End with
(请注意.range前面的点)
这是假设您只打开一个工作簿。如果没有,也请指定! Workbooks("Orders.xlsx").Worksheets("Converted").range("A1")
非特定范围可能是导致当前工作表上的空白行的原因-编译器正在计算一张工作表上的行,将行号存储在内存中,基于.activate
选择其他工作表,并创建该工作表行中的值。
如果要在“ A”列中找到包含非空白值的最后一行,请使用
lastrow = Worksheets("Converted").Cells(.rows.Count, "A").End(xlUp).Row
祝你好运!