宏按钮可将信息从一个电子表格中的特定单元格转移到另一个电子表格中

时间:2016-08-09 14:56:34

标签: excel vba excel-vba macros

我希望能够构建一个能够轻松将单元格内容从一个电子表格传输到另一个电子表格的宏。让我详细说明一下:我目前有两个电子表格打开。见picture。左侧的工作表通过我制作的按钮宏(未包含在图片中)工作,并生成三个不同的相邻值。因此,每次单击按钮时,都会生成一个新输出。

我希望能够将该信息从左侧的工作表传输到右侧的工作表中,分别传输到G,H和I列(可能会点击右侧工作表上的按钮)和然后让它进入下一个空行以准备下一轮生成的值。

我在构建这个(初学者)时遇到了一些麻烦。你能提供一些帮助吗?

这是我到目前为止所做的:

Sub Button1_Click()
If Not Intersect(ActiveCell, Range("G:G")) Is Nothing Then
    If ActiveCell.Offset(1, 0) <> vbNullString Then
        ActiveCell.Offset(1, 0).Select
        ActiveCell.Value = Workbooks("Model.xlsx").Worksheets("Optimization").Range("C100").Value
        ActiveCell.Offset(0, 1).Value = Workbooks("Model.xlsx").Worksheets("Optimization").Range("D100").Value
        ActiveCell.Offset(0, 2).Value = Workbooks("Model.xlsx").Worksheets("Optimization").Range("E100").Value
    End If
End If
End Sub

谢谢!

1 个答案:

答案 0 :(得分:0)

这应该有效

Sub Button1_Click()
Const RowToTakeInformation = 100
Const ColumnToTakeInformation = 3
Const ColToWriteIn = 7
Dim WBDesired As Workbook: Set WBDesired = Workbooks("Model.xlsx")
Dim WSDesired As Worksheet: Set WSDesired = Worksheets("Optimization")
'If everything is in the same WB, I don't see a valid reason why to set it
Dim RowToInsert As Long
Dim CounterColumnsToWrite As Long

    If WBDesired.Worksheets(WSDesired.Name).Cells(RowToTakeInformation, ColumnToTakeInformation).Value <> "" Then ' 1. If WBDesired.Worksheets(WSDesired.Name).Cells(RowToTakeInformation, ColumnToTakeInformation).Value <> ""
    'here I'm assuming it's a table or something like it that automatically recalculates when something is inserted in between
    RowToInsert = Cells(Rows.Count, ColToWriteIn).End(xlUp).Row - 1
    Rows(RowToInsert).Insert Shift:=xlDown
    For CounterColumnsToWrite = 0 To 2
    Cells(RowToInsert, ColToWriteIn + CounterColumnsToWrite).Value = WBDesired.Worksheets(WSDesired.Name).Cells(RowToTakeInformation, ColumnToTakeInformation + CounterColumnsToWrite)
    Next CounterColumnsToWrite
    End If ' 1. If WBDesired.Worksheets(WSDesired.Name).Cells(RowToTakeInformation, ColumnToTakeInformation).Value <> ""
End Sub