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_Export_Export To Excel - Fatal编程技术网

Vba 正在尝试将工作表中的范围复制到新工作簿中。自学资料

Vba 正在尝试将工作表中的范围复制到新工作簿中。自学资料,vba,excel,export,export-to-excel,Vba,Excel,Export,Export To Excel,以下是我所拥有的: Sub exportDataAM() Dim wbS As Workbook, wbT As Workbook Dim wsS As Worksheet, wsT As Worksheet Set wbS = ThisWorkbook 'workbook that holds this code Set wsS = wbS.Worksheets("Recap").Range("A1:R5") wsS.Copy Set wbT = ActiveWorkbook 'assig

以下是我所拥有的:

Sub exportDataAM()
Dim wbS As Workbook, wbT As Workbook
Dim wsS As Worksheet, wsT As Worksheet

Set wbS = ThisWorkbook 'workbook that holds this code
Set wsS = wbS.Worksheets("Recap").Range("A1:R5")

wsS.Copy
Set wbT = ActiveWorkbook 'assign reference asap

Set wsT = wbT.Worksheets("Recap").Range("A1:R5")
wsT.Name = "Recap" 'rename sheet

wbT.SaveAs wbS.Path & "\" & "Recap AM" & Format(Now, " dd-mm-yyyy ") 'save new workbook
End Sub
我得到了一个类型不匹配,这对于第6行的.Range来说没有意义。我知道还有其他的方法可以做到这一点,但是如果没有.Range,这是很好的,我想弄清楚为什么会这样


在此方面的任何帮助都将不胜感激。

您已将变量
wsS
wsT
声明为工作表。但是,您可以尝试将范围添加到变量中。这将导致不匹配


将变量声明为
范围
,或仅将工作表添加到变量中。

以下操作应有效

Private Sub Copy()
Set newBook = Workbooks.Add
With newBook
    .Title = "Recap Am"
    .Subject = "RFQ"
    .SaveAs Filename:="Recap.xls"
  Dim rng As Excel.Range

Set rng = ThisWorkbook.Worksheets("SheetName").Cells.SpecialCells (xlCellTypeVisible)

rng.Copy newBook.Worksheets("Sheet1").Range("A1")

End With
End Sub

好的,非常感谢你的帮助。我想我还是很困惑。。为什么我可以将.worksheets添加到变量wbS,而不是.range?我想基本上是一样的。对不起,我不是专业人士,我对编码相当熟悉,但对VB比较新。我之所以这么说是因为,Workbook.worksheets().range()可以工作?它可以归结为变量声明。当您将
Dim wsS写入工作表时,系统会为工作表分配内存。当它收到一个范围而不是工作表时,会抛出一个错误。声明后,变量可以使用您描述的层次结构。你可以写“wsS.Range”(“A1”)“没问题。您不能将范围添加到变量中。这有意义吗?是的,确实有意义,我想我唯一的困惑是为什么我可以将.Worksheets添加到wbT中,而wbT已经声明为工作簿?很抱歉问了一些很明显的问题,但这确实帮助我理解这个困境,我真的很感激。我应该这样做吗?
Set rcS=wsS.Range(“A1:E9”)
Yah我不知道该尝试什么,我已经尝试了一些方法。我终于得到了只复制到新工作簿的范围,但它没有格式。我会继续搞乱它,查看其他帖子。谢谢你的帮助