2012-02-22 24 views
7

Po przejściu do lokalizacji pliku wsadowego i jego otworzeniu plik wsadowy działa. Mój plik wsadowy jest prosta:Uruchamianie pliku wsadowego w danym katalogu przy użyciu VBA

cd .\data 
dir/b/o:n > names.txt 

Jak widać, jestem w moim katalogu bieżącym i przesuwając w dół do podkatalogu „dane” i radzenia sobie wszystkie nazwy i utworzenie pliku o nazwie names.txt.

Kiedy mówię

shell "location of file" 

otwiera plik wsadowy, ale katalog, który jest domyślnie jest C:\my documents, więc moje polecenia nie będą działać, ponieważ nie może znaleźć podkatalogu. Chcę, aby był to dynamiczny plik wsadowy, i dlatego muszę napisać coś w VBA, który otworzy plik wsadowy w jego bieżącym katalogu lub coś podobnego do tego.

Jak to zrobić?

+0

Ze względu na czytelność, prosimy o staranne przemyślenie formatowania i pisowni pytań. Naprawiłem to dla ciebie tym razem. Zauważ, że kod może być "sformatowany jako kod" za pomocą przycisku '{}'. –

+0

Przepraszamy, nowy na stronie. – Jason

Odpowiedz

1

C: \ Moje dokumenty to prawdopodobnie katalog, w którym znajduje się Twój arkusz danych. Jeśli dodać

ChDir "C:\TheFolderWhereYourBatchIs" 

przed uruchomieniem Twojego polecenia Shell i że powinno działać ...

Alternatywnie, można zmienić plik wsadowy do korzystania z katalogu bezwzględną zamiast względnym.

+0

http://stackoverflow.com/questions/9442467/calling-batch-file-in-vba-not-working-properly], jest to lepszy opis problemu. dzięki za odpowiedź. – Jason

6

Poniższe czynności powinny dać efekt, którego szukasz.

Mój kod test jest:

Option Explicit 
Sub TryShell() 

    Dim PathCrnt As String 

    PathCrnt = ActiveWorkbook.Path 
    Call Shell(PathCrnt & "\TryShell.bat " & PathCrnt) 

End Sub 

Mój testowy plik wsadowy o nazwie TryShell.bat i zawiera:

cd %1 
dir *.* >TryShell.txt 

umieściłem mój plik wsadowy w tym samym folderze co skoroszytu zawierającego mój makro.

Instrukcja PathCrnt = ActiveWorkbook.Path ustawia PathCrnt na nazwę katalogu zawierającego aktywny skoroszyt. Możesz ustawić PathCrnt na dowolny katalog, który potrzebujesz.

Po wywołaniu Shell jako parametr dodałem PathCrnt.

W moim pliku wsadowym ustawiam bieżący katalog na %1, który jest pierwszym parametrem.

Polecenie działa tak, jak chcę, ponieważ bieżący katalog jest moim katalogiem, a nie domyślnym katalogiem systemowym.

Mam nadzieję, że to jest jasne.

+0

nadal ten sam problem. Myślę, że byłoby łatwiej, gdyby ktoś znał polecenie w DOS, które wywoływałoby bieżącą lokalizację pliku (gdziekolwiek on jest), zapisuje tę lokalizację jako zmienną, a następnie zmienia katalog z nazwą zmiennej {cd nazwa_zmiennej}.to dostałoby poprawną lokalizację, a następnie mógłbym uruchomić mój plik wsadowy. – Jason

+0

Nie rozumiem "wciąż ten sam problem". Jeśli makro zna lokalizację pliku wsadowego, może poprawnie wywołać plik wsadowy i przekazać lokalizację jako parametr. Użyłem "ActiveWorkbook.Path" jako mojego folderu testowego, ponieważ było to dla mnie wygodne, ale można to zmienić na coś innego. Jeśli makro nie zna położenia pliku wsadowego, jak może istnieć polecenie DOS, które je znajdzie. –

+0

Czy coś się zmieniło, co przeoczyłem, czy jeszcze nie, aby dodać wszystkie szczegóły. –

Powiązane problemy