将单元格从另一个电子表格复制(导入)到活动工作表

时间:2015-02-04 21:00:22

标签: excel vba excel-vba import copy

我是一名非常新手的VBA程序员。我只能在工作之间的停工期间做到这一点。无论如何,我一直在为自己和同事制作事件跟踪器,并在我使用新功能更新它时帮助他们,我一直在尝试添加"导入"特征。

事情是每个月都有一个单独的工作表(1月到12月和另一个加班的工作表称为OT)。代码需要从正确的工作表中复制并粘贴到具有相同名称的工作表中。

但是,我无法让它工作。这就是我到目前为止所做的:

'Import Incident
Sub ImportIncidents()

Dim OpenFileName As String
Dim wb As Workbook
Dim ws As Worksheet
Dim myRng As Range
Dim MyWB As Workbook

'store the current workbook in a variable
Set MyWB = ActiveWorkbook

'Select and Open workbook
OpenFileName = Application.GetOpenFilename

If OpenFileName = False Then
    MsgBox ("Import Failed!")
    Exit Sub
End If

Set wb = Workbooks.Open(OpenFileName, UpdateLinks:=0)

'Get data
wb.Activate
For Each ws In wb.Worksheets

                Set myRng = ws.Range("A6:AV45")
                myRng.Copy
                MyWB.Activate


                Set myRng =

                wb.Activate

Next


MsgBox ("Import Complete!")

End Sub

如果有人能帮助我,这将是惊人的。我确信在我正确完成VBA书之后我能够掌握它(VBA for Dummies,啊!)但是我很难找到一个周末坐下来当我做很多加班时这样做

3 个答案:

答案 0 :(得分:0)

您的代码对初学者来说并不坏。假设您要复制到另一个工作表中的相同范围,则只需要在for循环中使用一行。

myRng.Copy Destination:=MyWB.Worksheets(myRng.Name).Range("A6:AV45")

这将复制包括格式在内的所有内容。

答案 1 :(得分:0)

请尝试以下方法:

If OpenFileName = "False" then

我在我的机器上进行了测试,如果您将DIM OpenFileName作为String,那么如果您不选择任何内容,它会将“False”传递给OpenFileName。

PS:OpenFileName = False和OpenFileName =“False”都在我的工作上,所以有人得到了答案吗?

答案 2 :(得分:0)

道歉,我没有回应你给我的建议。所说的一切都有所帮助。

保罗,作为Variant上市是正确的方式,托马斯,""也帮助克服了错误。不幸的是,在我完成这些操作后,我遇到了400错误,因此我遇到了一些问题。

最后,我能够弄明白并且以下代码有效......以非常粗暴的方式:

'Import Incident
Sub ImportIncidents()

Dim OpenFileName As Variant
Dim wb As Workbook
Dim ws As Worksheet
Dim myRng As Range
Dim MyWB As Workbook

'store the current workbook in a variable
Set MyWB = ActiveWorkbook

'Select and Open workbook
OpenFileName = Application.GetOpenFilename

If OpenFileName = False Then
    MsgBox ("Import Failed!")
    Exit Sub
End If

Set wb = Workbooks.Open(OpenFileName, UpdateLinks:=0)

'Import Data
wb.Activate
Application.DisplayAlerts = False
For Each ws In wb.Worksheets


                Set myRng = ws.Range("A6:AV45")
                    myRng.Copy Destination:=MyWB.Worksheets(myRng.Parent.Name).Range("A6:AV45")
                    'ActiveWorkbook.Close = False
                    MyWB.Activate

Next
Application.DisplayAlerts = True
    MsgBox ("Import Complete!")

End Sub

这是一个很好的开始,我现在正在努力让它只通过链接到一年中几个月的for循环来浏览我想要的纸张(这就是纸张的布局方式。我不需要毕竟复制数据表可能会导致问题。)

感谢您的帮助