Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 更改宏以插入信息,而不仅仅是复制_Vba_Excel_Excel 2007 - Fatal编程技术网

Vba 更改宏以插入信息,而不仅仅是复制

Vba 更改宏以插入信息,而不仅仅是复制,vba,excel,excel-2007,Vba,Excel,Excel 2007,这就是我现在用来拉列并将它们粘贴到适当的eorder中的内容。我希望发生两件事。首先,这个宏只是粘贴信息;我想插入信息行,因为我在列的末尾有公式是目标工作表。只需粘贴,信息就会粘贴到包含公式的单元格上。第二,上面的宏没有任何边界;我已设置了目标图纸,但粘贴时会丢失所有边框(即使母版图纸和目标图纸有边框)。也许插入会解决这个问题-我不确定。但无论如何,我想插入而不是粘贴。从您的代码中,很明显,您只是从一张表中读取值,然后将它们写入另一张表中。因此,要读取公式生成的值,请使用.TEXT而不是.VAL

这就是我现在用来拉列并将它们粘贴到适当的eorder中的内容。我希望发生两件事。首先,这个宏只是粘贴信息;我想插入信息行,因为我在列的末尾有公式是目标工作表。只需粘贴,信息就会粘贴到包含公式的单元格上。第二,上面的宏没有任何边界;我已设置了目标图纸,但粘贴时会丢失所有边框(即使母版图纸和目标图纸有边框)。也许插入会解决这个问题-我不确定。但无论如何,我想插入而不是粘贴。

从您的代码中,很明显,您只是从一张表中读取值,然后将它们写入另一张表中。因此,要读取公式生成的值,请使用.TEXT而不是.VALUE

Sub test4()

Dim LCopyToRow As Long
Dim LCopyToCol As Long
Dim arrColsToCopy
Dim c As Range, x As Integer

On Error GoTo Err_Execute


arrColsToCopy = Array(1, 25, 3) 'which columns to copy ?
Set c = Sheets("MasterList").Range("Y5")  'Start search in Row 5
LCopyToRow = 2 'Start copying data to row 2 in Sheet4

While Len(c.Value) > 0

    'If value in column Y ends with "2188", copy to Sheet4
    If c.Value Like "*2188" Then

        LCopyToCol = 1
        For x = LBound(arrColsToCopy) To UBound(arrColsToCopy)

            Sheets("Sheet4").Cells(LCopyToRow, LCopyToCol).Value = _
                           c.EntireRow.Cells(arrColsToCopy(x)).Value

           LCopyToCol = LCopyToCol + 1

        Next x

        LCopyToRow = LCopyToRow + 1 'next row

    End If

    Set c = c.Offset(1, 0)

Wend

'Position on cell A5
Range("A5").Select

MsgBox "All matching data has been copied."

Exit Sub

Err_Execute:
        MsgBox "An error occurred."

End Sub
您可以做的另一件事是使用内置的Copy函数

myValue = someRange.Text   'reads the output text by the formula but .TEXT is read only so be careful
然后转到要粘贴的工作表并执行以下操作

SomeRange.Copy


如果我理解你的问题,我想你只需要在粘贴前在目的地工作表中插入一个新行

因此,在下面的代码中,我添加了一行,在粘贴列的循环之前添加一行

Activesheet.PasteSpecial (use options here to copy formats and so on)
让我知道这看起来是否正确,或者我是否误解了你

更新

若要复制格式,请在复制值的行之后添加以下两行:

If c.Value Like "*2188" Then

    LCopyToCol = 1

'--> Sheets("Sheet4").Cells(LCopyToRow, LCopyToCol).EntireRow.Insert shift:=xlDown

    For x = LBound(arrColsToCopy) To UBound(arrColsToCopy)

以下是给你的一些提示:

此代码为我插入和复制以下格式:

c.EntireRow.Cells(arrColsToCopy(x)).Copy
Sheets("Sheet4").Cells(LCopyToRow, LCopyToCol).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone

我想我们中的一方或双方都感到困惑。我的工作簿有一张母版纸,后面有@30张单独的工作表。母版纸上根本没有公式;这只是原始数据。每个单独的工作表在某些列的底部都有总计和公式。当我使用上面的宏时,它会将主工作表中的数据放入单个工作表中,但如果信息包含的太多,则会用公式覆盖单元格。我希望它不只是在所有单元格(即带有我的公式的单元格)上插入信息,而是将数据行插入到各个工作表中。目标工作表上是否有现有数据,或者只是公式?如果它们的格式都相似,则可以在公式上方插入值。至于边框不显示的原因:看起来您已经在目标工作表上应用了边框-上面的宏不应该影响它们。这几乎正是我想要做的。它正确传输信息并插入,以保持目标中的公式不变。但是,当它插入新行时,它会从插入位置正上方的行中获取格式,该行包含所有列标题。我仍然需要检查并调整所有数据单元格的大小,因为它们没有从源代码中继承格式。我还更新了代码以演示如何复制格式。我还没有测试它,所以您可能需要对它进行一些修改。如果此答案解决了您的问题,请单击答案左侧的复选标记将其标记为正确。谢谢,我想我做错了什么。我想“PastSpecial”应该有一个“e”在里面?当我把它放进去时,我得到了表达式结束错误和/或操作错误。我把vba的格式弄乱了吗?不,是我的错。你是对的,它应该是带有“e”的
PasteSpecial
。另外,第三行是完全不需要的,所以我删除了它。你能再试一次代码吗?实际上,这次我测试了它:)在第二行的两个实例中,我一直得到“:”的表达式错误。
c.EntireRow.Cells(arrColsToCopy(x)).Copy
Sheets("Sheet4").Cells(LCopyToRow, LCopyToCol).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone
    Dim rOrigin As Range, rCopyTo As Range

    Set rCopyTo = Selection
    Set rOrigin = Range("A2")

    rCopyTo.Insert xlShiftToRight, rOrigin.Copy
    Application.CutCopyMode = False