繁体   English   中英

如何将一个Excel工作簿中的多个数据传输到另一Excel工作簿中

[英]How to transfer multiple Data in one excel Workbook to another excel workbook

我希望您能为我提供一个“更新代码”按钮。 我想要一个1工作簿-输入数据,当我感觉到该工作簿并单击更新按钮时,它将基于该工作簿文件自动更新特定的工作簿。 在EnterData工作簿中提到。

例如。 我想使用以下详细信息制作EnterData。

物品名称:物品数量:

部门:每月3个部门工作表名称:月份文件名:取决于ItemName

然后单击更新按钮,它将自动使用特定的工作表名称和部门更新特定的文件

希望你能帮我这个忙。

这将为您提供良好的开端
我试图将要执行的工作划分为简单,可读和逻辑的任务。

  • 使用常量进行设置,例如:根目录,单元格引用,列引用我想在模块顶部看到它

    公共常量TartgetWorkBookName作为字符串=“ C:\\ Users \\ SomeFolder \\ Data.xlsm”公共常量TartgetWorkSheetName作为字符串=“ Sheet3”公共常量TartgetTopLeftCellAddress作为字符串=“ A1”

与埋在代码中的某个地方:

Dim TargetWorkBook As Workbook
Set TargetWorkBook = Application.Workbooks.Open("C:\Users\SomeFolder\Data.xlsm")
Set getTargetR1C1 = TargetWorkBook.Worksheets("Sheet3").Range("A1")

这是我遵循的基本模式的草稿。 这是一个有效的例子。

Option Explicit

    Const TartgetWorkBookName As String = "C:\Users\SomeFolder\Data.xlsm"
    Const TartgetWorkSheetName As String = "Sheet3"
    Const TartgetTopLeftCellAddress As String = "A1"

    Dim TargetWorkBook As Workbook
    Set TargetWorkBook = Application.Workbooks.Open(TartgetWorkBookName)
    Set getTargetR1C1 = TargetWorkBook.Worksheets(TartgetWorkSheetName).Range(TartgetTopLeftCellAddress)

Sub PostRecord()
    Dim TargetR1C1 As Range, ItemName As String, Qty As Double, Department As String, Month_ As Integer
    Set TargetR1C1 = getTargetR1C1()

    'If your transfering a lot of data turn off
    Speedboost True
    '------Begin Loop
    '------For x = 2 to LastColumn
    '------Set Variables
    ItemName = "Dragon Sauce"
    Qty = 3
    Department = "Spicy Hot Stuff"
    Month_ = Month(Date)

    '------Post Varibles to taget
    UpdateRecord TargetR1C1, ItemName, Qty, Department, Month_

    'Next
    'Turn Everything back on
    Speedboost False
End Sub

Sub UpdateRecord(TargetR1C1 As Range, ItemName As String, Qty As Double, Department As String, Month_ As Integer)
    Dim c As Range
    Dim x As Long, y As Long
    If Len(TargetR1C1.Offset(1)) Then
        x = TargetR1C1.End(xlDown).Row + 1
    Else
        x = TargetR1C1.Rows + 1
    End If
    y = TargetR1C1.Column

    Set c = TargetR1C1.Cells
    c(x, y) = ItemName
    c(x, y + 1) = Qty
    c(x, y + 2) = Department
    c(x, y + 3) = Month_

End Sub

Sub Speedboost(bSpeedUpMacros As Boolean)
    With Application
        .ScreenUpdating = Not (bSpeedUpMacros)
        .EnableEvents = Not (bSpeedUpMacros)
        If bSpeedUpMacros Then
            .Calculation = xlCalculationManual
        Else
            .Calculation = xlCalculationAutomatic
        End If
    End With
End Sub

Function getTargetR1C1() As Range
    Dim TargetWorkBook As Workbook
    Set TargetWorkBook = Application.Workbooks.Open(TartgetWorkBookName)
    Set getTargetR1C1 = TargetWorkBook.Worksheets(TartgetWorkSheetName).Range(TartgetTopLeftCellAddress)
End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM