2017-06-01 991 views
-1

我有一个表名数组。我想从其他文件复制数据并将数据粘贴到各自的工作表中。但它没有找到该工作表。它创建在这个步骤中的错误:使用VBA Excel查找和激活工作表

worksheets.(sheets(i)).Activate 

这里是我的代码:

Sub NewWorkshet() 
    Dim criteria(40) As Integer 
    Dim i As Integer  
    Dim MyFile As String 

    MyFile = Application.GetOpenFilename() 

    criteria(0) = 335 
    criteria(1) = 336  
    criteria(2) = 337   
    criteria(3) = 338 
    criteria(4) = 339   
    criteria(5) = 351   
    criteria(6) = 392   
    criteria(7) = 393 

    Dim sheets As Variant   
    sheets = Array(a335, a336, a337, a338, a339, a351, a392, a393) 

    For i = 0 To 7   
     ' Remove Filter 
     Windows("firstbook.xlsx").Activate 
     ActiveSheet.Range("$A$1:$S$6274").AutoFilter Field:=17 
     Workbooks.Open (MyFile) 
     Worksheets("first").Select 
     ActiveSheet.Range("$A$1:$O$3339").AutoFilter Field:=2, Criteria1:=criteria(i) 

     Range("A2").Select 
     Range(Selection, Selection.End(xlToRight)).Select 
     Range(Selection, Selection.End(xlDown)).Select 
     Selection.Copy 

     Windows("firstbook").Activate 
     Worksheets("sheets(i)").Select 
     Range("B2").Select 
     Selection.End(xlDown).Select 
     Selection.Offset(1, -1).Select 
     ActiveSheet.Paste 

     Workbooks(MyFile).Close SaveChanges:=False 
    Next i 
End Sub 
+0

尼莱什请澄清。你有一个叫做“firstbook”的工作簿,里面有表格名称“a335”,“a336”等,你想复制到哪些书到哪?另一个工作簿并创建具有相同名称的工作表? – micstr

回答

0

它的治疗工作表( “表(I)”),字面上的字张(I)选择不作为变量。所以它不会改变,它不会找到你的工作表。

您需要为此创建一个字符串。

尝试添加Dim MySheet As String

然后在循环使用:

MySheet = "sheets(" & i & ")" 

然后MySheet的工作可以被引用,并会改变,因为你想要的。

+0

正如你在MySheet =“sheets(”&i&“)”之后所建议的那样,我使用了Worksheets(MySheet)。选择..但它不工作。它在此步骤显示错误 - 工作表(MySheet)。选择 –

+0

您是否在正确的工作簿中。这可能会造成麻烦。你需要激活新的工作簿吗?我倾向于使用ThisWorbook.sheets(etc。 – micstr

+0

它显示错误,当我使用ThisWorkbook.sheets(表(i))。选择 –

0

的问题是,

Worksheets("sheets(i)").Select 

正在寻找一个叫 “张(I)” 工作表作为文本/名称。
如果改用

Worksheets(sheets(i)).Select 

则寻找一个名为像变量/数组的值workhseet sheets(i)

+0

谢谢对于VBA指南!:D – KoderM16

+0

@Peh非常感谢您提供的指导性建议,我将按照我的代码演示进行工作,正如您告诉我使用此工作表(工作表(i))选择 但仍显示错误 –

+0

@ NILESHSUTHAR如果你不告诉**你得到哪个**错误(错误信息),没有人可以提供帮助。当然,数组'sheets'应该由'sheets = Array(“a335”,“a336”,“a337”,“a338”,“a339”,“a351”,“a392”,“a393” )',当然你需要确保这些表名存在你当前选择的工作簿中(或者选择正确的工作表)。但我真的建议首先使用指南来改善你的代码,这将减少你可以遇到的许多问题。如果底座是错误代码,则很难纠正细节。 –

0

你的问题是,你没有设置你的“床单”值作为文本。

sheets = Array(a335, a336, a337, a338, a339, a351, a392, a393) 

代码应该读

Dim sheets(0 To 7) As Variant 
sheets(0) = "a335" 
sheets(1) = "a336" 
sheets(2) = "a337" 
sheets(3) = "a338" 
sheets(4) = "a339" 
sheets(5) = "a351" 
sheets(6) = "a392" 
sheets(7) = "a393" 

然后参考如下;

Worksheets(sheets(i)).Select 
+0

按照你的建议使用后应该如何引用我的数组元素?我在做这个--- MySheet =“sheets(”&i&“)” 工作表(MySheet).Select但是这也显示一个错误。当我打印MySheet时,它显示工作表(0),但应显示a335。如何解决这个 –

+0

这很奇怪我只是再次测试我自己的代码,现在它不起作用。但是,下面的代码一直用来填充你的数组。 点心片(0至7)变 片(0)= “A335” 片材(1)= “A336” 片(2)= “A337” 片材(3)= “A338” 片(5)=“a351” (6)=“a392” 表(7)=“a393” 然后,请参阅以下内容。 工作表(表(i))。选择 – TomW

+0

是的。它不起作用。 MySheet引用“a335”当我使用MySheet =工作表(i)但它显示工作表(MySheet)中的错误。选择...我应该如何解决这个问题? –

相关问题