Хотя существует метод поиска по всей книге для значения, обычно на рабочем листе выполняется Range.Find method. Вы устанавливаете var в рабочую книгу, но при этом используете приложение в качестве поиска. Вы должны получить рабочий лист для поиска из рабочей книги и использовать это как цель операции поиска.
Ниже приведены некоторые предлагаемые изменения для вашего PS1.
$filePath = "T:\TMP\findit.xlsx"
$xl = New-Object -ComObject Excel.Application
$xl.Visible = $true
if (test-path $filePath) {
$wb = $xl.Workbooks.Open($filePath)
$ws = $xl.WorkSheets.item("sheet1")
if ([bool]$ws.cells.find("German"))
{
$found = 1
write-host $found
write-host $ws.cells.find("German").address(0, 0, 1, 1)
}
}
Чтобы продолжить поиск всех вхождений не используйте Range.FindNext method пока вы не петлю обратно на исходный адрес ячейки.
$filePath = "T:\TMP\findit.xlsx"
$xl = New-Object -ComObject Excel.Application
$xl.Visible = $true
if (test-path $filePath) {
$wb = $xl.Workbooks.Open($filePath)
$ws = $wb.WorkSheets.item("sheet1")
$rc1 = $ws.cells.find("German")
if ($rc1)
{
$found = 1
$addr = $rc1.address(0, 0, 1, 0)
do
{
$rc1 = $ws.cells.findnext($rc1)
write-host $rc1.address(0, 0, 1, 0)
} until ($addr -eq $rc1.address(0, 0, 1, 0))
}
}
Трудно предоставить гораздо больше, чем общие сведения, поскольку столько вашего кода отсутствует. Я заполнил недостающую информацию своей собственной тестовой средой.
Из вашего кода выше я не уверен, как это скажет мне ссылку на ячейку? – Silentbob
Потребовалось некоторое время, чтобы найти правильные числовые параметры для свойства [Range.Address] (https://msdn.microsoft.com/en-us/library/office/ff837625.aspx). Я привык использовать его в VBA. – Jeeped
Есть ли способ улучшить его, чтобы он каждый раз обнаруживал слово German? – Silentbob