2015-02-28 3 views
-2

Я использую обширную ссылку Excel-Word, обновленную вручную с помощью кода VBA. Если файл Excel не открыт, Word пытается открыть его, предупреждает, что его открытие снова является проблемой, для чего требуется диалоговое окно, затем перейдите к следующей ссылке и запустите снова. Поскольку, как правило, 100 ссылок, это большая проблема.Проверьте, не открыт ли какой-либо файл Excel

Я нашел простой код VBA, который вызывает функцию, чтобы проверить, работает ли Excel.

Dim sApp As String 
    sApp = "Excel.Application" 
    If IsAppRunning(sApp) = True Then 
     MsgBox "Excel is Running, continue" & SourceFileName 
    Else 
     MsgBox "Excel is NOT Running, abort" 
     Exit Sub 
    End If 

Я хочу проверить, открыт ли файл RIGHT Excel. «Правильный» файл будет иметь то же имя, что и файл Word, например, MyDocSample.doc будет связан с MyDocSample.xls.

Если MyDocSample.xls открыт, тогда продолжайте, если нет, должно быть опубликовано предупреждение о том, что «MyDocSample.xls» не открыто и предлагает выбор «Отмена».

ответ

0

Ответ будет выполнен в подфункции IsAppRunning. Вам нужно идентифицировать .Caption каждого окна в объекте приложения Excel и сравнить его с вашим списком.

Function IsAppRunning(ByVal sAppName) As Boolean 
    Dim w As Long, oApp As Object 
    On Error Resume Next 
    Set oApp = GetObject(, sAppName) 
    If Not oApp Is Nothing Then 
     For w = 1 To oApp.Windows.Count 
      Debug.Print w & oApp.Windows(w).Caption 
     Next w 
     Set oApp = Nothing 
     IsAppRunning = True 
    End If 
End Function 

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

+0

Thanks Jeeped. Это функция, которая работает (кроме ваших добавлений), но это не решает мою проблему. Я не программист, но вот как я думаю, макрос будет выглядеть в словах непрофессионала. -Учитывать имя документа Word (без расширения) -Посмотреть открытый документ Excel с тем же именем (без расширения, поэтому он может быть xls, xlxs, xlsm и т. Д.) -Если Excel документ с тем же именем открыт, продолжите процедуру связи -Если нет, предупредите пользователя и прервите –

+0

@DavidEnglund, лучший способ контролировать поток процессов - это открыть макрос/процедуры для открытия файлов, которые необходимо открыть. .. в противном случае получить дескриптор объекта приложения Excel и зациклиться на коллекции 'Workbooks' ... –

0

Вы можете использовать функцию GetObject, чтобы вернуть книгу, если вы знаете имя файла.

Sub foo() 

Dim s As String 
Dim wb As Object 'Excel.Workbook 

s = replace(ActiveDocument.Name, ".doc", ".xls") 'Modify if needed 

Set wb = GetExcelFile(s) 

If wb Is Nothing Then 
    MsgBox "File is not open!" 
    Exit Sub 
End If 


End Sub 

Function GetExcelFile(filename As String) 
Dim obj As Object 'Excel.Workbook 

On Error Resume Next 
Set obj = GetObject(, "Excel.Application").Workbooks(filename) 
On Error GoTo 0 

Set GetExcelFile = obj 

End Function 
0

Почему бы не перебрать все книги в Excel?

Sub Open_Book() 
    Dim varSheets As Variant 
    Dim booMatch As Boolean 
    Dim strFilePath As String 
    strFilePath = "C:\FullFilePath" 
    booMatch = False 
    For Each varSheets In Application.Workbooks 
     If varSheets.Name = "FileName.xls" Then 
      booMatch = True 
      Exit For 
     End If 
    Next varSheets 
    If booMatch = False Then 
     Workbooks.Open strFilePath 
    End If 
End Sub 
Смежные вопросы