select工作表类失败的方法

我在Excel 2010中有这个子,它应该通过表单中的所有单元格进行过滤,直到find与Proj No的匹配,然后将此行中的一个字段粘贴到另一个字段中。

当我尝试运行子,它给了我一个错误1004:select工作表类失败的方法。 我已经标记了发生这种情况的路线。 任何援助将不胜感激。

Option Explicit Private Sub btnNext_Click() Dim ProjNo As String Dim Col As String Dim Row As String Dim cell As Range Unload Dialog formWait.Show Sheets("Sheet7").Activate ProjNo = Worksheets("Sheet1").Range("D6").Value Col = Cells(Rows.Count, "A").End(xlUp).Row For Each cell In Range("A2:A" & Col) If cell.Value = ProjNo Then Row = Row & cell.Row End If Next cell Workbooks("Form.xlsm").Sheets("Sheet7").Range("Row, 6").Copy Destination:=Sheets("Sheet1").Range("19, 5") 'Error Unload formWait End Sub 

我不知道GWP是什么,但我想你想在那里使用ProjNo 。 Range属性不接受这样的参数。 除非你有一个“Row,6”的命名范围,你不需要这个范围,因为它不是一个合法的名字,所以你必须为Range提供一个有效的范围引用,比如A6或者D2:D12。

另外,不能连接行并在Range引用中使用它们来获得更大的范围。 您将不得不复制循环内的每一行,并按照要求合并范围,或者更好地过滤所需值并复制可见行。

尝试这个:

 Private Sub btnNext_Click() With ThisWorkbook.Worksheets("Sheet7") 'filter for the project id .Range("A1", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 6).AutoFilter 1, "=" & .Range("D6").Value 'copy the visible rows .Range("F2", .Cells(.Rows.Count, 6).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy _ ThisWorkbook.Worksheets("Sheet1").Cells(19, 5) 'get rid of the filter .AutoFilterMode = False End With End Sub 

上面的代码中有一些令人困惑的东西,所以我想在这里放置它们。 让我们开始吧:

 Dim Col As String Dim Row As String 

看起来你的devise看起来像是Longtypes而不是Stringtypes。 即使这些variables是string,我也会build议调整它们的名字 – 当你的开发者试图检查你的devise时,他或她可能会看到像“Col”或“Row”这样的名字,并且认为“这些是数字”。 轻松修复:

 Dim Col As Long, Row As Long 

下一个问题出现在这里:

 Col = Cells(Rows.Count, "A").End(xlUp).Row 

上面的结构是识别最后一个ROW而不是列的常用方法。 (它也似乎是你已经切换了“A”和数字,这是另一个简单的修复)。 尽pipe从句法上来说,最后一行“Col”的variables名称是完全可以接受的,但是用户很可能会发现这个混淆 。 确定最后一行(以及在For Each循环中使用的最后一个列),如此处详细解释的那样,将会得到如下更好的处理:

 Dim SheetSeven As Worksheet, SheetOne As Worksheet Dim LastRow As Long, LastCol As Long Set SheetSeven = ThisWorkbook.Worksheets("Sheet7") Set SheetOne = ThisWorkbook.Worksheets("Sheet1") With SheetSeven LastRow = .Range("A" & .Rows.Count).End(xlUp).Row LastCol = .Range("A" & .Columns.Count).End(xlToLeft).Column End With 

这应该使你的For Each循环看起来像这样:

 With SheetSeven For Each cell in .Range("A2:A" & LastCol) '... do you comparison and row incrementing here Next cell End With 

一旦您将工作表识别为variables, Range.Copy操作也应该更容易:

 With SheetSeven .Range(.Cells(Row, 6)).Copy _ Destination:=SheetOne.Range(SheetOne.Cells(19, 5)) End With