【发布时间】: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 -
我不记得这是否是绝对必要的,但您可以将
& "/" &更改为& "\" &。它可能作为/工作,因为Excel 可以打开互联网路径,并且"/"和"\"在路径中似乎可以互换;我不确定。