EXCEL VBA-将数据从多个工作簿传输到工作簿模板

时间:2018-08-10 07:43:50

标签: excel vba excel-vba

我正在尝试制作一个excel ui /宏,它允许用户选择多个excel工作簿(wb1,wb2,wb3 ...)并将某些值从其中转移到另一个工作簿(wb_template)。然后,将其中每个保存为新工作簿(wb1_new,wb2_new,wb3_new ...)。

含义:模板工作簿可以反复使用,并且每次都保存为新工作簿-应该以原始工作簿(wb1)+“ _new”)命名:

>     Wb1 + wb_template = wb1_new
>     Wb2 + wb_template = wb2_new
>     Wb3 + wb_template = wb3_new

总结场景:

  • 通过对话框选择多个工作簿
  • 在列表框中显示选择内容
  • 将这些工作簿中的某些值传输到工作簿模板中
  • 从列表框中为每个excel工作簿将工作簿模板另存为新工作簿
  • 结果:几个新的excel工作簿,以列表框中的原始excel工作簿命名

如何实现这样的目标?这是当前用户界面的屏幕截图:https://imgur.com/a/ynnhbm0

我具有用于数据传输的以下代码:

Sub Button1_Click()


Dim wb1 As Workbook
Dim wb_template As Workbook

Set wb1 = Application.Workbooks.Open("C:\Users\PlutoX\Desktop\Folder\wb1")
Set wb_template = Application.Workbooks.Open("C:\Users\PlutoX\Desktop\Folder\wb_template")


wb_template.Sheets("Sheet1").Range("A1").Value = wb1.Sheets("Sheet1").Range("A1").Value
wb_template.Sheets("Sheet1").Range("A2").Value = wb1.Sheets("Sheet1").Range("A2").Value
wb_template.Sheets("Sheet1").Range("A3").Value = wb1.Sheets("Sheet1").Range("A3").Value



wb1.Close False
wb_template.Close True


End Sub

问题:

  • 原始文件(wb1)是静态的。需要一个变量,该变量引用列表框中的选定文件-将选定文件的文件路径添加到代码中

我有以下代码用于对话框窗口/文件选择:

Sub openDialog()
    Dim fd As Office.FileDialog

    Set fd = Application.FileDialog(msoFileDialogFilePicker)

   With fd

      .AllowMultiSelect = True

      ' Set the title of the dialog box.
      .Title = "Please select the file."

      ' Clear out the current filters, and add our own.
      .Filters.Clear
      .Filters.Add "Excel 2003", "*.xls"
      .Filters.Add "All Files", "*.*"

      ' Show the dialog box. If the .Show method returns True, the
      ' user picked at least one file. If the .Show method returns
      ' False, the user clicked Cancel.
      If .Show = True Then
        txtFileName = .SelectedItems(1) 'replace txtFileName with your textbox

      End If
   End With
End Sub

问题:

  • 如何在列表框中显示文件名?无法弄清楚...
  • 如何确保文件路径已从“数据传输”代码移交给变量?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先,我要放弃use Sonata\BlockBundle\Block\Service\AbstractBlockService; use Symfony\Component\OptionsResolver\OptionsResolver; class MyBlockService extends AbstractBlockService { public function configureSettings(OptionsResolver $resolver) { $resolver->setDefaults(array( 'url' => false, 'title' => 'Insert the rss title', 'template' => '@SonataBlock/Block/block_core_rss.html.twig', )); } } 并使用Excels内置方法。像这样:

FileDialog

上方是您的Private Sub CommandButton1_Click() Dim fNames As Variant With Me fNames = Application.GetOpenFilename("Excel File(s) (*.xls*),*.xls*", , , , True) If IsArray(fNames) Then .ListBox1.List = fNames End With End Sub (来自屏幕截图)按钮。
对于BrowseFile按钮,您需要迭代到Transfer File项。
但是在此之前,您需要使文件传输ListBox通用。像这样:

Sub

上面是一个Sub Transferfile(wbTempPath As String, wbTargetPath As String) Dim wb1 As Workbook Dim wb_template As Workbook Set wb1 = Workbooks.Open(wbTargetPath) Set wb_template = Workbooks.Open(wbTempPath) '/* I believe this should be dynamic but that is another story */ wb_template.Sheets("Sheet1").Range("A1").Value = wb1.Sheets("Sheet1").Range("A1").Value wb_template.Sheets("Sheet1").Range("A2").Value = wb1.Sheets("Sheet1").Range("A2").Value wb_template.Sheets("Sheet1").Range("A3").Value = wb1.Sheets("Sheet1").Range("A3").Value wb1.Close False wb_template.Close True End Sub 过程,带有2个参数。
现在,剩下的部分是Sub按钮的代码,看起来应该像这样:

Transfer File