Можно ли развернуть приложение VB, созданное в Excel, как отдельное приложение? - PullRequest
0 голосов
/ 16 декабря 2010

Интересно, есть ли у меня способ создать приложение VB в Excel и запустить его без полной версии MS Office? Приложение VB будет загружать лист Excel, который будет импортировать загрузку CSV, затем печатать PDF листа и закрывать.

Если у вас есть какие-либо вопросы, дайте мне знать.

Ответы [ 4 ]

1 голос
/ 16 декабря 2010

Просто небольшой конфликт.В офисе вы кодируете с VBA, который отличается от VB.То, что вам нужно будет сделать, это создать приложение VB, которое использует библиотеки Excel или что-то для выполнения какой-либо значимой работы.

1 голос
/ 16 декабря 2010

Короткий ответ - нет.

Вы могли бы написать внешний скрипт Visual Basic, который вызывает офис и открывает Excel с помощью некоторых библиотек Excel, если память мне правильно работает - вам все равно потребуется офис, установленный на этом компьютере. (К сожалению, в данный момент я не могу найти ссылку для подтверждения)

Лучше всего самостоятельно проанализировать данные CSV и сгенерировать из них PDF.

Здесь есть некоторая информация: http://www.rlmueller.net/ReadCSV.htm о том, как читать данные CSV с использованием VBS (чтобы запустить примеры, вам просто нужно переименовать .txt в .vbs и дважды щелкнуть по нему).

Я оставлю вас, чтобы выяснить, как вы затем сгенерируете PDF.

Однако я не думаю, что это лучшее решение вашей проблемы - полноценное .NET-приложение или, возможно, какой-то Python, скорее всего, вам подойдут.

1 голос
/ 16 декабря 2010

Нет.Не без преобразования в отдельное приложение.

Если вы были знакомы с VB6 (и имели доступ к нему; он больше не продается), вы могли бы создать приложение VB6.который ссылается на компоненты Excel COM (все еще должен быть установлен на каждом целевом ПК).

В противном случае создайте приложение.использование VB.NET и использование Office VSTO 2010 (необходимо указать ссылки на Office PIA)

Как: Предназначение приложений Office для основных сборок взаимодействия

0 голосов
/ 19 октября 2017

Код будет размещаться в нескольких разных местах: объект «ThisWorkbook» и код «UserForm».

«ThisWorkbook» содержит код, который определяет, является ли пользовательская форма единственной открытой вещью (рабочей книгой) Excel, иесли это так, то приложение Excel будет скрыто и сама книга будет скрыта.и если открыты другие рабочие книги, они просто скрывают рабочую книгу.У меня установлено, чтобы скрыть приложение и рабочую книгу в обоих случаях, чтобы новый экземпляр Excel можно было открывать после запуска пользовательской формы, не вытягивая рабочую книгу, связанную с пользовательской формой.Код для этого ниже (входит в объект "ThisWorkbook"):

Private Sub WorkBook_Open()
  Dim wb As Workbook
     Set wb = Workbooks("MyBook.xlsm")
    If Workbooks.Count > 1 Then 

       wb.Windows(1).Visible = False
    Else
       wb.Windows(1).Visible = False
       Application.Visible = False
    End If
   UserForm1.Show vbModeless
   'Put defaults and populations here
End Sub

UserForm1.Show vbModeless позволяет использовать Excel, когда активна пользовательская форма.Пара замечаний по этому разделу:

  • "UserForm1" - это имя моей пользовательской формы, замените его на имя вашего
  • Где я Set wb = Workbooks("") изменяю внутри кавычек наимя рабочей книги, в которой находится пользовательская форма
  • Оператор IfElse может быть удален и перемещен в If, если вам не нужны никакие другие действия при открытии, когда другие рабочие книги не открыты

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

Private Sub See_Excel_Click()

   Dim wb As Workbook
   Set wb = Workbooks("MyBook.xlsm")
   wb.Windows(1).Visible = True
   Application.Visible = True
   wb.Sheets("Sheet1").Activate

   Unload Me

End Sub

В пользовательской форме должен быть способ обработки того, что происходит, когда пользовательская форма закрыта, как в ExcelПриложение и рабочая тетрадь останутся открытыми в фоновом режиме.У меня есть действие закрыть книгу и приложение.Быстрое примечание: если вы установите Cancel = True, тогда красная кнопка x не закроет пользовательскую форму.Код, который я использую для этого:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    If CloseMode = 0 Then
      Cancel = False
      Dim wb As Workbook
      Set wb = Workbooks("MyBook.xlsm")
      wb.Windows(1).Visible = True
      Application.Visible = True
      ThisWorkbook.Saved = True
      ThisWorkbook.Activate

     If Workbooks.Count > 1 Then
          ActiveWorkbook.Close
       Else
          Application.Quit
     End If

    End If

End Sub

Это код, который идет внутри пользовательской формы.И код, необходимый для того, чтобы пользовательская форма в VBA действовала как свое собственное приложение, позволяя Excel работать нормально одновременно с пользовательской формой.

Подводя итог, что происходит:

  1. Когда книга запускается, книга скрывается, а если не открыта другая книга, приложение Excel скрывается.
  2. Пользовательская форма запускается, чтобы разрешить одновременное использование Excel
  3. Когда электронная таблица активируется снова, Excel снова включается, и приложение и скрывает лист
  4. Когда пользовательформа закрыта, рабочая книга закрыта, и если нет других рабочих книг, приложение Excel закрывается
  5. Если вы задаете значения по умолчанию или заполняете ComboBox, поместите их в объектный код «Рабочая книга».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...