【发布时间】:2017-11-20 14:56:03
【问题描述】:
这篇文章是我之前post关于同一主题的一个更好的问题。
我正在尝试从 .xls 文件的第一张表中复制数据并将其粘贴到我的 .xlsm 文件中。如果 .xlsm 的“Sheet1”中没有数据,则将源数据粘贴到 .xlsm 的“Sheet1”中。但是,所有其他数据,都会创建一个新工作表并将其粘贴到该新创建的工作表中。
但是,目前,我的代码会打开 .xls 文件并停止。我尝试按照一些建议添加Stop,但这只是关闭了所有窗口。对于如何解决这个问题,我将不胜感激。如果我可以通过按一个按钮输入一个复制和粘贴命令,那就太好了。此代码将供客户使用,因此只需按一个按钮即可直观且易于使用。提前致谢。
Sub ImportData()
Dim wkbCrntWorkBook As Workbook
Dim wkbSourceBook As Workbook
Dim fNameAndPath As Variant
Set wkbCrntWorkBook = ActiveWorkbook
fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel 2007, *.xls; *.xlsx; *.xlsm; *.xlsa", Title:="Select File To Import")
If fNameAndPath = False Then Exit Sub
Call ReadDataFromCloseFile(fNameAndPath)
Set wkbCrntWorkBook = Nothing
Set wkbSourceBook = Nothing
End Sub
Sub ReadDataFromCloseFile(filePath As Variant)
Application.ScreenUpdating = False
Dim src As Workbook
Set src = Workbooks.Open(filePath, False, False)
Stop
Application.Visible = False
' COPY DATA FROM SOURCE (CLOSE WORKGROUP) TO THE DESTINATION WORKBOOK.
' GET THE TOTAL ROWS FROM THE SOURCE WORKBOOK.
Dim srcRng As Range ' last line from source
Set srcRng = src.Worksheets("Sheet1").Range("A1",
src.Worksheets("Sheet1").Range("A1")).End(xlDown)
Set srcRng = srcRng.End(xlToRight)
If Worksheets("Sheet1").Range("A1") = "" Then
Worksheets("Sheet1").Range("A1") = srcRng
Else:
Worksheets.Add After:=(Sheets.Count)
Worksheets("Sheet" & Sheets.Count).Range("A1") = srcRng
End If
' CLOSE THE SOURCE FILE.
src.Close False ' FALSE - DON'T SAVE THE SOURCE FILE.
Set src = Nothing
Application.Visible = True
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
请删除
Stop和Application.Visible = False并告诉我们会发生什么。 -
您使用的是什么版本的 Excel,2013?
-
@ScottHoltzman -
Worksheets.Add After:=(Sheets.Count)存在调试问题 -
@Profex - 我使用的是 2007
-
确保你使用
src.Worksheets