gpt4 book ai didi

vba - Excel VBA : Loop through cells and copy values to another workbook

转载 作者:行者123 更新时间:2023-12-02 09:05:34 24 4
gpt4 key购买 nike

我已经在这个问题上花了几个小时,但没有成功找到可行的解决方案。

这是我的问题描述:

我想循环遍历一个工作簿中的特定单元格范围并将值复制到另一个工作簿。根据第一个工作簿中的当前列,我将这些值复制到第二个工作簿中的不同工作表中。当我执行代码时,我总是收到运行时错误 439:对象不支持此方法或属性

我的代码看起来或多或少像这样:

Sub trial()

Dim Group As Range
Dim Mat As Range
Dim CurCell_1 As Range
Dim CurCell_2 As Range

Application.ScreenUpdating = False

Set CurCell_1 = Range("B3") 'starting point in wb 1

For Each Group in Workbooks("My_WB_1").Worksheets("My_Sheet").Range("B4:P4")
Set CurCell_2 = Range("B4") 'starting point in wb 2
For Each Mat in Workbooks("My_WB_1").Worksheets("My_Sheet").Range("A5:A29")
Set CurCell_1 = Cells(Mat.Row, Group.Column) 'Set current cell in the loop
If Not IsEmpty(CurCell_1)
Workbooks("My_WB_2").Worksheets(CStr(Group.Value)).CurCell_2.Value = Workbooks("My_WB_1").Worksheets("My_Sheet").CurCell_1.Value 'Here it break with runtime error '438 object does not support this method or property
CurCell_2 = CurCell_2.Offset(1,0) 'Move one cell down
End If
Next
Next

Application.ScreenUpdating = True

End Sub

我已经进行了广泛的研究,如果您为对象(工作表和范围)使用显式名称,我知道如何将值从一个工作簿复制到另一个工作簿,但我不知道为什么它不像我那样工作使用变量来实现它。我还在 stackoverlow 和 - 显然 - Google 上进行了搜索,但我没有找到可以回答我的问题的类似问题。

所以我的问题是:您能告诉我代码中的错误在哪里,或者是否有另一种更简单的方法可以使用不同的方式完成相同的任务?

这是我的第一个问题,所以我希望我的代码格式、提出的问题和提供的信息一切顺利。否则请告诉我。

最佳答案

5 件事...

1)您不需要此行

Set CurCell_1 = Range("B3") '起始点位于 wb 1

这行代码毫无意义,因为您将其设置在循环内

2)您每次都在循环中进行设置

设置 CurCell_2 = Range("B4")

你为什么要这么做?它每次都会简单地覆盖这些值。另外这个范围在哪张纸上??? (见第5点)

3)CurCell_2 是一个 Range,正如 JohnB 指出的那样,它不是一种方法。

改变

工作簿(“My_WB_2”).Worksheets(CStr(Group.Value)).CurCell_2.Value = Workbooks(“My_WB_1”).Worksheets(“My_Sheet”).CurCell_1.Value

CurCell_2.Value = CurCell_1.Value

4) 您不能仅通过设置“=”符号来指定范围

CurCell_2 = CurCell_2.Offset(1,0)

更改为

设置 CurCell_2 = CurCell_2.Offset(1,0)

5) 在使用两个或多个对象时,始终指定完整的声明,以便减少混淆。您的代码也可以写为

Option Explicit

Sub trial()
Dim wb1 As Workbook, wb2 As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim Group As Range, Mat As Range
Dim CurCell_1 As Range, CurCell_2 As Range

Application.ScreenUpdating = False

'~~> Change as applicable
Set wb1 = Workbooks("My_WB_1")
Set wb2 = Workbooks("My_WB_2")

Set ws1 = wb1.Sheets("My_Sheet")
Set ws2 = wb2.Sheets("Sheet2") '<~~ Change as required

For Each Group In ws1.Range("B4:P4")
'~~> Why this?
Set CurCell_2 = ws2.Range("B4")
For Each Mat In ws1.Range("A5:A29")
Set CurCell_1 = ws1.Cells(Mat.Row, Group.Column)
If Not IsEmpty(CurCell_1) Then
CurCell_2.Value = CurCell_1.Value
Set CurCell_2 = CurCell_2.Offset(1)
End If
Next
Next

Application.ScreenUpdating = True
End Sub

关于vba - Excel VBA : Loop through cells and copy values to another workbook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10782189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com