2016-06-11 186 views
0

我希望你能幫我做一個更新代碼按鈕。我想要一個工作簿 - 輸入數據,當我感覺到工作簿並單擊更新按鈕時,它將根據工作簿文件自動更新特定工作簿。在EnterData工作簿中提到。如何將一個excel工作簿中的多個數據轉移到另一個excel工作簿

例如,我想使用以下詳細信息製作EnterData。

ITEMNAME: 項目數量:

部:每月 表名稱3部:月 文件名:取決於ITEMNAME

,一旦我點擊更新按鈕,它會自動更新具體帶有特定工作表名稱和部門的文件

希望你能幫助我解決這個問題。

+1

已經有很多關於Stack Overflow的例子 - 嘗試快速搜索並使用其他人現有的問題和答案。嘗試一些代碼,找出你找到的例子,然後向我們展示你的代碼和你得到的任何錯誤。 – dbmitch

回答

0

這會給你一個良好的開端
我嘗試將要執行的工作分爲簡單,可讀和邏輯任務。

  • 使用常量的設置,例如:根目錄,單元格引用,列參考 我想看到這個模塊

    公共常量TartgetWorkBookName的String =「C的頂部:\用戶\ SomeFolder \ Data.xlsm」 公共常量TartgetWorkSheetName的String = 「工作表Sheet」 公共常量TartgetTopLeftCellAddress的String = 「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 
相關問題