【发布时间】:2021-04-09 10:01:08
【问题描述】:
我正在尝试创建一个宏来过滤从我们的数据库中导出的内容,将过滤后的结果复制到不同的工作表,然后将这些新工作表中的数据复制到另一个工作簿以进行进一步处理。我一直在使用来自 SO 的代码,但现在我正在尝试将这两个元素结合起来(过滤到新工作表,复制到工作簿)我遇到了一些作为新手我无法解决的问题!
每次运行宏时,我都会在此行收到“下标超出范围”错误:
Set NAVImperial = NAVExport.Sheets("ROMAN IMPERIAL")
即使肯定有一个具有此名称的工作表。这与使用 ThisWorkbook 有关吗?
提前致谢!
Sub Sortcodingv2()
Application.ScreenUpdating = False
Dim x As Range
Dim rng As Range
Dim last As Long
Dim sht As String
'specify sheet name in which the data is stored
sht = "236"
'change filter column in the following code
last = Sheets(sht).Cells(Rows.Count, "C").End(xlUp).Row
Set rng = Sheets(sht).Range("A1:O" & last)
Sheets(sht).Range("C1:C" & last).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("AA1"), Unique:=True
For Each x In Range([AA2], Cells(Rows.Count, "AA").End(xlUp))
With rng
.AutoFilter
.AutoFilter Field:=3, Criteria1:=x.Value
.SpecialCells(xlCellTypeVisible).Copy
Sheets.Add(After:=Sheets(Sheets.Count)).Name = x.Value
ActiveSheet.Paste
End With
Next x
' Turn off filter
Sheets(sht).AutoFilterMode = False
With Application
.CutCopyMode = False
.ScreenUpdating = True
End With
Dim NAVExport As Workbook
Set NAVExport = ThisWorkbook
' Roman Imperial
Dim NAVImperial As Worksheet
Dim LIVEImperial As Workbook
Dim LIVEImperialSheet As Worksheet
Dim UniqueIDs As Range
Dim Descriptions As Range
Dim LastRow As Long
Application.ScreenUpdating = False
Set NAVImperial = NAVExport.Sheets("ROMAN IMPERIAL")
Set LIVEImperial = Workbooks.Open("\\WDMYCLOUDEX2\Public\Sortcoding\Roman Imperial.xlsm")
Set LIVEImperialSheet = LIVEImperial.Sheets("LIVE Data")
With NAVImperial
LastRow = NAVImperial.Cells(Rows.Count, "A").End(xlUp).Row
End With
Set UniqueIDs = NAVImperial.Range("B2:B" & LastRow)
Set Descriptions = NAVImperial.Range("F2:F" & LastRow)
UniqueIDs.Copy
LIVEImperialSheet.Range("A2").PasteSpecial xlPasteValues
Descriptions.Copy
LIVEImperialSheet.Range("B2").PasteSpecial xlPasteValues
Application.CutCopyMode = False
LIVEImperialSheet.Range("C2:O" & LastRow).FillDown
LIVEImperial.Close True
Application.ScreenUpdating = True
【问题讨论】:
-
作为测试,尝试 NAVExport = activeWorkbook.Name 然后向下,Workbooks(NAVExport).Sheets("ROMAN IMPERIAL") 我倾向于不使用“set”并直接(或间接)使用名称通过“表格(表格名称1)”,其中表格名称1 =“罗马帝国”)。但这对我来说可能是不好的做法!
-
ThisWorkbook是其中包含代码的工作簿 - 这就是您的意思吗? -
肯定是“罗马帝国”而不是“罗马帝国”? (多余的空格)