[英]Error with find and activate functions in excel with vba
我现在很难理解我为什么会得到我不该出现的错误。 我正在使用Office2007。在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作为输入时(例如),我认为它应该进入else部分,因为它不应该具有发现了任何巧合,但它进入了if部分,为什么呢? 我收到一条错误消息:“错误激活了范围范围错误”(您注意到我在西班牙语中使用Office,并使用西班牙语变量进行编程)。 当我逐行运行时,错误出现在“ buscar.Activate”行中。 有人知道错误在哪里吗? 如果您要查看它,请参见以下文件: https : //www.dropbox.com/s/j1b39fqy971n7lf/Todo.xlsm谢谢。
您尚未在find函数中定义工作表,因此未定义工作表的参考工作表。 使用此代码。
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
编辑:如在下面的注释中指出, Range
对象确实有一个.Activate
方法: http : //msdn.microsoft.com/zh-cn/library/office/ff837085( .Activate
.aspx
以下内容应该带您前往目的地,但出于好奇–您是否研究了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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.