Jalankan excel macro (vba) dari file vbscript

0

Saya memiliki file vbs yang menarik informasi dari database saya dan mengekspor data ke file Excel (C: \ file.csv). Setelah ini selesai, saya menjalankan serangkaian macro (vba) untuk memformat data ini. Makro ini selalu sama, saya biasanya menyalin / menempelkannya dari file teks ke dalam spreadsheet dan kemudian menjalankannya secara manual.

Apakah ada cara saya bisa memasukkan vba makro ke file vbs jadi, setelah data diekspor ke spreadsheet, makro dijalankan? Solusi serupa menunjukkan cara memanggil makro yang telah ditentukan sebelumnya dalam file Excel, di mana saya ingin konten makro disimpan / dieksekusi di / dari file vbs saya. Ini akan sangat membantu karena vbs membuat file baru, kemudian akan menjalankan pemformatan makro.

Pikiranku adalah aku harus menggunakannya Set objWorkbook = objExcel.Workbooks.Open("C:\file.csv")

akar
sumber
Bisakah Anda mengambil informasi dari web dan menempatkannya langsung di salinan template .xlsm yang berisi makro? Ini akan menghindari pembuatan .csv dan menghindari membuat salinan duplikat.
Raystafarian
Saya tidak yakin saya mengikuti. Ambil informasi dari web?
root
Saya maksudkan DB Anda, maaf
Raystafarian
Ini kedengarannya mirip dengan apa yang telah kami sebutkan di komentar lain - gunakan spreadsheet lain sebagai pemegang untuk makro, kemudian jalankan di lembar dengan data. Saya baik-baik saja dengan melakukan ini, meskipun masih belum jelas caranya.
root

Jawaban:

1

Anda berada di jalur yang benar. Yang Anda butuhkan pertama-tama adalah mengatur variabel baru untuk Excel. Aplikasi menggunakan pengikatan akhir. Itu di bawah objek di mana semua barang VBA excel biasa bersembunyi. Di bawah ini adalah contoh skrip vbs yang akan membuka buku kerja baru, tambahkan lembar baru, beri nama "TEST", dan tambahkan beberapa konten ke dalam sel A1lembar baru itu. Setelah selesai, vbs akan menggema "Selesai"

Sub createWB()

  'Set the excel application variable
  set xlApp = CreateObject("Excel.Application")

  'Make it visible, or hide it in the background
  xlApp.Application.Visible = true

  'Open a new workbook, for instance
  set xlWB = xlApp.Workbooks.Add()
  xlWB.Activate

  'Add a sheet, name it test, bring it front and center
  set xlSheet = xlWB.Worksheets.Add()
  xlSheet.Name = "TEST"
  xlSheet.Activate

  'Put something in cell A1
  xlSheet.Cells(1,1).value = "TEST CELL CONTENT"

End Sub

'Call the subroutine above
call createWB

WScript.Echo "Finished."
WScript.Quit

Anda mungkin harus sedikit berkutat dengan kode VBA yang ada untuk membuat vbs bahagia, tetapi Anda akan menemukan bahwa menulis makro Anda di vbs, sama fungsinya dengan menulisnya di vba.

JNevill
sumber
0

Beberapa waktu lalu saya mencoba ini untuk beberapa jawaban SU lainnya . Satu-satunya cara yang saya temukan adalah menggunakan PowerShell alih-alih VBScript. PowerShell dapat menjalankan setiap perintah VBA. Hanya sintaks yang bisa berbeda.

Contoh VBA Anda sebagai skrip PowerShell

$excel = New-Object -ComObject excel.application 
$workbook = $excel.Workbooks.Open("C:\file.csv")
$excel.visible = $true
nixda
sumber
Saya tidak keberatan menggunakan PowerShell dalam kasus khusus ini, karena tujuannya adalah untuk memiliki data yang diformat secara otomatis, meskipun saya tidak yakin saya sepenuhnya memahami apa yang dilakukan dan bagaimana cara kerjanya. Bagaimana saya bisa menyesuaikan ini untuk menangani Macro panjang?
root
@root Anda tidak dapat 1: 1 mengonversi setiap perintah VBA ke PowerShell. Bisakah kita melihat seluruh makro VBA?
nixda
Maka pemikiran saya berikutnya adalah membuat spreadsheet (C: \ macro.xls) yang berisi makro, minta vb menarik data dan simpan ke C: \ file.csv, lalu minta PowerShell membuka kedua lembar kerja dan menjalankan makro. makro xls 'pada Sheet1 dari file.csv
root
@ akar Namun dalam komentar di atas Anda menyatakan bahwa Anda ingin menghindari templatefile. Bukankah itu mirip dengan macro.xls ?
nixda
Tidak jika, seperti yang Anda sebutkan, sintaks mungkin berbeda. Seri makro ini panjangnya ratusan baris.
root
-1

Saya akan menempatkan makro ke templat excel. Saya kemudian akan membuat makro autonew di templat untuk mengimpor file csv dan menjalankan makro format.

Kemudian saya akan mendapatkan vbs untuk membuat dan menyimpan file csv dan membuka file excel berdasarkan templat.

David Grugeon
sumber
Kedengarannya sangat mirip dengan apa yang saya lakukan sekarang, dan tidak menjawab pertanyaan. Saya mengerti pendekatannya, tapi saya membayangkan ada cara untuk memasukkan vba ke vbs untuk menghindari membutuhkan template atau file kedua sama sekali.
root