【问题标题】:VBA copying cell value from one sheet to anotherVBA将单元格值从一张纸复制到另一张纸
【发布时间】:2014-07-17 16:26:12
【问题描述】:

有没有人知道我可以如何解决以下问题。我在工作表 1 中有一个表格,我想将其复制到工作表 2。但是,复制只会发生在工作表 1 中第 3 列第 11 到 32 行不为空的单元格中。 如果说 C11 不为空,则 C11 将与 E11、F11、H11、I11 和 J11 一起复制。然后代码检查 C12 是否已填充并执行相同的操作,依此类推。

复制的单元格放置在 sheet2 起始行和第 15 列中。我有以下代码,效果很好。然而,它复制了在 sheet2 中显然没有意义的公式,因此,值是无意义的:

Private Sub CommandButton1_Click()
Dim i As Integer
Dim a As Integer
a = 15
For i = 11 To 32
If Worksheets(1).Cells(i, 3) <> "" Then
Worksheets(1).Cells(i, 3).Copy Worksheets(2).Cells(a, 15)
Worksheets(1).Cells(i, 5).Copy Worksheets(2).Cells(a, 17)
Worksheets(1).Cells(i, 6).Copy Worksheets(2).Cells(a, 18)
Worksheets(1).Cells(i, 7).Copy Worksheets(2).Cells(a, 19)
Worksheets(1).Cells(i, 8).Copy Worksheets(2).Cells(a, 20)
Worksheets(1).Cells(i, 9).Copy Worksheets(2).Cells(a, 21)
a = a + 1
End If
Next i

如何调整代码以便只复制值?

非常感谢您的支持。

【问题讨论】:

  • .Cells(y, x) 表示 VBA 中的 RangeRange 有一个 .PasteSpecial 方法。 (这里是 MSDN 链接:msdn.microsoft.com/en-us/library/office/…)您可能在这里寻找的选项是 xlPasteValues
  • 这个问题似乎离题了,因为它可以使用宏记录器和仅复制/粘贴值选项来回答。

标签: excel vba


【解决方案1】:

因此,对您的代码进行最少更改的方法是:

Private Sub CommandButton1_Click()
Dim i As Integer
Dim a As Integer
a = 15
For i = 11 To 32
If Worksheets(1).Cells(i, 3) <> "" Then
Worksheets(2).Cells(a, 15) = Worksheets(1).Cells(i, 3).Value
Worksheets(2).Cells(a, 17) = Worksheets(1).Cells(i, 5).Value
Worksheets(2).Cells(a, 18) = Worksheets(1).Cells(i, 6).Value
Worksheets(2).Cells(a, 19) = Worksheets(1).Cells(i, 7).Value
Worksheets(2).Cells(a, 20) = Worksheets(1).Cells(i, 8).Value
Worksheets(2).Cells(a, 21) = Worksheets(1).Cells(i, 9).Value
a = a + 1
End If
Next i

【讨论】:

  • 哇。感谢您的快速回复。有用!只是另一个简短的问题。这显然与按钮相关联。如何修改代码,以便每当我按下按钮时,它首先删除 sheet2 中相应列和行中的所有内容,然后填充值。
  • @user3849959 尝试先录制宏。这些问题可以通过您的一些尝试和错误来轻松回答...
  • 对于持续使用 VBA 的人来说,这“容易”可能不适用于初学者。因此,如果您能提供帮助,请不要让其他人回复,我将不胜感激。谢谢!
  • @user3849959 我同意 David 的观点,即可以很容易地从宏记录器中获得正确的删除命令。如果您不知道如何使用宏记录器。互联网上有很多可用的资源。它将帮助回答 VBA 中的许多基本操作方法问题。 “.ClearContents”是删除命令。要清除值,您可以在我展示的代码中使用它来代替“= Worksheets....Value”。
  • 你知道如何修改上面的代码,以便除了这些粗体的值之外,复制的值也是粗体吗?
【解决方案2】:
    Dim i As Integer
    Dim rw As Range, rwD as Range

    Set rwD = Worksheets(2).Rows(15)

    For i = 11 To 32
        Set rw = Worksheets(1).Rows(i)
        If rw.Cells(3) <> "" Then

        rwD.Cells(15).Value = rw.Cells(3).Value
        rwD.Cells(17).Value = rw.Cells(5).Value
        rwD.Cells(18).Value = rw.Cells(6).Value
        rwD.Cells(19).Value = rw.Cells(7).Value
        rwD.Cells(20).Value = rw.Cells(8).Value
        rwD.Cells(21).Value = rw.Cells(9).Value

        Set rwD = rwD.Offset(1, 0)
        End If

    Next i

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多