【发布时间】:2018-12-11 16:52:43
【问题描述】:
我一直在努力解决这个问题,但到目前为止还没有成功。该代码有效,但不幸的是以意想不到的方式。
MACRO 工作簿是“数据”表上所有数据字段的主工作簿。 LEAN 工作簿包含某些数据点,我想将这些数据点复制并粘贴到 MACRO 工作簿内“数据”表上的命名范围中,直到可用的最后一行。
例如:
宏工作簿有列:
Eng # Eng Name Date Started Date Completed KPI1 KPI2
100 ABC 12/01/2018 12/10/2018 50 100
精益工作簿有列:
Eng # Date Started Date Completed KPI# Score
101 12/02/2018 12/03/2018 1 50
101 12/02/2018 12/03/2018 2 10
102 11/01/2018 11/20/2018 1 100
102 11/01/2018 11/20/2018 4 100
目标有两个:
- 从精益工作簿的特定列中获取数据,并将其粘贴到宏工作簿的“数据”工作表中的最后一行
- 从精益工作簿中获取 KPI #(在行中)并通过 score 到与“数据”表中的 KPI # 匹配的命名范围/列。
我对下面代码的尝试:
Public Sub GrabLeanFileData()
Dim wbmacro As Workbook
Dim wblean As Workbook
Set wbmacro = Workbooks.Item("MacroFile.xlsm")
Set wblean = Workbooks.Item("Subcontractor CA - KPI's Lean.csv")
Dim wsmacro As Worksheet
Dim wslean As Worksheet
Set wsmacro = wbmacro.Worksheets.Item("Data")
Set wslean = wblean.Worksheets.Item("Subcontractor CA - KPI's Lean")
Dim leanrange As Range
Set leanrange = wslean.Range("A2:A15000")
wblean.Activate
Dim cell As Range
i = 1
For Each cell In leanrange
If leanrange.Range("A2") <> "E1002" Then
Range("A2").Offset(i, 0).Value = wsmacro.Range("Enum").Value
Range("B2").Offset(i, 0).Value = wsmacro.Range("ds").Value
Range("C2").Offset(i, 0).Value = wsmacro.Range("dc").Value
Range("D2").Offset(i, 0).Value = wsmacro.Range("kpi1").Value
i = i + 1
End If
Next cell
End Sub
我想跳过 1002 的测试 Eng # 所以我把这个条件放进去。
【问题讨论】:
-
“代码有效,但不幸的是以意想不到的方式。” - 你这是什么意思?你有错误吗?您的预期结果是什么,目前的结果是什么?
-
另外,您在
For Each循环中迭代了cell,但您从未在循环中使用它。 -
如果您将 for 循环中的范围明确命名为
wslean.Range("A2").Offset(i,0),它会改变什么吗?只是一个猜测。在不知道您的代码输出什么的情况下,很难确定问题所在。 -
不做任何更改,似乎从 MACRO 表中获取列标题并将其粘贴到从单元格 A2 开始的 LEAN 工作簿中。它似乎在反向运行:(
-
wsmacro.Range("enum")是您的列标题吗?如果是这样,我认为您只是颠倒了语法。wsmacro.Range("enum") = wslean.Range("A2").Offset(i,0)解决问题了吗?