复制和粘贴的宏扩展不起作用
Macro expansion for copy and pasting won't work
我一直在尝试将这个适用于前 3 张的宏扩展到总共 6 张,但无论我尝试什么,宏似乎都失败了。我这样做的方式有问题吗?
这是原始宏
Public Sub copyData()
Dim arrConfig(1, 2) As String
'Target sheetname | Source filename
arrConfig(0, 0) = "10k I": arrConfig(1, 0) = "1.xls"
arrConfig(0, 1) = "10k B": arrConfig(1, 1) = "2.xls"
arrConfig(0, 2) = "10k C": arrConfig(1, 2) = "3.xls"
'...
'arrconfig(0,6) = ...
Const pathDownloads As String = "/Users/bob/Downloads/"
Const AddressToCopy As String = "A1:M150"
Dim i As Long, wbSource As Workbook, wsSource As Worksheet, wsTarget As Worksheet
For i = 0 To UBound(arrConfig, 2)
Set wsTarget = ThisWorkbook.Worksheets(arrConfig(0, i))
wsTarget.Cells.Clear
Set wbSource = Workbooks.Open(pathDownloads & arrConfig(1, i))
Set wsSource = wbSource.Worksheets(1)
'This is the part where the data are written from one range to another (values only without formatting)
wsTarget.Range(AddressToCopy).Value = wsSource.Range(AddressToCopy).Value
wbSource.Close savechanges:=True
Next
End Sub
这是我尝试修改的宏,总共 6 张无效。
Public Sub copyData()
Dim arrConfig(1, 2) As String
'Target sheetname | Source filename
arrConfig(0, 0) = "10k I": arrConfig(1, 0) = "1.xls"
arrConfig(0, 1) = "10k B": arrConfig(1, 1) = "2.xls"
arrConfig(0, 2) = "10k C": arrConfig(1, 2) = "3.xls"
arrConfig(0, 0) = "10Q I": arrConfig(1, 0) = "4.xls"
arrConfig(0, 1) = "10Q B": arrConfig(1, 1) = "5.xls"
arrConfig(0, 2) = "10Q C": arrConfig(1, 2) = "6.xls"
'...
Const pathDownloads As String = "/Users/bob/Downloads/"
Const AddressToCopy As String = "A1:M150"
Dim i As Long, wbSource As Workbook, wsSource As Worksheet, wsTarget As Worksheet
For i = 0 To UBound(arrConfig, 2)
Set wsTarget = ThisWorkbook.Worksheets(arrConfig(0, i))
wsTarget.Cells.Clear
Set wbSource = Workbooks.Open(pathDownloads & arrConfig(1, i))
Set wsSource = wbSource.Worksheets(1)
'This is the part where the data are written from one range to another (values only without formatting)
wsTarget.Range(AddressToCopy).Value = wsSource.Range(AddressToCopy).Value
wbSource.Close savechanges:=True
Next
End Sub
您又添加了 3 个工作表,但尚未更改 arrConfig
的尺寸以容纳它们。它需要像:Dim arrConfig(1,5) as String
。您还需要更新存储最后 3 行的数组位置。它现在的工作方式是向数组添加 3 行,然后覆盖这 3 行。
Sub CopyData()
Const SourceFolderPath As String = "C:\Users\bob\Downloads\"
Const SourceRangeAddress As String = "A1:M150"
'Target sheetname | Source filename
Dim ArrConfig(0 To 1, 0 To 5) As String
ArrConfig(0, 0) = "10k I": ArrConfig(1, 0) = "1.xls"
ArrConfig(0, 1) = "10k B": ArrConfig(1, 1) = "2.xls"
ArrConfig(0, 2) = "10k C": ArrConfig(1, 2) = "3.xls"
ArrConfig(0, 3) = "10Q I": ArrConfig(1, 3) = "4.xls"
ArrConfig(0, 4) = "10Q B": ArrConfig(1, 4) = "5.xls"
ArrConfig(0, 5) = "10Q C": ArrConfig(1, 5) = "6.xls"
Application.ScreenUpdating = False
Dim wbSource As Workbook
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim i As Long
For i = 0 To UBound(ArrConfig, 2)
Set wbSource = Workbooks.Open(SourceFolderPath & ArrConfig(1, i))
Set wsSource = wbSource.Worksheets(1)
Set wsTarget = ThisWorkbook.Worksheets(ArrConfig(0, i))
wsTarget.Cells.Clear
wsTarget.Range(SourceRangeAddress).Value _
= wsSource.Range(SourceRangeAddress).Value
wbSource.Close SaveChanges:=False ' you're just reading
Next
'ThisWorkbook.Save
Application.ScreenUpdating = True
MsgBox "Data copied.", vbInformation
End Sub
我一直在尝试将这个适用于前 3 张的宏扩展到总共 6 张,但无论我尝试什么,宏似乎都失败了。我这样做的方式有问题吗?
这是原始宏
Public Sub copyData()
Dim arrConfig(1, 2) As String
'Target sheetname | Source filename
arrConfig(0, 0) = "10k I": arrConfig(1, 0) = "1.xls"
arrConfig(0, 1) = "10k B": arrConfig(1, 1) = "2.xls"
arrConfig(0, 2) = "10k C": arrConfig(1, 2) = "3.xls"
'...
'arrconfig(0,6) = ...
Const pathDownloads As String = "/Users/bob/Downloads/"
Const AddressToCopy As String = "A1:M150"
Dim i As Long, wbSource As Workbook, wsSource As Worksheet, wsTarget As Worksheet
For i = 0 To UBound(arrConfig, 2)
Set wsTarget = ThisWorkbook.Worksheets(arrConfig(0, i))
wsTarget.Cells.Clear
Set wbSource = Workbooks.Open(pathDownloads & arrConfig(1, i))
Set wsSource = wbSource.Worksheets(1)
'This is the part where the data are written from one range to another (values only without formatting)
wsTarget.Range(AddressToCopy).Value = wsSource.Range(AddressToCopy).Value
wbSource.Close savechanges:=True
Next
End Sub
这是我尝试修改的宏,总共 6 张无效。
Public Sub copyData()
Dim arrConfig(1, 2) As String
'Target sheetname | Source filename
arrConfig(0, 0) = "10k I": arrConfig(1, 0) = "1.xls"
arrConfig(0, 1) = "10k B": arrConfig(1, 1) = "2.xls"
arrConfig(0, 2) = "10k C": arrConfig(1, 2) = "3.xls"
arrConfig(0, 0) = "10Q I": arrConfig(1, 0) = "4.xls"
arrConfig(0, 1) = "10Q B": arrConfig(1, 1) = "5.xls"
arrConfig(0, 2) = "10Q C": arrConfig(1, 2) = "6.xls"
'...
Const pathDownloads As String = "/Users/bob/Downloads/"
Const AddressToCopy As String = "A1:M150"
Dim i As Long, wbSource As Workbook, wsSource As Worksheet, wsTarget As Worksheet
For i = 0 To UBound(arrConfig, 2)
Set wsTarget = ThisWorkbook.Worksheets(arrConfig(0, i))
wsTarget.Cells.Clear
Set wbSource = Workbooks.Open(pathDownloads & arrConfig(1, i))
Set wsSource = wbSource.Worksheets(1)
'This is the part where the data are written from one range to another (values only without formatting)
wsTarget.Range(AddressToCopy).Value = wsSource.Range(AddressToCopy).Value
wbSource.Close savechanges:=True
Next
End Sub
您又添加了 3 个工作表,但尚未更改 arrConfig
的尺寸以容纳它们。它需要像:Dim arrConfig(1,5) as String
。您还需要更新存储最后 3 行的数组位置。它现在的工作方式是向数组添加 3 行,然后覆盖这 3 行。
Sub CopyData()
Const SourceFolderPath As String = "C:\Users\bob\Downloads\"
Const SourceRangeAddress As String = "A1:M150"
'Target sheetname | Source filename
Dim ArrConfig(0 To 1, 0 To 5) As String
ArrConfig(0, 0) = "10k I": ArrConfig(1, 0) = "1.xls"
ArrConfig(0, 1) = "10k B": ArrConfig(1, 1) = "2.xls"
ArrConfig(0, 2) = "10k C": ArrConfig(1, 2) = "3.xls"
ArrConfig(0, 3) = "10Q I": ArrConfig(1, 3) = "4.xls"
ArrConfig(0, 4) = "10Q B": ArrConfig(1, 4) = "5.xls"
ArrConfig(0, 5) = "10Q C": ArrConfig(1, 5) = "6.xls"
Application.ScreenUpdating = False
Dim wbSource As Workbook
Dim wsSource As Worksheet
Dim wsTarget As Worksheet
Dim i As Long
For i = 0 To UBound(ArrConfig, 2)
Set wbSource = Workbooks.Open(SourceFolderPath & ArrConfig(1, i))
Set wsSource = wbSource.Worksheets(1)
Set wsTarget = ThisWorkbook.Worksheets(ArrConfig(0, i))
wsTarget.Cells.Clear
wsTarget.Range(SourceRangeAddress).Value _
= wsSource.Range(SourceRangeAddress).Value
wbSource.Close SaveChanges:=False ' you're just reading
Next
'ThisWorkbook.Save
Application.ScreenUpdating = True
MsgBox "Data copied.", vbInformation
End Sub