#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)