将另一个传播sheet 中的单元格复制(导入)到活动sheet
Copy (Import) cells from another spreadsheet into active sheet
我是一个非常新手 VBA 的程序员。我只能在工作之间的停机时间才能做到这一点。无论如何,我一直在为自己和同事开发事件跟踪器,并在我用新功能更新它时帮助他们,我一直在尝试添加 "Import" 功能。
问题是每个月都有一份单独的工作sheet(1 月到 12 月和另一个 sheet 加班)。代码需要从正确的 sheet 中复制并粘贴到具有相同名称的 sheet 中。
不过我还不能完全让它工作。这是我目前所拥有的:
'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,啊哈!)但是我很难找到一个周末坐下来做当我经常加班的时候。
您的代码对于初学者来说一点也不差。假设您要复制到另一个 sheet 中的相同范围,您的 for 循环中只需要一行。
myRng.Copy Destination:=MyWB.Worksheets(myRng.Name).Range("A6:AV45")
这将复制所有内容,包括格式。
请尝试以下操作:
If OpenFileName = "False" then
我在我的机器上进行了测试,如果你 DIM OpenFileName as String 而不是它会传递 "False" 到 OpenFileName 如果你 select 什么都没有。
PS:OpenFileName = False 和 OpenFileName = "False" 都在我这边工作,有人知道答案吗?
抱歉,我没有及时回复您给我的建议。所说的一切都有帮助。
Paul,作为变体列出是正确的方法,而 Thomas,“”也帮助克服了错误。不幸的是,在我完成这些之后,我遇到了 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 循环(这是表格的布局方式。我毕竟不需要复制数据表,因为这可能会导致问题。
感谢您的帮助
我是一个非常新手 VBA 的程序员。我只能在工作之间的停机时间才能做到这一点。无论如何,我一直在为自己和同事开发事件跟踪器,并在我用新功能更新它时帮助他们,我一直在尝试添加 "Import" 功能。
问题是每个月都有一份单独的工作sheet(1 月到 12 月和另一个 sheet 加班)。代码需要从正确的 sheet 中复制并粘贴到具有相同名称的 sheet 中。
不过我还不能完全让它工作。这是我目前所拥有的:
'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,啊哈!)但是我很难找到一个周末坐下来做当我经常加班的时候。
您的代码对于初学者来说一点也不差。假设您要复制到另一个 sheet 中的相同范围,您的 for 循环中只需要一行。
myRng.Copy Destination:=MyWB.Worksheets(myRng.Name).Range("A6:AV45")
这将复制所有内容,包括格式。
请尝试以下操作:
If OpenFileName = "False" then
我在我的机器上进行了测试,如果你 DIM OpenFileName as String 而不是它会传递 "False" 到 OpenFileName 如果你 select 什么都没有。
PS:OpenFileName = False 和 OpenFileName = "False" 都在我这边工作,有人知道答案吗?
抱歉,我没有及时回复您给我的建议。所说的一切都有帮助。
Paul,作为变体列出是正确的方法,而 Thomas,“”也帮助克服了错误。不幸的是,在我完成这些之后,我遇到了 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 循环(这是表格的布局方式。我毕竟不需要复制数据表,因为这可能会导致问题。
感谢您的帮助