Есть ли способ заставить VBA Excel найти слово / строку слов в файле и вернуть значение в ячейку рядом с ним? - PullRequest
0 голосов
/ 18 января 2019

У меня есть макрос, который просматривает ячейки и вставляет их в другой лист, однако значение столбца и строки не всегда остается таким же, как иногда добавляются строки / столбцы, поэтому я не могу просто посмотреть конкретную ячейкукак это может двигаться.Я хотел бы иметь возможность искать ячейку слева, которая является уникальной для файла «Общая стоимость за смену», и возвращать стоимость в столбце справа.Таким образом, независимо от того, в какой строке или столбце находится число, вернется правильная информация.

Вот что у меня есть:

Option Explicit

Sub CostingInfo()
Dim wb As Workbook, sht As Worksheet, pth As String

    Set sht = ActiveSheet
    pth = "='[" & sht.Parent.Name & "]" & sht.Name & "'!"
    Set wb = Workbooks.Open("\\FS3\Users$\UsersName\Desktop\Costing Template Test.xlsx")
    With wb.Sheets("Open Quote")
        .Range("B3:C3").FormulaR1C1 = pth & "R6C2" ' .Range("L3"). ????
        Set cell = Range("A1:BA350").Find("Total Cost per Shift")
        Range(ActiveCell, ActiveCell.Offset(0, 1)).Copy
    End With
End Sub

1 Ответ

0 голосов
/ 22 января 2019
  1. Не существует Range.Set свойства / метода. Это неверно, поэтому я не включил его, когда попытался исправить ваш вопрос, включив в него код из ваших комментариев.
  2. Синтаксис .Range является просто продолжением оператора With wb.Sheets("Open Quote"); так что .Range на самом деле означает wb.Sheets("Open Quote").Range.
  3. Когда вы звоните Range (без .), вы используете неявную ссылку на активный лист; Поскольку вы только что открыли файл, который вы называете wb, активный лист в нем теперь активен, а не лист / книга, которая была активна при запуске подпрограммы.

    См. Ссылку: избегая неявного кода

  4. Итак, что за книга / лист Range(L3) должны быть включены?

  5. Вы никогда не тестируете, чтобы увидеть if cell is nothing then или фактически используете cell в любом месте кода после этого.


Всякий раз, когда вы сталкиваетесь с проблемами, вы должны установить точку останова (F9) перед проблемой и использовать F8 для перехода по одной строке за раз.

Вы можете навести курсор мыши на переменные, добавить Watch и / или использовать Debug.Print для отображения значений в непосредственном окне (Ctrl + G).

Попробуйте

Debug.Print .Range("L3").Parent & ".Range(" & .Range("L3").Address & ")"
Debug.Print Range("A1:BA350").Parent & ".Range(" & Range("A1:BA350").Address & ")"
Debug.Print cell.Parent & ".Range(" & cell.Address & ")"

Пожалуйста, измените вопрос, включив в него код, который вы используете в данный момент.

(лучше включить Option Explicit)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...