2016-06-11 5 views
0

Я надеюсь, что вы можете мне помочь, сделайте кнопку «Код для обновления». Я хотел иметь 1 рабочую книгу -Введите данные, чтобы, когда я чувствую книгу и нажмите кнопку обновления, она автоматически обновит конкретную книгу, основываясь на файле рабочей книги. упомянутых в рабочей книге EnterData.Как перенести несколько данных в один Excel Workbook в другую книгу excel

Например. Я хочу сделать EnterData со следующей информацией.

ItemName: товара Количество:

Департамент: 3 Департамент за месяц Sheet Название: Месяц FileName: Зависит от ITEMNAME

и один раз я нажимаю кнопку обновления, он будет автоматически обновлять конкретный файл с указанием конкретного названия и отдела

Надеюсь, вы могли бы помочь мне в этом.

+1

Множество примеров переполнения стека уже - попробуйте быстрый поиск и используйте другие вопросы и ответы других людей. Попробуйте использовать какой-либо код на baed на примерах, которые вы найдете, а затем покажете нам свой код и любые ошибки, которые вы получите. – dbmitch

ответ

0

Это даст вам хороший старт
Я пытаюсь разделить выполняемую работу на простую, читаемую и логическую задачу.

  • Использование Константы для таких параметров, как: корневые каталоги, ссылки на ячейки, столбце Ссылки Я хочу увидеть это в верхней части модуля

    Public Const TartgetWorkBookName As String = «C: \ Users \ SomeFolder \ Data.xlsm» Public Const TartgetWorkSheetName As String = "Лист3" Public Const TartgetTopLeftCellAddress As String = "A1"

Versus это где-то утопает в коде:

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 
Смежные вопросы