2016-05-03 14 views
5

Ho una macro che cambierà tra i programmi. Ho notato che Excel 2010 e 2016 hanno un nome diverso nel sistema (la mia semantica qui è sbagliata, scusa!) E invece di dover cambiare il codice a seconda di quale Excel, stavo solo pensando di usare una variabile per impostarla .Utilizzare una variabile per il nome di un'applicazione

Sub test() 
'code here in Excel 

Dim myApp 
myApp = Application.Application 
AppActivate "Google Chrome" 
Call AppActivate("Google Chrome") 
' do one or two things 

AppActivate myApp 
'do more things in Excel 
End Sub 

Sfortunatamente, lo AppActivate myApp non funziona. Si getta

Errore di runtime '5': chiamata di routine non valido o argomento

C'è un modo per fare quello che sto cercando? Vedo su this site che avrei potuto fare qualcosa di simile:

Public vPID As Variant 
vPID = Shell("C:\Windows\system32\notepad.exe", vbNormalFocus) 
AppActivate (vPID) 

Salvo, che cosa se Excel non si trova nello stesso percorso del file sui due computer che sta per essere utilizzato su?

Edit: Sembra che ho solo bisogno di impostare la Title della Domanda alla variabile (ancora una volta, da quel sito):

Normalmente, l'istruzione AppActivate viene utilizzato per attivare un'applicazione esistente basata su il suo titolo.

EDIT2: Sempre più vicini, ho trovato ho potuto ottenere il percorso per Excel.Exe da questo, excelPath = Application.Path & "\Excel.exe" ma non riesco a capire come chiamare questo.

+0

Non è chiaro ...... vuoi ** aperto ** un'istanza di Word o ** attiva ** un'istanza che hai già aperto ?? –

+0

@ Gary'sStudent: voglio attivare un'istanza già aperta. – BruceWayne

risposta

5

Per attivare dal titolo della finestra del l'istanza in esecuzione il codice:

AppActivate Application.Caption 

Oppure con ID di processo (probabilmente più robusto):

AppActivate pid 

Dove pid è il risultato di GetCurrentProcessId().

+0

Aha! Usare il '.Caption' ha fatto il trucco. Vedrò anche la parte 'pid'. Saluti! – BruceWayne

2

Ecco un esempio molto semplice di:

  1. apertura Parola
  2. attivandolo

    Sub UsingWord() 
    Dim wrdApp As Word.Application 
    Dim wrdDoc As Word.Document 
    
    Set wrdApp = CreateObject("Word.Application") 
    wrdApp.Visible = True 
    AppActivate wrdApp.Caption 
    End Sub