#excel #vba #vbscript
#excel #vba #vbscript
Вопрос:
В настоящее время у меня есть файлы .vbs, которые я дважды щелкаю и запускаю, чтобы преобразовать мои файлы Excel в файлы .txt в формате, как показано ниже. Я хотел бы добавить это как фрагмент кода VBA, чтобы я мог создавать файлы прямо из Excel. У меня нет опыта с.VBS итак, это оказалось сложным, и я не добился никакого прогресса.
У кого-нибудь есть предложения или он хотел бы помочь преобразовать это в VBA?
Я ценю любую помощь.
Спасибо,
wscript.echo "Process Journal Entries for upload?"
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("S:AccountingJE60.xlsm")
set myfileFSO=CreateObject("Scripting.FileSystemObject")
set myts=myfileFSO.CreateTextFile("S:AccountingJE60.txt")
set objWorksheet=objWorkbook.Sheets(1)
introw=1
count=0
Do Until objWorksheet.Cells(intRow, 1).Value = ""
count=count 1
introw=introw 1
loop
myts.write "G," amp; objworksheet.cells(6,2).value amp; "," amp; objworksheet.cells(2,2).value amp; "," amp; objworksheet.cells(5,2).value amp; "," amp;objworksheet.cells(7,2).value amp; "," amp;objworksheet.cells(3,2).value amp; "," amp;objworksheet.cells(4,2).value amp; "," amp; objworksheet.cells(8,2).value amp; "," amp; objworksheet.cells(10,2).value amp; "," amp; objworksheet.cells(11,2).value amp; "," amp; objworksheet.cells(12,2).value amp; chr(10)
for i=14 to count
myts.write "D," amp; objworksheet.cells(i,1).value amp; "," amp; objworksheet.cells(9,2).value amp; "," amp; objworksheet.cells(i,2).value amp; "," amp;objworksheet.cells(5,2).value amp; "," amp; objworksheet.cells(i,3).value amp; "," amp; objworksheet.cells(i,4).value amp; "," amp; objworksheet.cells(i,5).value amp;"," amp;objworksheet.cells(i,6).value amp;"," amp;objworksheet.cells(i,7).value amp;"," amp;objworksheet.cells(i,8).value amp;"," amp;objworksheet.cells(8,2).value amp; chr(10)
if objworksheet.cells(i,9).value <> "" then
myts.write "A," amp;objworksheet.cells(i,9).value amp;"," amp;objworksheet.cells(i,10).value amp;"," amp;objworksheet.cells(i,11).value amp;"," amp;objworksheet.cells(i,12).value amp;"," amp;objworksheet.cells(i,13).value amp;"," amp;objworksheet.cells(i,14).value amp;"," amp;objworksheet.cells(i,15).value amp;"," amp;objworksheet.cells(i,16).value amp;"," amp;objworksheet.cells(i,17).value amp;"," amp;objworksheet.cells(i,18).value amp;"," amp;objworksheet.cells(i,19).value amp;"," amp;objworksheet.cells(i,20).value amp;"," amp;objworksheet.cells(i,21).value amp;"," amp;objworksheet.cells(i,22).value amp;"," amp;objworksheet.cells(i,23).value amp;"," amp;objworksheet.cells(i,24).value amp;"," amp;objworksheet.cells(i,25).value amp;"," amp;objworksheet.cells(i,26).value amp;"," amp;objworksheet.cells(i,27).value amp;"," amp;objworksheet.cells(i,28).value amp;"," amp;objworksheet.cells(i,29).value amp; chr(10)
End if
next
myts.close
objExcel.Quit
set objExcel=nothing
' msgbox "Done."
wscript.echo "Done"
Ответ №1:
Он и так довольно близок к VBA. Поместите все это в Sub
/ End Sub
блок внутри модуля VBA и отлаживайте каждую ошибку одну за другой.
Основные изменения, которые вам необходимо внести, это:
1) Set objExcel = Excel.Application
вместо строки, которая у вас есть в данный момент. На самом деле вам это совсем не нужно objExcel
, но его сохранение сведет к минимуму количество изменений кода, которые вам нужно внести.
2) Если у вас уже открыта рабочая книга, тогда напишите Set objWorkbook = Workbooks("JE60.xlsm")
3) Удалите строку objExcel.Quit
, иначе вы продолжите терять свою работу!
4) Замените wsript.echo
на debug.print
.
Комментарии:
1. Это сработало отлично. В итоге я немного изменил его, чтобы сохраненное имя файла было именем книги, а пользователь выбирал каталог для сохранения. Спасибо!
2. @user3566159 Добавляйте
Dim
свои переменные соответствующим образом для повышения эффективности и предотвращения ошибок. Также предложите вариант array вместо цикла range — это значительно повысит скорость.