VBA - 创建新工作表并插入数据

时间:2017-11-21 16:02:14

标签: excel vba excel-vba

昨天我问了一个问题,但是,我的代码仅适用于两张纸。我将数据粘贴到新创建的工作表中时出现问题。我的代码将创建第二张表并将数据粘贴到其中。但是,当我尝试第三张纸时,它会创建纸张,但会将数据插入第二张纸。这是我的代码:

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”而不是新创建的工作表中。

提前感谢您的帮助。

2 个答案:

答案 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
相关问题