通过变量将工作表或数据从一个工作簿添加到另一个工作簿

时间:2020-02-21 07:51:52

标签: excel vba spreadsheet userform

我有这个项目,其主要目的是修改和使用Excel工作表。为了方便用户使用,一切都通过用户表单完成。待导入的工作表将在外部来源发送的工作簿中,通过不同的方式(邮件,从网络上检索到)发送,并且每次都有不同的名称。 我正在寻找最用户友好的方法来从此工作表中获取数据。

我想出的最用户友好的方法是暂时隐藏用户表单,并要求用户打开需要数据的工作簿。然后,让代码在我的主要项目工作表中复制我需要的工作表(如果它通过了一系列测试,请确定它是正确的,而不是其他一些随机打开的工作簿)。

我一直在寻找更直观的解决方案,例如将工作簿拖放到项目的用户窗体上。我不确定是否可以做到,我在读有关树视图的需求,根据某些消息来源它不支持64,而根据另一些文件则可以正常工作。我还阅读了有关Treeview的JPK替换的信息,但我不确定从长远来看如何将其视为安全选择。

有什么提示吗?我正在寻找一种解决方案,但实际上并不知道要寻找什么。

1 个答案:

答案 0 :(得分:1)

首先,我想说我不是下一个解决方案的“父亲”。我将其收集在有用的代码段和技巧中... 我不记得是从哪里捡来的,并根据需要进行调整的。

  1. 添加对Microsoft Windows Common Controls 6.0 ...的引用可通过IDE->工具->引用...

  2. 完成
  3. 在表单上放置一个TreeView控件。通常,您的工具箱不会显示它。因此,右键单击ToolBox之后,必须选择选项Additional Controls。然后只需要检查Microsoft TreeView Control, version...并按OK。

  4. 在表单上拖动新控件,然后按F4。在将显示的属性窗口中,必须将'OLEDropMode'设置为OLEDropManual。按Enter,选择表单,然后按Save

  5. 在表单模块级别(在其顶部的声明区域)创建一个变量。在此声明它不是强制性的,但是如果需要的话,可以在此声明以备将来使用。碰巧我在那里需要它...

    Private strExcelWPath As String

  6. 双击TreeView控件(默认-TreeView1)并以这种方式打开其事件代码。按右上方的小向下箭头,然后选择OLEDragDrop事件。它将创建下一个事件代码:

    Private Sub TreeView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)

    End Sub

    您必须插入下一行代码行(或类似代码),它会变成这样:

    Private Sub TreeView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) strExcelWPath = Data.Files(1)
    Debug.Print strExcelWPath 'just checking of what it returns droppedWorkbookProcess strExcelWPath 'calling the sub able to process the workbook End Sub

  7. 您能够处理删除的工作簿路径的函数必须如下所示:

    Sub droppedWorkbookProcess(strFullName As String) 'Here you place the processing code, using of passed strFullName parameter End Sub

  8. 该代码还可以进行多项选择,如果有必要...