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看起来像是Long
types而不是String
types。 即使这些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