Есть несколько проблем с вашим кодом. Помимо проблемы Cell и Cell s , существует прямое сравнение одной ячейки с несколькими ячейками в диапазоне, а также счетчик неиспользованных смещений.
A С помощью ... End With блок может уменьшить код и повторяющиеся обращения к справочному листу.
Option Explicit
Sub searchdata()
Dim lastrow As Long, x As Long, count As Long
WITH Sheets("Resolution")
lastrow = .Cells(.Rows.count, 1).End(xlUp).Row
count = 0
For x = 2 To lastrow
'the next line will continue if the value in Resolution
'is found within Sheet2.Range("$C2:$c92")
If NOT ISERROR(APPLICATION.MATCH(.Cells(x, 1), Sheet2.Range("$C2:$c92"), 0)) Then
Sheet2.Range("F25").OFFSET(count, 0) = .CellS(x, 1)
Sheet2.Range("G25").OFFSET(count, 0) = .CellS(x, 2)
Sheet2.Range("H25").OFFSET(count, 0) = .CellS(x, 3)
count = count + 1
End If
Next x
END WITH
end sub
Нет, Вы не можете обновить среду в обработке вызовов этот путь. В целом подпроцесс не может изменить среду родительского процесса. Одно существенное исключение является пакетными файлами в Windows, когда выполнено от оболочки cmd. На основе примера Вы показываете, я предполагаю, что Вы не работаете на Windows все же.
Обычно, то, что Вы пытаетесь выполнить, сделано со сценарием оболочки, который настраивает среду и затем вызывает Ваш намеченный процесс. Например, Вы могли бы записать go.sh сценарий как это:
!#/bin/sh
AXIS2_HOME=/usr/local/axix2-1.4.1
JAVA_HOME=/usr/java/latest
CLASSPATH=foo foo
export AXIS2_HOME
export JAVA_HOME
export CLASSPATH
java MainClass
Сделайте go.sh исполняемый файл, и теперь можно запустить приложение как ./go.sh
. Можно сделать сценарий более тщательно продуманным также, если Вам нравится - например, можно хотеть сделать "MainClass" параметром к сценарию, а не трудно кодированию его.
От Вашего вопроса я предполагаю, что Вы используете оболочку удара.
Можно поместить определения переменной в сценарий оболочки, как так:
AXIS2_HOME=/usr/local/axis2-1.4.1
export AXIS2_HOME
#etc
И затем source
сценарий в текущую среду, с
source <filename>
или просто
. <filename>
Это выполняет сценарий в текущей оболочке (т.е. никакой дочерний процесс), таким образом, любые изменения среды, сценарий составляет завещание, сохраняются.
Быстрый ответ да, однако в Вашем коде, необходимо было бы определить переменные в setenv: директива. Выполнение его в начале Make-файла делает его локальной переменной к Make-файлу. Я использовал бы LOCAL_... наверху файла, затем устанавливает его в setenv: директива с VAR=LOCAL_VAR и т.д... Также помните, что необходимо будет звонить, make-файл с делают setenv только. Я действительно изучил бы выполнение этого в сценарии удара, поскольку переменная должна быть создана за пределами Make-файла. После того как переменная была сгенерирована в среде, необходимо смочь присвоить и экспортировать из Make-файла.