2017-01-23 487 views
1

我的代码段如下;Excel VBA - 查找函数 - 查找变量

Dim Column1 As String 
Worksheets("Graph").Activate 
Column1 = Cells(1, "P").Value 

Dim Column2 As String 
Worksheets("Graph").Activate 
Column2 = Cells(2, "P").Value 

Cells.Find(What:=Column1).Activate 
StartP3Column = ActiveCell.Column 

Cells.Find(What:=Column2).Activate 
StartP4Column = ActiveCell.Column 
EndP3Column = StartP4Column - 1 

Cells.Find(What:="End Column").Activate 
StartEndColumn = ActiveCell.Column 
EndP4Column = StartEndColumn - 1 

我试图让P1和P2中的值决定宏运行时选择哪些列。因此,在第一个2 Cell.Find(What:=)函数中,我希望“Column1”获取Column1变量(P1中的值)。

当我运行宏,我得到的错误“运行时错误:与块变量未设置91.对象变量”,当我调试,问题是用线Cells.Find(What:=Column1).Activate

任何想法?

+0

可以把这个值被发现的?你需要检查返回如此暗淡的范围,设置r = find(),然后检查返回r,如果它没有发现它什么都不是。然后,如果不是什么r.activate,但只有在这个宏中激活P2的查找。你也不需要激活Graph两次。 –

回答

0

如果你搜索的片Sheet1这些数据,这将运行:

Dim wsG As Worksheet 
Dim wsS As Worksheet 
Dim Rg As Range 
Dim Column1 As String 
Dim Column2 As String 
Set wsG = ThisWorkbook.Sheets("Graph") 
Set wsS = ThisWorkbook.Sheets("Sheet1") 

wsG.Activate 
Column1 = wsG.Cells(1, "P").Value 
Column2 = wsG.Cells(2, "P").Value 

Set Rg = wsS.Cells.Find(What:=Column1) 
If Not Rg Is Nothing Then 
    StartP3Column = Rg.Column 
Else 
    MsgBox Column1 & " not found in " & wsS.Name 
End If 

Set Rg = wsS.Cells.Find(What:=Column2) 
If Not Rg Is Nothing Then 
    StartP4Column = Rg.Column 
    EndP3Column = Rg.Column - 1 
Else 
    MsgBox Column2 & " not found in " & wsS.Name 
End If 

Set Rg = wsS.Cells.Find(What:="End Column") 
If Not Rg Is Nothing Then 
    StartEndColumn = Rg.Column 
    EndP4Column = Rg.Column - 1 
Else 
    MsgBox "End Column" & " not found in " & wsS.Name 
End If 
+0

嗨,我正在搜索的数据在不同的工作表上。我试过编辑你的脚本来查找其他工作簿中的值,但它没有起作用,StartP3Column,StartP4Column等的值都是“空”,除了EndP4Column是30. – Dullspark

+0

@Dullspark:请参阅编辑! ;)您只需将'Sheet1'更改为您正在搜索的工作表的名称! ;) – R3uK

+0

我已经做到了,值仍然是空的:( – Dullspark