【发布时间】:2021-09-09 15:29:42
【问题描述】:
VBA 问题即将出现。
我有一个收入跟踪器(“revenue tracker.xlsx”)文件,我在其中创建了一个宏,用于过滤特定月份条目并根据月份条目创建一个新工作表(工作表标题为“一月”、“二月"等)
考虑到工作表名称是动态的,我现在想将这个新生成的工作表拉到一个新工作簿(“Cost Loader.xlsx”)中。
我的代码如下
Sub PullRevenueTrackerInfo()
'Pull info from respective column into correct column on to Cost Loader
Dim ws_mth As Workbook, ws_charges As Workbook, mapFromColumn As Variant, mapToColumn As Variant
Dim lastCell As Integer, i As Integer, nextCell As Integer, arrCopy As Variant
Dim tbl As ListObject
Dim wsNames As Variant, ws As Worksheet, w As Worksheet, El As Variant, boolFound As Boolean
'2. Dynamic worksheets
wsNames = Split("January,February,March,April,May,June,July,August,September,October,November,December", ",")
For Each w In Worksheets
For Each El In wsNames
If w.Name = El Then
Set ws = w: boolFound = True: Exit For
End If
Next El
Next w
'3. pull information
Set ws_mth = Workbooks("Revenue Tracker.xlsx")
Set ws_charges = Workbooks("Cost Loader.xlsx")
mapFromColumn = Array("I", "J", "K", "L", "M", "N", "O", "P") after
mapToColumn = Array("A", "B", "C", "G", "K", "M", "H", "J")
For i = 0 To UBound(mapFromColumn)
With ws_mth.Worksheets(ws.Name) 'run time 91 error - object variable not set
lastCell = ws_mth.Sheets(ws.Name).ListObjects("Table_owssvr").Range.Rows.Count
arrCopy = .Range(mapFromColumn(i) & 2 & ":" & mapFromColumn(i) & lastCell)
End With
With ws_charges.Worksheets(1)
nextCell = .Range(mapToColumn(i) & .Rows.Count).End(xlUp).Row + 1
.Range(mapToColumn(i) & nextCell).Resize(UBound(arrCopy), UBound(arrCopy, 2)).Value = arrCopy
End With
Next i
我在尝试从我有数据的特定列进行映射时出现类型不匹配错误。我尝试了几种不同的方法,目前非常令人沮丧,我似乎无法让它工作。提前致谢!
编辑:出现运行时错误`使用 ws_mth.Worksheets(ws.Name),我不确定如何调用正确的工作表
【问题讨论】:
-
Worksheets(w)需要括号中的整数或字符串,即工作表索引号或字符串名称。所以,使用Worksheets(w.Name) -
修改了您的建议,不幸的是我现在收到错误“未设置对象变量”
-
抱歉,读得太快了。您想将
ws用于找到的工作表吗?那么应该是Worksheets(ws.Name) -
是的,恐怕这次尝试仍然没有太多的爱,尝试一些新事物,如果我可以开始工作,会回来报告
-
您测试过
ws变量吗?你知道前面的循环是否真的找到了匹配项吗? Exit For 将退出内部循环:这是您想要的吗?您正在设置 boolFound(尽管它尚未初始化为 False):您打算在某处使用它吗?