Сохранить книгу как общую

#excel #vba #blueprism

Вопрос:

Я использую VB (через Blueprism), чтобы попытаться сохранить книгу как общую книгу. все входные данные — это дескриптор, workbookname и filename. Сообщение об ошибке:

 Page: Save Workbook As
Stage: SaveWorkbookAs
Type: Error
Action: Validate
Description: Compiler error at line 8: 'xlShared' is not declared. It may be inaccessible due to its protection level.
Repairable: No
 

Код:

 newworkbookname = ExecWithTimeout(Timeout, "Save Workbook As",
Function()
Dim wb as Object  = GetWorkbook(handle,workbookname)
Dim excel as Object = wb.Application

excel.DisplayAlerts = False
wb.SaveAs(filename)
wb.AccessMode =xlShared
excel.DisplayAlerts = True

Return wb.Name
End Function)
 

Ответ №1:

Выполнение этого из Blueprism почти наверняка означает, что вы не находитесь в области, в которой вам доступны константы Excel, поэтому вам необходимо передать явное целочисленное значение, которое оно обозначает (в данном случае 2) в соответствии с перечислением XlSaveAsAccessMode

Комментарии:

1. Спасибо, я еще этого не сделал? Не могли бы вы посоветовать, каким должен быть мой код?

2. Нет, вы ссылались на константу (wb.AccessMode = xlShared) — ошибка сообщает вам, что xlShared не задан, потому что он находится за пределами области Excel, где это имеет какое-либо значение, поэтому он считает, что это локальная переменная — вместо этого попробуйте wb.AccessMode = 2 (2 является явнымзначение, которое обозначает xlShared)

3. Приносим извинения за задержку здесь. Это привело к ошибке: Internal: не удалось выполнить этап кода, поскольку исключение, вызванное этапом кода: общедоступный элемент ‘AccessMode’ для типа ‘Workbook’ не найден.

4. Я не очень знаком с Blueprism, но эта ошибка, похоже, указывает либо на само свойство AccessMode, либо на то, что для него установлено значение shared как недоступное — я также не вижу, чтобы AccessMode был указан как явное свойство или метод в документах enum, поэтому, поскольку вы уже выполняете сохранение ранее, этоможет быть, у вас есть более успешная настройка, которая используется там как часть метода сохранения? AccessMode — это параметр метода SaveAs, возможно, в этом и заключается путаница, поскольку его нельзя установить напрямую, а только как часть операции сохранения. wb.SaveAs (fileName:=filename, AccessMode:=2)