我正在努力理解为什么我会收到一个我不应该出现的错误。 我正在使用Office 2007.我在Excel中有两张表,“Ver”和“Encargado”,在“Ver”表中我有一个单元格可以放一个数字,然后我按下一个按钮。按钮内的代码是:
Private Sub CommandButton1_Click()
Dim buscar As Range
dato = Range("b2").Value
If dato = "" Then Exit Sub
Sheets("Encargado").Select
Set buscar = Range("b2:b12").Find(What:=dato, LookIn:=xlFormulas, SearchOrder:=xlByRows)
If Not buscar Is Nothing Then
buscar.Activate
ActiveCell.Offset(, -1).Copy Destination:=Ver.Cells(4, 2)
Sheets("Ver").Select
Else
Sheets("Ver").Select
MsgBox "Encargado no encontrado"
Exit Sub
End If
End Sub
在“Encargado”表格和b2:b12范围内只有数字beetwen 101和111,当我把数字117作为输入时(例如)我认为它应该进入其他部分,因为它应该没有没有发现任何巧合,但它进入if部分,为什么?我收到一个错误,上面写着“错误激活de la clase Range”(你注意到我正在使用西班牙语的Office,以及使用西班牙语变量进行编程)。当我逐行运行时,错误出现在“buscar.Activate”行中。有谁知道错误在哪里?如果您想看到它,请输入以下文件:https://www.dropbox.com/s/j1b39fqy971n7lf/Todo.xlsm谢谢。
答案 0 :(得分:1)
您尚未在查找功能中定义工作表,因此其引用版本表。使用此代码。
Private Sub CommandButton1_Click()
Dim buscar As Range
'Application.ScreenUpdating = False
dato = Range("b2").Value
If dato = "" Then Exit Sub
Set buscar = Sheets("Encargado").Range("b2:b12").Find(What:=dato, LookIn:=xlValues, SearchOrder:=xlByRows)
If Not buscar Is Nothing Then
'Encargado.Cells.Find(What:=Ver.Cells(2, 2), After:=Range("b2"), LookIn:=xlFormulas, SearchOrder:=xlByRows).Select
'desplazamiento en fila, desplazamiento en columna, positivo: hacia abajo, hacia la derecha
'buscar.Activate
c = buscar.Row
Sheets("Encargado").Range("a" & c).Copy
Sheets("Ver").Range("b4").PasteSpecial
Else
Sheets("Ver").Select
MsgBox "Encargado no encontrado"
Exit Sub
End If
'Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)
编辑:正如下面的评论所指出的,Range
对象 DOES 采用.Activate
方法:http://msdn.microsoft.com/en-us/library/office/ff837085(v=office.15).aspx < / p>
以下内容应该可以帮到您,但是出于好奇 - 你有没有看过Excel的内置buscar
是一个Range
对象,没有Activate
方法。=VLOOKUP
功能?这可能会让你免于在这需要VBA ......
Option Explicit
Private Sub CommandButton1_Click()
Dim TerritorioNum As Long, LastRow As Long
Dim TerritorioRange As Range, FoundRange As Range
Dim VerSheet As Worksheet, EncSheet As Worksheet
'set references up-front
Set VerSheet = ThisWorkbook.Worksheets("Ver")
Set EncSheet = ThisWorkbook.Worksheets("Encargado")
With EncSheet
LastRow = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set TerritorioRange = .Range(.Cells(1, 1), .Cells(LastRow, 2))
End With
TerritorioNum = VerSheet.Cells(2, 2).Value
'find the territory number
Set FoundRange = TerritorioRange.Find(TerritorioNum)
If FoundRange Is Nothing Then
MsgBox ("Encargado no encontrado")
Exit Sub
Else
VerSheet.Cells(4, 2) = EncSheet.Cells(FoundRange.Row, FoundRange.Column - 1).Value
End If
End Sub