Выходной текст Создание / сохранение файла VBA. Excel vba создание файла excel


Создание файла Excel из файла Word в VBA MS Excel онлайн

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

В настоящее время мой код выглядит следующим образом:

Sub WordToExcel() Dim ObjExcel As Object, ObjWorkBook As Object, ObjWorksheet As Object Set ObjExcel = CreateObject("EXCEL.APPLICATION") Set ObjWorkBook = ObjExcel.Workbooks.Open("C:\Users\john\Desktop\test.xlsx") Set ObjWorksheet = ObjWorkBook.Worksheets("Sheet1") With Selection.Find .ClearFormatting .Text = "Description" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue End With Selection.Find.Execute Selection.MoveDown Unit:=wdParagraph, Count:=1 Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend Do Until Left(Selection.Text, Len(Selection.Text) - 1) = "Tasks and Timeframe" Ctr = Ctr + 1 Selection.MoveDown Unit:=wdParagraph, Count:=1 Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend Loop Selection.Copy ActiveSheet.Paste ActiveWorkbook.Save ObjWorkBook.Save ObjWorkBook.Close Set ObjWorksheet = Nothing Set ObjWorkBook = Nothing ObjExcel.Quit Set ObjExcel = Nothing End Sub

и документ слова, который содержит макрос, по существу справедлив:

Описание

Вот общее описание этого документа. Это нужно скопировать и вставить в новый файл excel.

Задачи и временные рамки

Вот задачи / необходимые таймфреймы. Это также следует скопировать и вставить в файл Excel.

Solutions Collecting From Web of "Создание файла Excel из файла Word в VBA"

Решение: Это работает для меня:

(1) Удалите петлю Do Until …….. Loop . Код до этого уже выбирает абзац, который вы хотите скопировать.

(2) Изменение

ActiveSheet.Paste ActiveWorkbook.Save

в

ObjWorksheet.Paste ObjWorkBook.Save

В противном случае макрос Word не знает, на какой лист Excel вы ссылаетесь.

Результат: Это выглядит файл Excel после запуска макроса.

Примечание. Я предполагаю, что в будущем вам нужно будет помещать предложения из файла Word в определенные ячейки в Excel, а не в A1 как ваш код делает сейчас. Для этого добавьте ObjWorksheet.Range("B2").Select (установив ячейку в желаемую целевую ячейку) перед ObjWorksheet.Paste .

excel.bilee.com

VBA - создание файла Excel из Access (QueryTable)

У меня есть проект, который в основном состоит в том, чтобы генерировать Excel (Report), начиная с нажатия кнопки в Access, используя VBA.

Содержимое этого отчета является результатом хранимой процедуры SQL Server Database.

строка ошибки:

With MeuExcel.Worksheets(4) .QueryTables.Add connection:=rs, Destination:=.Range("A2") End With

Я получаю:

invalid procedure call or argument (erro '5')

Полный код (отредактирован с помощью рекомендаций пользователя Remou):

Sub GeraPlanilhaDT() Dim MeuExcel As New Excel.Application Dim wb As New Excel.Workbook Set MeuExcel = CreateObject("Excel.Application") MeuExcel.Workbooks.Add MeuExcel.Visible = True Dim strNomeServidor, strBaseDados, strProvider, strConeccao, strStoredProcedure As String strNomeServidor = "m98\DES;" strBaseDados = "SGLD_POC;" strProvider = "SQLOLEDB.1;" strStoredProcedure = "SP_ParametrosLeads_DT" strConeccao = "Provider=" & strProvider & "Integrated Security=SSPI;Persist Security Info=True;Data Source=" & strNomeServidor & "Initial Catalog=" & strBaseDados Dim cnt As New ADODB.connection Dim cmd As New ADODB.command Dim rs As New ADODB.recordset Dim prm As New ADODB.parameter cnt.Open strConeccao cmd.ActiveConnection = cnt cmd.CommandType = adCmdStoredProc cmd.CommandText = strStoredProcedure cmd.CommandTimeout = 0 Set prm = cmd.CreateParameter("DT", adInteger, adParamInput) cmd.Parameters.Append prm cmd.Parameters("DT").Value = InputBox("Digite o Código DT", "Código do Distribuidor") Set rs = cmd.Execute() Dim nomeWorksheetPrincipal As String nomeWorksheetPrincipal = "Principal" Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = nomeWorksheetPrincipal With MeuExcel.Worksheets(4) .QueryTables.Add connection:=rs, Destination:=.Range("A2") End With cnt.Close Set rs = Nothing Set cmd = Nothing Set strNomeServidor = Nothing Set strBaseDados = Nothing Set strProvider = Nothing If (ActiveSheet.UsedRange.Rows.Count > 1) Then FormataDadosTabela Else MsgBox ("Não foi encontrado nenhum Distribuidor com esse DT") End If End Sub

Странно, что код работает при запуске в Excel, но не работает в Access

В Access вам необходимо префикс объектов приложения Excel с помощью экземпляра приложения Excel, например:

With MeuExcel.Worksheets(4).QueryTables.Add( _ connection:=recordset, _ Destination:=Range("A2")) End With

Кроме того, если у вас нет ссылки на библиотеку Excel, ypu необходимо будет предоставить значение для встроенных констант Excel.

Это очень плохая идея использовать имя объектов для переменных. И не говори:

Dim recordset As recordset Set recordset = New recordset

Скажем, например:

Dim rs As recordset

Или намного лучше:

Dim rs As New ADODB.Recordset

Если у вас есть подходящая ссылка. Затем вы можете пропустить CreateObject.

РЕДАКТИРОВАТЬ  

Поставщиком должен быть поставщик доступа OLEDB 10, используемый для привязки наборов записей. Это работает для меня, чтобы создать таблицу данных через Access с помощью SQL Server:

strConnect = "Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=True;" _ & "Data Source=XYZ\SQLEXPRESS;Integrated Security=SSPI;" _ & "Initial Catalog=TestDB;Data Provider=SQLOLEDB.1"

FWIW, выделяются две вещи:

  1. Как отметил @Remou, ссылки Excel должны быть квалифицированы. В данный момент, Range("A2") является неквалифицированным. При запуске кода в Excel ActiveSheet предполагается. Однако при запуске из другого приложения это приложение будет искать способ или свойство в своей собственной библиотеке, называемой Range, что даст вам эту ошибку в Microsoft Access.

  2. В коде нет кода. With , поэтому вы можете удалить With а также End With ключевые слова; когда вы это сделаете, также удалите внешний (), например:

wb.Worksheets(4).QueryTables.Add Connection:=rs, Destination:=wb.Worksheets(4).Range("A2")

Кроме того, With блокировать Worksheet уровень:

With wb.Worksheets(4) .QueryTables.Add Connection:=rs, Destination:=.Range("A2") End With

Обновить доступ к образцу Excel

Этот примерный код автоматизирует Excel из Access, создает новую книгу и добавляет Querytable к первому листу. Исходными данными являются таблица Access. Это выполняется в Office 2007.

Public Sub ExportToExcel() Dim appXL As Excel.Application Dim wbk As Excel.Workbook Dim wst As Excel.Worksheet Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set appXL = CreateObject("Excel.Application") appXL.Visible = True Set wbk = appXL.Workbooks.Add Set wst = wbk.Worksheets(1) Set cn = CurrentProject.AccessConnection Set rs = New ADODB.Recordset With rs Set .ActiveConnection = cn .Source = "SELECT * FROM tblTemp" .Open End With With wst .QueryTables.Add Connection:=rs, Destination:=.Range("A1") .QueryTables(1).Refresh End With End Sub

Вы не говорите, какая версия Office, но в Excel 2007/10 QueryTable является свойством Listobject, поэтому ваш код будет выглядеть так:

With MeuExcel.Worksheets.ListObjects.Add(Connection:=rs, Destination:=Range("A2")).QueryTable

programmerz.ru

VBA – создание файла Excel из Access (QueryTable) MS Excel онлайн

В Access вам необходимо префикс объектов приложения Excel с помощью экземпляра приложения Excel, например:

With MeuExcel.Worksheets(4).QueryTables.Add( _ connection:=recordset, _ Destination:=Range("A2")) End With

Кроме того, если у вас нет ссылки на библиотеку Excel, ypu необходимо будет предоставить значение для встроенных констант Excel.

Это очень плохая идея использовать имя объектов для переменных. И не говори:

Dim recordset As recordset Set recordset = New recordset

Скажем, например:

Dim rs As recordset

Или намного лучше:

Dim rs As New ADODB.Recordset

Если у вас есть подходящая ссылка. Затем вы можете пропустить CreateObject.

РЕДАКТИРОВАТЬ

Поставщиком должен быть поставщик доступа OLEDB 10, используемый для привязки наборов записей. Это работает для меня, чтобы создать таблицу данных через Access с помощью SQL Server:

strConnect = "Provider=Microsoft.Access.OLEDB.10.0;Persist Security Info=True;" _ & "Data Source=XYZ\SQLEXPRESS;Integrated Security=SSPI;" _ & "Initial Catalog=TestDB;Data Provider=SQLOLEDB.1"

FWIW, выделяются две вещи:

  1. Как отметил @Remou, ссылки Excel должны быть квалифицированы. В настоящее время Range("A2") является неквалифицированным. При запуске кода в Excel предполагается использовать ActiveSheet . Однако при запуске из другого приложения это приложение будет искать метод или свойство в своей собственной библиотеке под названием Range , что даст вам эту ошибку в Microsoft Access.

  2. В блоке With нет кода, поэтому вы можете удалить ключевые слова With и End With ; когда вы это сделаете, также удалите внешний (), например:

wb.Worksheets(4).QueryTables.Add Connection:=rs, Destination:=wb.Worksheets(4).Range("A2")

Кроме того, смените блок « With на уровень « Worksheet :

With wb.Worksheets(4) .QueryTables.Add Connection:=rs, Destination:=.Range("A2") End With

Обновить доступ к образцу Excel

Этот примерный код автоматизирует Excel из Access, создает новую книгу и добавляет Querytable к первому листу. Исходными данными являются таблица Access. Это выполняется в Office 2007.

Public Sub ExportToExcel() Dim appXL As Excel.Application Dim wbk As Excel.Workbook Dim wst As Excel.Worksheet Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set appXL = CreateObject("Excel.Application") appXL.Visible = True Set wbk = appXL.Workbooks.Add Set wst = wbk.Worksheets(1) Set cn = CurrentProject.AccessConnection Set rs = New ADODB.Recordset With rs Set .ActiveConnection = cn .Source = "SELECT * FROM tblTemp" .Open End With With wst .QueryTables.Add Connection:=rs, Destination:=.Range("A1") .QueryTables(1).Refresh End With End Sub

Вы не говорите, какая версия Office, но в Excel 2007/10 QueryTable является свойством Listobject, поэтому ваш код будет выглядеть так:

With MeuExcel.Worksheets.ListObjects.Add(Connection:=rs, Destination:=Range("A2")).QueryTable

excel.bilee.com

Выходной текст Создание / сохранение файла VBA MS Excel онлайн

Краткое описание проблемы: создание текстового файла для команд FTP не завершается к моменту, когда необходимо вызвать командный файл. Это не будет ловушка с «если файл существует». Как убедиться, что файл создан до продолжения работы с кодом?

Подробности: Я работаю над частью кода в своей книге Excel для FTP-файлов. Для этого я создаю файл FTPcmd.txt с помощью кода, содержащего команды FTP, закрывая файл, а затем обманывая команду FTP в окне CMD. Похоже, командный файл занимает слишком много времени, чтобы завершить запись, и поэтому я получаю ошибку «Разрешения на отказ». В протоколе FTP говорится: «Ошибка открытия файла сценария C: \ temp \ FTPcmd.txt». Я проверяю ошибку, чтобы увидеть, существует ли файл, но я думаю, что файл появляется как существующий после открытого оператора, а не закрывается. Я не нахожу выражение else в DIR <> "" Функция IsFileOpen была найдена на "http://www.vbaexpress.com/kb/getarticle.php?kb_id=468 VBA Express: Excel – проверка, если файл Уже открыт "

Я не думаю, что это проблема ShellWait. Мне нужен файл для записи, прежде чем я вызову Shell.

Если я нахожу его вручную, он работает, когда я вижу, что файл появляется в каталоге.

Я также передаю вывод FTP в файл и читаю его обратно для обмена сообщениями об успехах / сбоях аналогичным образом, и у меня возникает такая же проблема.

У кого-нибудь есть идеи? Заранее спасибо!

Open temppath & "FTPcmd.txt" For Output As #2 Print #2, "user " & FSOUserName Print #2, FSOpw Print #2, "lcd " & temppath Print #2, "cd public_html" Print #2, "binary" Print #2, "mput " & Chr(34) & "index.htm" & Chr(34) Print #2, "cd .." Print #2, "cd public_ftp" Print #2, "mput " & Chr(34) & myfilename & Chr(34) Print #2, "bye" Close #2 Start = Timer FTPlooper: If Timer - Start > 30 Then saveme = 1: Text = Text & " FTP Failure": GoTo failpoint If Dir(temppath & "FTPcmd.txt") <> "" And IsFileOpen(temppath & "FTPcmd.txt") = False Then Shell "cmd /c ftp -n -i -g -s:" & temppath & "FtpCmd.txt " & FSOHostURL & ">" & temppath & "ftpout.txt 2>&1" Else GoTo FTPlooper End If

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

Код:

Function IsFileOpen(FileName As String)'http://www.vbaexpress.com/kb/getarticle.php?kb_id=468 Dim iFilenum As Long Dim iErr As Long On Error Resume Next iFilenum = FreeFile() Open FileName For Input Lock Read As #iFilenum Close iFilenum iErr = Err On Error GoTo 0 Select Case iErr Case 0: IsFileOpen = False Case 70: IsFileOpen = True Case Else: Error iErr End Select End Function

Вывод файла FTPout.txt:

Ошибка открытия файла сценария C: \ Users \ Theresa \ Downloads \ FTPcmd.txt.

Перенос файлов на компьютер и с сервера FTP-сервера (иногда называемый демоном). Ftp можно использовать в интерактивном режиме.

FTP [-v] [-d] [-i] [-n] [-g] [-s: filename] [-a] [-A] [-x: sendbuffer] [-r: recvbuffer] [-b : asyncbuffers] [-w: windowsize] [host]

-v Запрещает отображение ответов удаленного сервера. -n Подавляет автоматический вход в систему при первоначальном подключении. -i Отключает интерактивное приглашение во время нескольких передач файлов. -d Включает отладку. -g Отключает подменю имени файла (см. команду GLOB). -s: имя_файла Задает текстовый файл, содержащий команды FTP; команды будут автоматически запускаться после запуска FTP. -a Использовать любой локальный интерфейс при привязке данных. -Вход в систему как анонимный. -x: send sockbuf Переопределяет размер SO_SNDBUF по умолчанию 8192. -r: recv sockbuf Переопределяет размер SO_RCVBUF по умолчанию 8192. -b: async count Заменяет значение async по умолчанию 3 -w: windowsize Переопределяет размер буфера передачи по умолчанию 65535 host Указывает имя хоста или IP-адрес удаленного хоста для подключения.

Примечания: – Команды mget и mput принимают y / n / q для да / нет / закрываются. – Используйте Control-C для отмены команд.

Solutions Collecting From Web of "Выходной текст Создание / сохранение файла VBA"

excel.bilee.com

Создание и запись в текстовый файл с использованием макроса excel и VBA MS Excel онлайн

Вы можете объединить данные в массив и затем преобразовать их в текст.

Sub ExcelToTxt() 'Declaring variables Dim i As Long, j As Integer Dim n As Long, k As Long Dim destgroup As String Dim FName As String Dim vDB, vR(1 To 6), vJoin(), vResult() Dim sJoin As String, sResult As String Dim s As Long 'Activate Sheet1 Sheet1.Activate 'Find the last row that contains data With Sheet1 vDB = .Range("a1").CurrentRegion '<~~ get data to array from your data range n = UBound(vDB, 1) 'size of array (row of 2 dimension array) End With 'Create txt file FName = Application.GetSaveAsFilename("", "txt file (*.txt), *.txt") For i = 2 To n '<~~loop destgroup = vDB(i, 2) '<~~ second column If destgroup = "trex_15hz" Or destgroup = "trex_10hz" Or destgroup = "trex_5hz" Then vR(1) = "; ### LABEL DEFINITION ###" '<~~ text 1st line s = Val(Replace(vDB(i, 3), "label", "")) vR(2) = "EQ_LABEL_DEF,02," & Format(s, "000") vR(3) = "UDB_LABEL," & Chr(34) & vDB(i, 4) & Chr(34) '<~~ 2nd line ReDim vJoin(4 To 7) vJoin(4) = Chr(34) & vDB(i, 4) & Chr(34) For j = 5 To 7 vJoin(j) = vDB(i, j) Next j sJoin = Join(vJoin, ",") vR(4) = "STD_SUB_LABE," & sJoin '<~~ 3th line ReDim vJoin(8 To 12) vJoin(8) = Chr(34) & UCase(vDB(i, 8)) & Chr(34) vJoin(9) = Chr(34) & vDB(i, 9) & Chr(34) vJoin(10) = Format(vDB(i, 10), "#.000000000") For j = 11 To 12 vJoin(j) = vDB(i, j) Next j sJoin = Join(vJoin, ",") vR(5) = "STD_SUB_LABE," & sJoin '<~~ 4the line vR(6) = "END_EQ_LABEL_DEF" '<~~ 5th line k = k + 1 ReDim Preserve vResult(1 To k) vResult(k) = Join(vR, vbCrLf) '<~~ 5 line in array vR and get to array vResult with join method End If Next i sResult = "EQUIPMENT_ID_DEF,02,0x1," & Chr(34) & "trex" & Chr(34) '<~~ text file first line sResult = sResult & vbCrLf & Join(vResult, vbCrLf) '<~~ combine 1th and other line ConvertText FName, sResult '<~~ sub presedure End Sub Sub ConvertText(myfile As String, strTxt As String) Dim objStream Set objStream = CreateObject("ADODB.Stream") With objStream '.Charset = "utf-8" .Open .WriteText strTxt .SaveToFile myfile, 2 .Close End With Set objStream = Nothing End Sub

excel.bilee.com