Преобразование скрипта VBS в Excel VBA

#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 — это значительно повысит скорость.