Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA将数据从一张图纸复制到另一张图纸_Vba_Excel_Macros - Fatal编程技术网

VBA将数据从一张图纸复制到另一张图纸

VBA将数据从一张图纸复制到另一张图纸,vba,excel,macros,Vba,Excel,Macros,我是VBA新手,需要一些项目帮助。我需要编写一个宏来读取C列中的工作表名称,并将源工作簿中的值粘贴到D列中指定的目标工作簿中的某个范围 例如,它需要复制我的工作簿Sheet2中的数据,并将其粘贴到他们的工作簿Sheet2的范围中。范围和页码信息存储在单独工作簿中的位置 编辑:我添加了一张wbOpen的图片。 选项显式 Sub-PasteToTargetRange() Dim arrVar As Variant'存储所有图纸以获取复制的图纸 Dim arrVarTarget As Variant'

我是VBA新手,需要一些项目帮助。我需要编写一个宏来读取C列中的工作表名称,并将源工作簿中的值粘贴到D列中指定的目标工作簿中的某个范围

例如,它需要复制我的工作簿Sheet2中的数据,并将其粘贴到他们的工作簿Sheet2的范围中。范围和页码信息存储在单独工作簿中的位置

编辑:我添加了一张wbOpen的图片。
选项显式
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