【问题标题】:VBA: Copy data from another workbook, based on cell value of current workbookVBA:根据当前工作簿的单元格值从另一个工作簿复制数据
【发布时间】:2017-03-20 17:32:10
【问题描述】:

目前我有一个工作簿,它循环遍历与其所在文件夹中的工作簿,最后将特定单元格中的数据复制回主工作簿。如果我想更改代码复制单元格的单元格,我必须在代码中更改此值。

但是,我的同事也需要使用此工作表来从其他工作簿中收集数据。 – 所以我需要让这个使用变得友好。 我想要做的是让代码读取主工作簿中的单元格值,并将此单元格值用作它复制的单元格。

例子:

如果我在主工作簿单元格 A1 中键​​入“B3”并运行宏,宏会将原始表 B3 中的数据复制到主工作簿的第一个单元格中。有谁知道如何做到这一点?

或者类似的东西:

.Cells(1).Value = originsheet.Range(Range("CellValue from destinationsheet A1").Value).Value

这是我使用的代码:

    Sub Consolidate()

  Dim wkbkorigin As Workbook
  Dim originsheet As Worksheet
  Dim destsheet As Worksheet
  Dim ResultRow As Long
  Dim Fname As String
  Dim RngDest As Range


    Set destsheet = ThisWorkbook.Worksheets("Sheet1")
    Set RngDest = destsheet.Cells(Rows.Count, 1).End(xlUp) _
                       .Offset(1, 0).EntireRow
    Fname = Dir(ThisWorkbook.Path & "/*.xlsx")

    'loop through each file in folder (excluding this one)
    Do While Fname <> "" And Fname <> ThisWorkbook.Name

        If Fname <> ThisWorkbook.Name Then

            Set wkbkorigin = Workbooks.Open(ThisWorkbook.Path & "/" & Fname)
            Set originsheet = wkbkorigin.Worksheets(1)

            With RngDest
                .Cells(1).Value = originsheet.Range(Range("A1").Value).Value
                .Cells(2).Value = originsheet.Range(Range("A2").Value).Value
                .Cells(3).Value = originsheet.Range(Range("A3").Value).Value
                .Cells(4).Value = originsheet.Range(Range("A4").Value).Value
                .Cells(5).Value = originsheet.Range(Range("A5").Value).Value
            End With

            wkbkorigin.Close SaveChanges:=False   'close current file
            Set RngDest = RngDest.Offset(1, 0)

        End If

        Fname = Dir()     'get next file
    Loop
End Sub 

还有我的意思的图片,以防我不清楚: enter image description here

【问题讨论】:

  • 那么,您的代码是不是不能正常工作,或者发生了一些意想不到的事情?
  • 仅供参考,您需要在Range 对象的所有用途之前添加工作表。即:RngDest = destsheet.Cells(destsheet.Rows.Count, 1).End(xlUp).Cells(1).Value = originsheet.Range(originsheet.Range("A1").Value).Value
  • 我不记得这是否是绝对必要的,但您可以将&amp; "/" &amp; 更改为&amp; "\" &amp;。它可能作为/ 工作,因为Excel 可以打开互联网路径,并且"/""\" 在路径中似乎可以互换;我不确定。

标签: vba excel copy


【解决方案1】:

对不起,我相信你还没有说清楚。但是,您可能正试图得到这样的东西(如果我错了,请纠正我):

destinationsheet.Range("A1") = originsheet.Range(destinationsheet.Range("A1"))

这将使您的主工作簿中的值被另一个工作表的单元格地址中的内容替换。

【讨论】:

  • 谢谢,这行得通。我记得以前试过这个,但我一定是打错了什么。在您发表评论后再次尝试,效果很好:)
  • 请为我的回答点赞!我刚刚登录 Stack Overflow,我需要声誉! ;)
  • 我已经有了,但是因为我的分数低于 15,所以它没有显示:(
猜你喜欢
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多