Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 为什么VBA不能识别我的工作表名称?下标范围不够_Excel_Vba - Fatal编程技术网

Excel 为什么VBA不能识别我的工作表名称?下标范围不够

Excel 为什么VBA不能识别我的工作表名称?下标范围不够,excel,vba,Excel,Vba,我正在尝试创建一个宏来过滤数据库中的导出,将过滤结果复制到不同的工作表中,然后将这些新工作表中的数据复制到另一个工作簿中进行进一步处理。我一直在使用SO的代码,这已经奏效了,但现在我正在尝试将这两个元素结合起来(过滤到新工作表,复制到工作簿),我遇到了一些作为一个新手我无法解决的问题 每次运行宏时,我都会在这一行出现“下标超出范围”错误: Set NAVImperial = NAVExport.Sheets("ROMAN IMPERIAL") 即使有一个工作表肯定有这个名字

我正在尝试创建一个宏来过滤数据库中的导出,将过滤结果复制到不同的工作表中,然后将这些新工作表中的数据复制到另一个工作簿中进行进一步处理。我一直在使用SO的代码,这已经奏效了,但现在我正在尝试将这两个元素结合起来(过滤到新工作表,复制到工作簿),我遇到了一些作为一个新手我无法解决的问题

每次运行宏时,我都会在这一行出现“下标超出范围”错误:

Set NAVImperial = NAVExport.Sheets("ROMAN IMPERIAL")
即使有一个工作表肯定有这个名字。这与使用此工作簿有关吗

提前谢谢

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是
ThisWorkbook
,则可以使用其项目名称引用其所有工作表,避免使用
工作表(“名称”)
。如果打开项目资源管理器(Ctrl+R)。您应该会看到Microsoft Excel对象下的工作表列表。默认名称为Sheet1、Sheet2、Sheet3等。找到括号中名称为ROMAN IMPERIAL的名称,这就是您要引用的图纸

然后,在编写代码时,您可以直接编写
Sheet1.Cells(…
Sheet1.Range(…
),而无需再编写
Sheets(“罗马帝国”)


作为测试,请尝试NAVExport=activeWorkbook.Name,然后在下一步,使用工作簿(NAVExport.Sheets(“ROMAN IMPERIAL”)。我倾向于不使用“set”,而是直接使用名称(或通过“Sheets(sheetName1)”间接使用名称,其中sheetName1=“ROMAN IMPERIAL”).但这可能是我的错误做法!
此工作簿
是包含代码的工作簿-这就是你的意思吗?绝对是“罗马帝国”而不是“罗马帝国”?(额外空格)