VBA将数据从一张图纸复制到另一张图纸
我是VBA新手,需要一些项目帮助。我需要编写一个宏来读取C列中的工作表名称,并将源工作簿中的值粘贴到D列中指定的目标工作簿中的某个范围 例如,它需要复制我的工作簿Sheet2中的数据,并将其粘贴到他们的工作簿Sheet2的范围中。范围和页码信息存储在单独工作簿中的位置 编辑:我添加了一张wbOpen的图片。VBA将数据从一张图纸复制到另一张图纸,vba,excel,macros,Vba,Excel,Macros,我是VBA新手,需要一些项目帮助。我需要编写一个宏来读取C列中的工作表名称,并将源工作簿中的值粘贴到D列中指定的目标工作簿中的某个范围 例如,它需要复制我的工作簿Sheet2中的数据,并将其粘贴到他们的工作簿Sheet2的范围中。范围和页码信息存储在单独工作簿中的位置 编辑:我添加了一张wbOpen的图片。 选项显式 Sub-PasteToTargetRange() Dim arrVar As Variant'存储所有图纸以获取复制的图纸 Dim arrVarTarget As Variant'
选项显式
Sub-PasteToTargetRange()
Dim arrVar As Variant'存储所有图纸以获取复制的图纸
Dim arrVarTarget As Variant'在目标工作簿中存储工作表的名称
Dim rngRange As Range“给定范围内的每个图纸名称
将rngLoop设置为rngRange所基于的范围
将wsSource设置为找到范围的工作表的源工作表
使用要粘贴的信息将wbSource设置为工作簿的工作簿
将wbTarget设置为将接收信息的工作簿
将strSourceFile设置为源工作簿的字符串位置
将strTargetFile设置为源工作簿的字符串位置
将wbOpen设置为工作簿当前打开的工作簿(带有输入的工作簿)
将wsRange设置为范围“从源工作簿获取信息
Dim varRange作为“范围”范围,其中应粘贴值
Dim i作为循环的整数计数器
将wbkNewSheet设置为工作表“如果目标工作簿没有新工作表,则创建新工作表”
将wsTarget设置为工作表的目标工作簿工作表
Dim varNumber作为字符串“要发布的范围”
设置wbOpen=Workbooks.Open(“WorkbookWithRanges.xlsx”)
'开源文件
MsgBox(“打开源文件”)
strSourceFile=Application.GetOpenFilename
如果strSourceFile=“”,则退出Sub
设置wbSource=Workbooks.Open(strSourceFile)
'打开目标文件
MsgBox(“打开目标文件”)
strTargetFile=Application.GetOpenFilename
如果strTargetFile=“”,则退出Sub
设置wbTarget=Workbooks.Open(strTargetFile)
'激活转移工作簿
打开,激活
设置wsRange=ActiveSheet.Range(“C9:C20”)
设置arrVarTarget=wbTarget.Worksheets
对于wsRange中的每个varRange
如果varRange.Value='目标工作簿工作表
varNumber=varRange.Offset(0,-1).Value
设置wsTarget=X.Offset(0,1)
wsSouce.Range(wsTarget).Value=varNumber
其他的
wbkNewSheet=工作表。添加
wbkNewSheet.Name=varRange.Value
如果结束
下一个
End Sub
类似的内容(未经测试,但应该会给您一个想法)
类似这样的东西(未经测试,但应该给你一个想法)
如果您的现有代码存在问题,问题在哪里。它做了哪些不应该做的事情?
设置wbOpen=Workbooks.Open(“WorkbookWithRanges.xlsx”)
-您应该使用文件的完整路径here@dbmitch我对if语句真的有问题。我不知道如何让它对照“数据库”工作簿中列出的名称检查目标工作簿中工作表的名称。@OLOO。您是否尝试过Sheet.name?如果您的现有代码中有问题,请在wbOpen
中发布一个内容示例。它做了哪些不应该做的事情?设置wbOpen=Workbooks.Open(“WorkbookWithRanges.xlsx”)
-您应该使用文件的完整路径here@dbmitch我对if语句真的有问题。我不知道如何让它对照“数据库”工作簿中列出的名称检查目标工作簿中工作表的名称。@OLOO。您试过Sheet.name了吗?在wbOpen
中发布一个内容示例会有帮助,非常感谢Tim!我做了一些改变。我用wbSource.Sheets(shtName)翻转了行,因为它一直在擦除源工作表中的数据,而不是将数据放入目标工作表中。我希望我能投票,但我对这个太陌生了。非常感谢蒂姆!我做了一些改变。我用wbSource.Sheets(shtName)翻转了行,因为它一直在擦除源工作表中的数据,而不是将数据放入目标工作表中。我希望我能投票,但我对这件事太陌生了。
Sub PasteToTargetRange()
'....omitted
Set wsRange = wbOpen.Sheets(1).Range("C9:C20")
For Each c In wsRange
shtName = c.Offset(0, -1).Value
Set wsTarget = GetSheet(wbTarget, shtName) 'get the target sheet
wbSource.Sheets(shtName).Range(c.Value).Copy wsTarget.Range(c.Value)
Next
End Sub
'Get a reference to a named sheet in a specific workbook
' By default will create the sheet if not found
Function GetSheet(wb As Workbook, ws As String, Optional CreateIfMissing As Boolean = True)
Dim rv As Worksheet
On Error Resume Next 'ignore eroror if no match
Set rv = wb.Worksheets(ws)
On Error GoTo 0 'stop ignoring errors
'sheet wasn't found, and should create if missing
If rv Is Nothing And CreateIfMissing Then
Set rv = wb.Worksheets.Add(after:=wb.Worksheets(wb.Worksheets.Count))
rv.Name = ws
End If
Set GetSheet = rv
End Function