昨天我问了一个问题,但是,我的代码仅适用于两张纸。我将数据粘贴到新创建的工作表中时出现问题。我的代码将创建第二张表并将数据粘贴到其中。但是,当我尝试第三张纸时,它会创建纸张,但会将数据插入第二张纸。这是我的代码:
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 ReadDataFromSourceFile(fNameAndPath)
Set wkbCrntWorkBook = Nothing
Set wkbSourceBook = Nothing
End Sub
Sub ReadDataFromSourceFile(filePath As Variant)
Application.ScreenUpdating = False
Dim src As Workbook
Set src = Workbooks.Open(filePath, False, 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
With src.Worksheets("Sheet1")
Set srcRng = .Range(.Range("A1"), .Range("A1").End(xlDown).End(xlToRight))
End With
With ThisWorkbook
If .Worksheets(.Sheets.Count).Range("A1") = "" Then
.Worksheets(.Sheets.Count).Range("A1").Resize(srcRng.Rows.Count, srcRng.Columns.Count).Value = srcRng.Value
Else:
.Worksheets.Add After:=Worksheets(Sheets.Count)
.Worksheets(Sheets.Count).Range("A1").Resize(srcRng.Rows.Count, srcRng.Columns.Count).Value = srcRng.Value
End If
End With
' CLOSE THE SOURCE FILE.
src.Close False ' FALSE - DON'T SAVE THE SOURCE FILE.
Set src = Nothing
End Sub
因此,简而言之,当我选择第一个文件和第二个文件时,我的代码适用于第一个工作表。但是,当我将第三个文件插入第三个工作表时,它会创建一个新工作表并将数据放在“Sheet2”而不是新创建的工作表中。
提前感谢您的帮助。
答案 0 :(得分:0)
如果你这样改变它,它有效吗?更改显式声明要处理的工作表。我不能说我知道为什么Count函数会给你一个不正确的值。
Dim wksNew as Excel.Worksheet
...
With ThisWorkbook
If .Worksheets(.Sheets.Count).Range("A1") = "" Then
.Worksheets(.Sheets.Count).Range("A1").Resize(srcRng.Rows.Count, srcRng.Columns.Count).Value = srcRng.Value
Else:
Set wksNew = .Worksheets.Add After:=Worksheets(Sheets.Count)
wksNew.Range("A1").Resize(srcRng.Rows.Count, srcRng.Columns.Count).Value = srcRng.Value
End If
End With
答案 1 :(得分:0)
我能够通过将Sheets.Count
表示为整数来解决它。
Dim n as Double
Dim wksNew as Excel.Worksheet
With ThisWorkbook
If .Worksheets(.Sheets.Count).Range("A1") = "" Then
.Worksheets(.Sheets.Count).Range("A1").Resize(srcRng.Rows.Count, srcRng.Columns.Count).Value = srcRng.Value
Else:
Set wksNew = .Worksheets.Add(After:=.Worksheets(.Sheets.Count))
n = .Sheets.Count
.Worksheets(n).Range("A1").Resize(srcRng.Rows.Count, srcRng.Columns.Count).Value = srcRng.Value
End If
End With