【问题标题】:How to copy rows from one worksheet to another worksheet (start at specfic row) by using VBA?如何使用 VBA 将行从一个工作表复制到另一个工作表(从特定行开始)?
【发布时间】:2020-10-09 23:14:13
【问题描述】:

我有一个这样的工作表:

现在,我已经实现了生成不同类别的工作表(即 Internet、桌面出版、商业工作表),因此我需要将这些产品及其名称和价格插入到第 4 行的类别工作表中,如下所示:

这是我的 VBA 代码:

Sub task()
Dim Start As Integer
Start = 3

While Cells(Start + 1, 2).Value <> ""
    Start = Start + 1
Wend

Dim category_range As Range
Set category_range = Range("B4:B" & Start)

Dim List As Object
Set List = CreateObject("Scripting.Dictionary")
Dim Rng As Range

For Each Rng In category_range
    If Not List.Exists(Rng.Value) Then
        List.Add Rng.Value, Nothing
    End If
Next Rng

Dim arr(), k As Variant
ReDim arr(List.Count)

Dim wdnmd As Integer
wdnmd = 0
For Each k In List.Keys
    arr(wdnmd) = k
    wdnmd = wdnmd + 1
Next k

Dim category_index As Integer
For category_index = 0 To List.Count - 1
    Sheets.Add(After:=Sheets("Data")).Name = arr(category_index)
    With Sheets(arr(category_index))
        .Columns("A").ColumnWidth = Sheets("Data").Columns("A").ColumnWidth
        .Range("A3").Value = "Product"
        .Range("B3").Value = "Price"
        .Range("A1").Value = "Products in the " & arr(category_index) & " Category"
    End With
Next category_index

Dim target As Range
Set target = Range("A4:C" & Start)
Dim entry As Range, i As Integer
Dim target_worksheet As String
For i = 4 To Start
    target_worksheet = Cells(i, 2).Value
Next i
End Sub

通过我的代码的最后一行,我们将确定产品属于哪个类别,即我们知道哪个工作表包含该产品。对我来说困难的是如何使代码始终从这三个工作表的4th 行开始插入新条目?我认为VBA应该有一个内置函数来完成这个操作。我试过rows.insertcopypaster的方法很疑惑,但是不知道这部分怎么实现。

【问题讨论】:

  • 使用 cuss 词作为数组变量是不合适的。
  • 请在 Stack Overflow 上使用适合工作场所的语言,而不是可能冒犯某些人或群体的语言。请参阅:Are expletives (cursing, swear words or vulgar language) allowed on SE sites?。请记住,使用攻击性语言往往会导致人们对您的帖子反应不佳(即他们可能会投反对票)。此外,您真的希望未来的雇主看到您在本应是专业的情况下使用这种语言吗?

标签: excel vba


【解决方案1】:

要剪切行,您需要定义要剪切的内容并将其设置为变量,例如“Variabel”

Variabel.EntireRows.Cut

之后你可以试试这个:

ActiveWorkbook.Worksheets("InsertDesiredWorksheet").range(A2).Columns.End(xlDown).Offset(1, 0).EntireRow.Insert

我已经在上面的代码工作的地方做了类似的事情,您可能需要对其进行调整,以便您可以将变量用于类别并在其后命名预期的工作表。

【讨论】:

  • 非常感谢,但我需要Variabel.EntireRows.Copy 而不是Cut
【解决方案2】:

这将从第 4 行开始从 Sheet1 复制 5 行到 Sheet2,只要确保范围相等,例如复制 5 行范围并粘贴到 5 行:

Sheets("sheet1").Range("1:5").Copy Sheets("sheet2").Range("4:9")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    相关资源
    最近更新 更多