2017-01-23 8 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

Можно найти значение? Вам нужно проверить возвращение так dim r как диапазон, установить r = find(), а затем проверить return, 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