2012-04-19 12 views
23

से वीबीस्क्रिप्ट का उपयोग कर एक्सेल के बाहर से एक्सेल मैक्रो चलाएं मैं एक्सेल फ़ाइल के बाहर से एक्सेल मैक्रो चलाने की कोशिश कर रहा हूं। मैं वर्तमान में कमांड लाइन से चलने वाली ".vbs" फ़ाइल का उपयोग कर रहा हूं, लेकिन यह मुझे बताता है कि मैक्रो नहीं मिल सकता है। यहाँ स्क्रिप्ट मैंकमांड लाइन

Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open("test.xls") 

objExcel.Application.Visible = True 
objExcel.Workbooks.Add 
objExcel.Cells(1, 1).Value = "Test value" 

objExcel.Application.Run "Macro.TestMacro()" 
objExcel.ActiveWorkbook.Close 


objExcel.Application.Quit 
WScript.Echo "Finished." 
WScript.Quit 

उपयोग करने के लिए कोशिश कर रहा हूँ और यहाँ मैक्रो मैं उपयोग करने के लिए कोशिश कर रहा हूँ है:

Sub TestMacro() 
'first set a string which contains the path to the file you want to create. 
'this example creates one and stores it in the root directory 
MyFile = "C:\Users\username\Desktop\" & "TestResult.txt" 
'set and open file for output 
fnum = FreeFile() 
Open MyFile For Output As fnum 
'write project info and then a blank line. Note the comma is required 
Write #fnum, "I wrote this" 
Write #fnum, 
'use Print when you want the string without quotation marks 
Print #fnum, "I printed this" 
Close #fnum 
End Sub 

मैं Is it possible to run a macro in Excel from external command? पर स्थित समाधान तक इस पाने की कोशिश की (और संशोधित बेशक) लेकिन यह काम नहीं लग रहा था। मैं त्रुटि प्राप्त कर रहा हूं 'माइक्रोसॉफ्ट ऑफिस एक्सेल: मैक्रो' मैक्रो। टेस्टमैक्रो 'नहीं मिला।

संपादित करें: एक्सेल 2003.

+1

आप निकालने का प्रयास किया "मैक्रो।" और/या कोष्ठक और बस इसे इस objExcel.Aplication.Run "TestMacro" कहते हैं? – deusxmach1na

+0

objExcel.Aplication.Run "test.xls! Macro.TestMacro" –

+0

वे दोनों काम नहीं करते हैं :( – muttley91

उत्तर

22

ठीक है, यह वास्तव में सरल है। यह मानते हुए कि अपने मैक्रो एक मॉड्यूल में है शीट में से एक में नहीं है, तो आप का उपयोग करें:

objExcel.Application.Run "test.xls!dog" 
    'notice the format of 'workbook name'!macro 

रिक्त स्थान के साथ एक फ़ाइल नाम के लिए, उद्धरण के साथ फ़ाइल नाम डिब्बे में बंद।

यदि आपने मैक्रो को शीट के नीचे रखा है, तो शीट 1 कहें, बस मान लें कि शीट 1 फ़ंक्शन का मालिक है, जो यह करता है।

objExcel.Application.Run "'test 2.xls'!sheet1.dog" 

नोटिस: आपको macro.testfunction नोटेशन का उपयोग करने की आवश्यकता नहीं है।

+0

मुझे नहीं पता था कि इसे मॉड्यूल में होना था, मेरे पास यह कार्यपुस्तिका में था (मैं भी कर सकता था अगर मैंने इसे चादरों में से एक में छोड़ा तो दूसरे भाग की कोशिश की है)। धन्यवाद! – muttley91

20

मुझे लगता है कि आप ऐसा करने की कोशिश कर रहे हैं? (की कोशिश की और परीक्षण किया)

इस कोड को फ़ाइल Test.xls खोलने के लिए और मैक्रो TestMacro जो पाठ फ़ाइल TestResult.txt

Option Explicit 

Dim xlApp, xlBook 

Set xlApp = CreateObject("Excel.Application") 
'~~> Change Path here 
Set xlBook = xlApp.Workbooks.Open("C:\Test.xls", 0, True) 
xlApp.Run "TestMacro" 
xlBook.Close 
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

WScript.Echo "Finished." 
WScript.Quit 
0

को बारी लिखने में होगा आप मैक्रो चलाने का प्रयास कर रहे हैं, तो चलेंगे आपकी व्यक्तिगत कार्यपुस्तिका से यह एक VBScript के साथ एक्सेल फ़ाइल खोलने के रूप में काम नहीं कर सकता है, जो स्वचालित रूप से आपके PERSONAL.XLSB को नहीं खोलता है। आप इस तरह से कुछ करने के लिए की आवश्यकता होगी:

Dim oFSO 
Dim oShell, oExcel, oFile, oSheet 
Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set oShell = CreateObject("WScript.Shell") 
Set oExcel = CreateObject("Excel.Application") 
Set wb2 = oExcel.Workbooks.Open("C:\..\PERSONAL.XLSB") 'Specify foldername here 

oExcel.DisplayAlerts = False 


For Each oFile In oFSO.GetFolder("C:\Location\").Files 
    If LCase(oFSO.GetExtensionName(oFile)) = "xlsx" Then 
     With oExcel.Workbooks.Open(oFile, 0, True, , , , True, , , , False, , False) 



      oExcel.Run wb2.Name & "!modForm" 


      For Each oSheet In .Worksheets 



       oSheet.SaveAs "C:\test\" & oFile.Name & "." & oSheet.Name & ".txt", 6 


      Next 
      .Close False, , False 
     End With 
    End If 



Next 
oExcel.Quit 
oShell.Popup "Conversion complete", 10 

तो पाश की शुरुआत में यह personals.xlsb खोलने और सभी अन्य कार्यपुस्तिका के लिए वहाँ से मैक्रो चल रहा है। बस सोचा कि मुझे यहां पोस्ट करना चाहिए अगर कोई इस तरह से चलता है जैसे मैंने किया लेकिन यह पता नहीं लगा कि मैक्रो अभी भी क्यों नहीं चल रहा है।

4

मैंने अपने open_form मैक्रो को चलाने के लिए @ सिद्धार्ट के कोड को एक सापेक्ष पथ में अनुकूलित करने का प्रयास किया, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा था। मेरा पहला प्रयास यहां था। मेरा कामकाजी समाधान नीचे है।

Option Explicit 

Dim xlApp, xlBook 
dim fso 
dim curDir 
set fso = CreateObject("Scripting.FileSystemObject") 
curDir = fso.GetAbsolutePathName(".") 
set fso = nothing 

Set xlApp = CreateObject("Excel.Application") 
'~~> Change Path here 
Set xlBook = xlApp.Workbooks.Open(curDir & "Excels\CLIENTES.xlsb", 0, true) 
xlApp.Run "open_form" 
xlBook.Close 
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

WScript.Echo "Finished." 

संपादित

मैं वास्तव में इसे बाहर, "एक जैसे" योग्य स्वतंत्र आवेदन काम सिर्फ मामले में किसी को एक userform चलाना चाहता है:

मुद्दे मैं का सामना करना पड़ रहा था:

1 - मैं वर्कबुक_ ओपन इवेंट का उपयोग नहीं करना चाहता था क्योंकि एक्सेल केवल पढ़ने में बंद है। 2 - बैच कमांड सीमित है कि तथ्य (मेरे ज्ञान के लिए) यह मैक्रो को कॉल नहीं कर सकता है।

मैं पहली बार लिखा था मेरी userform शुरू करने के लिए है, जबकि आवेदन छुपा एक मैक्रो:

Sub open_form() 
Application.Visible = False 
frmAddClient.Show vbModeless 
End Sub 

मैं तो इस मैक्रो शुरू करने के लिए एक vbs बनाया (एक रिश्तेदार पथ के साथ यह कर मुश्किल हो गया है):

dim fso 
dim curDir 
dim WinScriptHost 
set fso = CreateObject("Scripting.FileSystemObject") 
curDir = fso.GetAbsolutePathName(".") 
set fso = nothing 

Set xlObj = CreateObject("Excel.application") 
xlObj.Workbooks.Open curDir & "\Excels\CLIENTES.xlsb" 
xlObj.Run "open_form" 

और मैं अंत में VBS निष्पादित करने के लिए एक बैच फ़ाइल किया था ...

@echo off 
pushd %~dp0 
cscript Add_Client.vbs 

ध्यान दें कि मैं भी शामिल किया है में अपने Userform_QueryClose "वापस दिखाई पर सेट करें":

Private Sub cmdClose_Click() 
Unload Me 
End Sub 

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    ThisWorkbook.Close SaveChanges:=True 
    Application.Visible = True 
    Application.Quit 
End Sub 

वैसे भी, आपकी मदद के लिए धन्यवाद, और मुझे आशा है कि यह मदद मिलेगी किसी की जरूरत है अगर यह

+0

यह बहुत अच्छा है कि आपको अंततः एक समाधान मिला, लेकिन आपको पता होना चाहिए कि इस उत्तर का आपका पहला संस्करण उत्तर नहीं था, यह एक सवाल था। भविष्य में, प्रश्नों के रूप में प्रश्न पोस्ट करें, उत्तर के रूप में नहीं। आप [साइट परिचय के माध्यम से फिर से जाना चाहते हैं] (http://stackoverflow.com/tour)। – Charles

0

हाय प्राप्त करने के लिए इस सूत्र का इस्तेमाल किया समाधान, तो मैं इसे साझा करना चाहता हूं जो मैंने किया था अगर कोई इसका इस्तेमाल कर सके।

मैं चाहता था एक मैक्रो है कि कुछ कोशिकाओं को बदलने और कुछ पंक्तियों को मिटा कॉल करने के लिए गया था, लेकिन मैं 1500 से अधिक excels (लगभग प्रत्येक फ़ाइल के लिए 3 minuts खर्च)

मुख्य रूप से समस्या के लिए आवश्यक: -मुझे बुला vbe से मैक्रो, मुझे एक ही समस्या मिली, यह PERSONAL.XLSB से मैक्रो को कॉल करने के लिए असंभव था, जब स्क्रिप्ट ने एक्सेल को निष्पादित किया तो व्यक्तिगत.एक्सएलबी निष्पादित नहीं किया और मैक्रो विंडो

में इसे हल करके हल किया मैक्रो लोडेड (ए.एक्सएलएसएम) (स्क्रिप्ट को निष्पादित करने से पहले) के साथ एक एक्सेल फ़ाइल खोलें

तब मैं एक्सेल से मैक्रो स्क्रिप्ट

Option Explicit 
    Dim xl 
    Dim counter 

    counter =10 



    Do 

    counter = counter + 1 

    Set xl = GetObject(, "Excel.Application") 
    xl.Application.Workbooks.open "C:\pruebas\macroxavi\IA_030-08-026" & counter & ".xlsx" 
    xl.Application.Visible = True 
    xl.Application.run "'a.xlsm'!eraserow" 
    Set xl = Nothing 


    Loop Until counter = 517 

    WScript.Echo "Finished." 
    WScript.Quit 
2

द्वारा oppened फोन मैं ऊपर तरीकों की कोशिश की, लेकिन मैं "मैक्रो नहीं पाया जा सकता है" त्रुटि मिली। यह अंतिम कोड है जो काम करता है!

Option Explicit 

Dim xlApp, xlBook 

Set xlApp = CreateObject("Excel.Application") 
xlApp.Visible = True 

    ' Import Add-Ins 
xlApp.Workbooks.Open "C:\<pathOfXlaFile>\MyMacro.xla" 
xlApp.AddIns("MyMacro").Installed = True 

' 
Open Excel workbook 
Set xlBook = xlApp.Workbooks.Open("<pathOfXlsFile>\MyExcel.xls", 0, True) 

' Run Macro 
xlApp.Run "Sheet1.MyMacro" 

xlBook.Close 
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

WScript.Quit 

मेरे मामले में, MyMacro पत्रक 1 के तहत किया है, इस प्रकार Sheet1.MyMacro होता है।

+0

धन्यवाद! "आयात ऐड-इन्स" अनुभाग कब आवश्यक है? – DAE

1

चूंकि मैंने अपने पूरे प्रश्न को एक धर्मी हाथ से हटा दिया था जब मैंने पूरे दिन "मैक्रो नहीं मिला या अक्षम" त्रुटि को हराया था, यहां पोस्ट करने के लिए एकमात्र सिंटैक्स पोस्ट किया था (application.run didn ' टी, मैं कोई बात नहीं क्या करने की कोशिश की)

Set objExcel = CreateObject("Excel.Application") 

' Didn't run this way from the Modules 
'objExcel.Application.Run "c:\app\Book1.xlsm!Sub1" 
' Didn't run this way either from the Sheet 
'objExcel.Application.Run "c:\app\Book1.xlsm!Sheet1.Sub1" 
' Nor did it run from a named Sheet 
'objExcel.Application.Run "c:\app\Book1.xlsm!Named_Sheet.Sub1" 

' Only ran like this (from the Module1) 

Set objWorkbook = objExcel.Workbooks.Open("c:\app\Book1.xlsm") 
objExcel.Run "Sub1" 

Excel 2010, 7 विन