Excel 从其他工作簿复制/粘贴脚本时出现根本性错误
很抱歉,如果这让人觉得很轻率,但我已经花了8个小时用这个把我的头撞在墙上了。无论我尝试什么变体,这段代码都会不断抛出各种程度的错误。我很有能力,我举了很多例子,但都不管用。我开始认为我的工作簿中代码的位置有问题。我把它放在Module1中,我通常保存所有代码 实际问题-从弹出提示中选择文件后,将值从一个工作簿工作表复制/粘贴到另一个工作簿工作表。就这样。表的结构相同,但需要在目标工作表上向上移动5行 我已经尝试了很多不同类型的代码,当我尝试迭代到不同的东西时,您可以看到这些代码被注释掉了。它将无法正确引用打开的工作簿。不断抛出错误,就像我试图访问某个隐藏的黑暗数据库,而不是它旁边的文件 我尝试过很多不同的方法,但最终都会出现不同的错误。上面的代码给出了“运行时错误13”。在尝试复制代码的循环中的行上键入,mismatch 我认为这一切都源于excel无法正确引用打开的文件。即使它应该Excel 从其他工作簿复制/粘贴脚本时出现根本性错误,excel,vba,Excel,Vba,很抱歉,如果这让人觉得很轻率,但我已经花了8个小时用这个把我的头撞在墙上了。无论我尝试什么变体,这段代码都会不断抛出各种程度的错误。我很有能力,我举了很多例子,但都不管用。我开始认为我的工作簿中代码的位置有问题。我把它放在Module1中,我通常保存所有代码 实际问题-从弹出提示中选择文件后,将值从一个工作簿工作表复制/粘贴到另一个工作簿工作表。就这样。表的结构相同,但需要在目标工作表上向上移动5行 我已经尝试了很多不同类型的代码,当我尝试迭代到不同的东西时,您可以看到这些代码被注释掉了。它将无
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小时前的BigBenxSourceWb
和xTargetWb
已经是Workbook
对象了。不要将它们放在工作簿中
。这就是说,您不需要为此循环。我会先替换.Activate
和Activeworkbook
的所有用法,但看起来您应该修改错误行以读取xSourceWb.Worksheets(…
而不是工作簿(xSourceWb)。工作表(…
因为xSourceWb
已经表示工作簿了。An将派上用场。除此之外,还有一行,例如Set-xsourcern=xSourceSt.Range(单元格(4,2),单元格(80,16))
将出错,除非xSourceSt
处于活动状态,因为它不是完全限定的。