Make-файл может обновить среду вызова?

Есть несколько проблем с вашим кодом. Помимо проблемы 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
5
задан brofield 24 March 2009 в 03:17
поделиться

3 ответа

Нет, Вы не можете обновить среду в обработке вызовов этот путь. В целом подпроцесс не может изменить среду родительского процесса. Одно существенное исключение является пакетными файлами в 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" параметром к сценарию, а не трудно кодированию его.

5
ответ дан 15 December 2019 в 01:11
поделиться

От Вашего вопроса я предполагаю, что Вы используете оболочку удара.

Можно поместить определения переменной в сценарий оболочки, как так:

AXIS2_HOME=/usr/local/axis2-1.4.1
export AXIS2_HOME
#etc

И затем source сценарий в текущую среду, с

source <filename>

или просто

. <filename>

Это выполняет сценарий в текущей оболочке (т.е. никакой дочерний процесс), таким образом, любые изменения среды, сценарий составляет завещание, сохраняются.

4
ответ дан 15 December 2019 в 01:11
поделиться

Быстрый ответ да, однако в Вашем коде, необходимо было бы определить переменные в setenv: директива. Выполнение его в начале Make-файла делает его локальной переменной к Make-файлу. Я использовал бы LOCAL_... наверху файла, затем устанавливает его в setenv: директива с VAR=LOCAL_VAR и т.д... Также помните, что необходимо будет звонить, make-файл с делают setenv только. Я действительно изучил бы выполнение этого в сценарии удара, поскольку переменная должна быть создана за пределами Make-файла. После того как переменная была сгенерирована в среде, необходимо смочь присвоить и экспортировать из Make-файла.

-5
ответ дан 15 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: