Excel 从其他工作簿复制/粘贴脚本时出现根本性错误

Excel 从其他工作簿复制/粘贴脚本时出现根本性错误,excel,vba,Excel,Vba,很抱歉,如果这让人觉得很轻率,但我已经花了8个小时用这个把我的头撞在墙上了。无论我尝试什么变体,这段代码都会不断抛出各种程度的错误。我很有能力,我举了很多例子,但都不管用。我开始认为我的工作簿中代码的位置有问题。我把它放在Module1中,我通常保存所有代码 实际问题-从弹出提示中选择文件后,将值从一个工作簿工作表复制/粘贴到另一个工作簿工作表。就这样。表的结构相同,但需要在目标工作表上向上移动5行 我已经尝试了很多不同类型的代码,当我尝试迭代到不同的东西时,您可以看到这些代码被注释掉了。它将无

很抱歉,如果这让人觉得很轻率,但我已经花了8个小时用这个把我的头撞在墙上了。无论我尝试什么变体,这段代码都会不断抛出各种程度的错误。我很有能力,我举了很多例子,但都不管用。我开始认为我的工作簿中代码的位置有问题。我把它放在Module1中,我通常保存所有代码

实际问题-从弹出提示中选择文件后,将值从一个工作簿工作表复制/粘贴到另一个工作簿工作表。就这样。表的结构相同,但需要在目标工作表上向上移动5行

我已经尝试了很多不同类型的代码,当我尝试迭代到不同的东西时,您可以看到这些代码被注释掉了。它将无法正确引用打开的工作簿。不断抛出错误,就像我试图访问某个隐藏的黑暗数据库,而不是它旁边的文件

我尝试过很多不同的方法,但最终都会出现不同的错误。上面的代码给出了“运行时错误13”。在尝试复制代码的循环中的行上键入,mismatch

我认为这一切都源于excel无法正确引用打开的文件。即使它应该

 Sub ImportEstimatorData()
    Dim xTargetWb As Workbook 'Consolidator
    Dim xSourceWb As Workbook 'Estimator
    Set xTargetWb = ActiveWorkbook

    Dim xTargetRng As Range 'Target row/column in new sheet, changes row starting
    Dim xSourceRng As Range 'Source data from Estimator, Never changes

    Dim xSourceSt As Worksheet
    Dim xTargetSt As Worksheet

    Sheets("CR Data").Activate

    Set xTargetSt = ThisWorkbook.Sheets("CR Data")

    Dim vFile As Variant
    'fileToOpen = Application _
    ' .GetOpenFilename("Text Files (*.txt), *.txt")
    'If fileToOpen <> False Then
    ' MsgBox "Open " & fileToOpen
    'End If

    'Dim vFile As Variant
    'vFile = Application.GetOpenFilename("Excel-files,*.xlsx", 1, "Select One File To Open", , False)
    'if the user didn't select a file, exit sub
    'If vFile = "" Then Exit Sub
    'Set targetworkbook
    'Set xSourceWb = Workbooks.Open(vFile)
        If Not Application.OperatingSystem Like "*Mac*" Then
            ' Is Windows.
        vFile = Application.GetOpenFilename("Excel-files,*.xlsm", 1, "Select One File To Open", , False)
'if the user didn't select a file, exit sub
            If vFile = "" Then
            Exit Sub
            End If
        Else
        Exit Sub
        End If
            ' Is a Mac and will test if running Excel 2011 or higher.
      ' If Val(Application.Version) > 14 Then
       '         Set xSourceWb = Select_File_Or_Files_Mac

        '        End If
          '      End If

        'Workbooks.Open (vFile)

        Set xSourceWb = Workbooks.Open(vFile)

        'Workbooks(xSourceWb).Open
        'Workbooks(xSourceWb).Activate

        'Set Sheets for both Source & Target Workbooks

        'Set xSourceSt = xSourceWb.Sheets("Output data GPE")

        'Set xTargetRng = xTargetSt.Range(Cells(4, 2), Cells(80, 16))


        Sheets("Output Sheet GPE").Activate 'Range(Cells(1, 1), Cells(2, 2)).Select
        Set xSourceWb = ActiveWorkbook

        'xSourceWb.Activate

        'Set xSourceRng = xSourceSt.Range(Cells(4, 2), Cells(80, 16))

        'xSourceRng.Copy xTargetRng

        'Workbooks(xSourceWb).Worksheets("Output Sheet GPE").Range(Cells(8, 2), Cells(84, 16)).Copy Workbooks(xTargetWb).Worksheets("CR Data").Range(Cells(4, 2), Cells(80, 16))

        For i = 8 To 84

        For j = 2 To 16

        Workbooks(xSourceWb).Worksheets("Output Sheet GPE").Cells(i, j) = Workbooks(xTargetWb).Worksheets("CR Data").Cells(i - 4, j)
   'Debug error here

        Next j

        Next i


        'Workbooks(xWb).Worksheets("CR Data").Range(Cells(4, 2), Cells(80, 16)).Copy Workbooks(xTargetWb).Worksheets("C").Range(Cells(4, 2), Cells(80, 16))

        'Workbooks(xTargetWb).Worksheets("CR Data").Range(Cells(4, 2), Cells(80, 16)).PasteSpecial Paste:=xlPasteValues

        'Workbooks(xTargetWb).Sheets("CR Data").Range(Cells(4, 2), Cells(80, 16)).Value = Workbooks(xSourceWb).Sheets("Output Sheet GPE").Range(Cells(4, 2), Cells(80, 16))

       'xSourceWb.Close
    'End If
'End With

End Sub'
Sub-importTestimatorData()
Dim xTargetWb作为工作簿的合并器
Dim xSourceWb作为工作簿的估算器
设置xTargetWb=ActiveWorkbook
Dim xTargetRng As Range“目标行/列在新工作表中,更改行起始位置”
Dim X作为来自估计器的范围源数据,从不改变
Dim xSourceSt作为工作表
将xTargetSt设置为工作表
工作表(“CR数据”)。激活
Set xTargetSt=thisvoolk.Sheets(“CR数据”)
作为变量的Dim vFile
'fileToOpen=应用程序_
'.GetOpenFilename(“文本文件(*.txt),*.txt”)
'如果fileToOpen为False,则
'MsgBox“打开”&文件打开
"完"
'将vFile作为变量
'vFile=Application.GetOpenFilename(“Excel文件,*.xlsx”,1,“选择一个要打开的文件”,False)
'如果用户没有选择文件,请退出sub
'如果vFile=”“,则退出Sub
'设置targetworkbook
'Set xSourceWb=Workbooks.Open(vFile)
如果不是像“*Mac*”这样的Application.OperatingSystem,则
“是窗户。
vFile=Application.GetOpenFilename(“Excel文件,*.xlsm”,1,“选择一个要打开的文件”,False)
'如果用户没有选择文件,请退出sub
如果vFile=”“,则
出口接头
如果结束
其他的
出口接头
如果结束
'是Mac,将测试是否运行Excel 2011或更高版本。
'如果Val(Application.Version)>14,则
'Set xSourceWb=选择\u文件\u或\u文件\u Mac
"完"
"完"
'工作簿.Open(vFile)
Set xSourceWb=Workbooks.Open(vFile)
'工作簿(xSourceWb).打开
'工作簿(xSourceWb).激活
'为源工作簿和目标工作簿设置工作表
'Set xSourceSt=xSourceWb.Sheets(“输出数据GPE”)
'设置xTargetRng=xTargetSt.Range(单元格(4,2),单元格(80,16))
工作表(“输出工作表GPE”)。激活“范围”(单元格(1,1),单元格(2,2))。选择
设置xSourceWb=ActiveWorkbook
'xSourceWb.Activate
'设置xSourceRng=xSourceSt.Range(单元格(4,2),单元格(80,16))
'xSourceRng.Copy xTargetRng
'工作簿(xSourceWb).工作表(“输出表GPE”).范围(单元格(8,2),单元格(84,16)).复制工作簿(xTargetWb).工作表(“CR数据”).范围(单元格(4,2),单元格(80,16))
对于i=8到84
对于j=2到16
工作手册(xSourceWb)。工作表(“输出表GPE”)。单元格(i,j)=工作手册(xTargetWb)。工作表(“CR数据”)。单元格(i-4,j)
'此处出现调试错误
下一个j
接下来我
'工作簿(xWb).工作表(“CR数据”).范围(单元格(4,2),单元格(80,16)).复制工作簿(xTargetWb).工作表(“C”).范围(单元格(4,2),单元格(80,16))
'工作簿(xTargetWb).工作表(“CR数据”).范围(单元格(4,2),单元格(80,16)).Paste特殊粘贴:=XLPasteValue
'工作簿(xTargetWb).工作表(“CR数据”).范围(单元格(4,2),单元格(80,16)).值=工作簿(xSourceWb).工作表(“输出表GPE”).范围(单元格(4,2),单元格(80,16))
'xSourceWb.Close
"完"
"以
结束Sub'

谢谢你,大本!就是这样!我移除了“工作簿”封套,它工作了:-)

复制/粘贴下面的响应以供将来阅读:
xSourceWb和xTargetWb已经是工作簿对象。不要把它们放在作业本里。也就是说,您不需要为此循环16小时前的BigBen

xSourceWb
xTargetWb
已经是
Workbook
对象了。不要将它们放在
工作簿中
。这就是说,您不需要为此循环。我会先替换
.Activate
Activeworkbook
的所有用法,但看起来您应该修改错误行以读取
xSourceWb.Worksheets(…
而不是
工作簿(xSourceWb)。工作表(…
因为
xSourceWb
已经表示工作簿了。An将派上用场。除此之外,还有一行,例如
Set-xsourcern=xSourceSt.Range(单元格(4,2),单元格(80,16))
将出错,除非
xSourceSt
处于活动状态,因为它不是完全限定的。