Excel 切换到其他工作簿
我正在尝试构建一个代码,该代码将切换到另一个打开的工作簿并从那里复制数据Excel 切换到其他工作簿,excel,vba,Excel,Vba,我正在尝试构建一个代码,该代码将切换到另一个打开的工作簿并从那里复制数据 Dim source_worksheet As Worksheet Set source_worksheet = ThisWorkbook.Worksheets("Sheet2") Dim target_worksheet As Worksheet Set target_worksheet = ActiveWorkbook.Worksheets("Sheet1") 'Define
Dim source_worksheet As Worksheet
Set source_worksheet = ThisWorkbook.Worksheets("Sheet2")
Dim target_worksheet As Worksheet
Set target_worksheet = ActiveWorkbook.Worksheets("Sheet1")
'Defines what sheet you are copying
source_worksheet.Copy After:=target_worksheet
我可以使用工作簿(1)和工作簿(2),但问题是这个索引会随着打开工作簿的顺序而变化
所以我想把if函数放进去,但不起作用。下面是代码
If ActiveWorkbook = Workbooks(1) Then
Workbooks(2).Activate
Else
Workbooks(1).Activate
End If
但它给出了错误438,对象不支持属性或方法
您能帮我调试一下吗?您可以使用目标对象的名称,例如:
Workbooks("MyBook.xls").Worksheets("Sheet1").Activate
可以使用目标对象的名称,例如:
Workbooks("MyBook.xls").Worksheets("Sheet1").Activate
尝试下面的代码,复制>>粘贴的最后一部分只是一个示例,说明如何将
范围(“A1:E10”)
从DestWB
中的“Sheet1”复制到ThisWB
“Sheet1”(无需使用激活或选择)-您应该能够非常轻松地修改它
代码
Option Explicit
Sub CopyThisWorkBOok()
Dim ThisWB As Workbook
Dim DestWB As Workbook
Dim wb As Workbook
Dim i As Long
i = Application.Workbooks.Count
If i <> 2 Then ' check if number of open workbooks is 2
MsgBox "You need to have 2 open workbooks, currently there are " & i & " open workbooks", vbCritical
Exit Sub
Else
For Each wb In Application.Workbooks ' loop through all open workbooks
If wb.Name <> ThisWorkbook.Name Then
Set DestWB = wb
Else
Set ThisWB = ThisWorkbook
End If
Next wb
End If
' from here you start the part where you copy >> paste, there is no need to `Activate` or `Select` anything
DestWB.Worksheets("Sheet1").Range("A1:E10").Copy Destination:=ThisWB.Worksheets("Sheet1").Range("A2")
End Sub
选项显式
子副本此工作簿()
将此WB设置为工作簿
将WB设置为工作簿
将wb设置为工作簿
我想我会坚持多久
i=Application.workbook.Count
如果是2,则检查打开的工作簿数是否为2
MsgBox“您需要有2个打开的工作簿,当前有”&i&“打开的工作簿”,vbCritical
出口接头
其他的
对于应用程序中的每个wb。工作簿在所有打开的工作簿中循环
如果wb.Name ThisWorkbook.Name,则
设置DestWB=wb
其他的
设置ThisWB=thishworkbook
如果结束
下一个wb
如果结束
'从这里开始复制>>粘贴的部分,不需要'激活'或'选择'任何内容
DestWB.工作表(“Sheet1”).范围(“A1:E10”).复制目的地:=此WB.工作表(“Sheet1”).范围(“A2”)
端接头
尝试下面的代码,复制>>粘贴的最后一部分只是一个示例,说明如何将范围(“A1:E10”)
从DestWB
中的“Sheet1”复制到ThisWB
“Sheet1”(无需使用激活或选择),您应该能够非常轻松地修改它
代码
Option Explicit
Sub CopyThisWorkBOok()
Dim ThisWB As Workbook
Dim DestWB As Workbook
Dim wb As Workbook
Dim i As Long
i = Application.Workbooks.Count
If i <> 2 Then ' check if number of open workbooks is 2
MsgBox "You need to have 2 open workbooks, currently there are " & i & " open workbooks", vbCritical
Exit Sub
Else
For Each wb In Application.Workbooks ' loop through all open workbooks
If wb.Name <> ThisWorkbook.Name Then
Set DestWB = wb
Else
Set ThisWB = ThisWorkbook
End If
Next wb
End If
' from here you start the part where you copy >> paste, there is no need to `Activate` or `Select` anything
DestWB.Worksheets("Sheet1").Range("A1:E10").Copy Destination:=ThisWB.Worksheets("Sheet1").Range("A2")
End Sub
选项显式
子副本此工作簿()
将此WB设置为工作簿
将WB设置为工作簿
将wb设置为工作簿
我想我会坚持多久
i=Application.workbook.Count
如果是2,则检查打开的工作簿数是否为2
MsgBox“您需要有2个打开的工作簿,当前有”&i&“打开的工作簿”,vbCritical
出口接头
其他的
对于应用程序中的每个wb。工作簿在所有打开的工作簿中循环
如果wb.Name ThisWorkbook.Name,则
设置DestWB=wb
其他的
设置ThisWB=thishworkbook
如果结束
下一个wb
如果结束
'从这里开始复制>>粘贴的部分,不需要'激活'或'选择'任何内容
DestWB.工作表(“Sheet1”).范围(“A1:E10”).复制目的地:=此WB.工作表(“Sheet1”).范围(“A2”)
端接头
根据您尝试执行的操作,说明不太清楚,您可以使用此代码的变体。您可以将包含VBA的工作簿定义为“ThisWorkBook”,然后从那里开始
Dim source_worksheet As Worksheet
Set source_worksheet = ThisWorkbook.Worksheets("Sheet2")
Dim target_worksheet As Worksheet
Set target_worksheet = ActiveWorkbook.Worksheets("Sheet1")
'Defines what sheet you are copying
source_worksheet.Copy After:=target_worksheet
根据您试图执行的操作,描述不是很清楚,您可以使用此代码的变体。您可以将包含VBA的工作簿定义为“ThisWorkBook”,然后从那里开始
Dim source_worksheet As Worksheet
Set source_worksheet = ThisWorkbook.Worksheets("Sheet2")
Dim target_worksheet As Worksheet
Set target_worksheet = ActiveWorkbook.Worksheets("Sheet1")
'Defines what sheet you are copying
source_worksheet.Copy After:=target_worksheet
(a) 这不是一个好办法。(b) 如果ActiveWorkbook.Name=Workbooks(1),您可以使用来解决眼前的问题。Name-Then
(c)不要这样做。(d) 今天看@YowE3K搞笑,你玩得很开心:)@ShaiRado-一个简单的bug需要修复,但我看到更多的问题因此而来。唉,这不是一个好办法。(b) 如果ActiveWorkbook.Name=Workbooks(1),您可以使用来解决眼前的问题。Name-Then
(c)不要这样做。(d) 今天看@YowE3K搞笑,你玩得很开心:)@ShaiRado-一个简单的bug需要修复,但我看到更多的问题因此而来。叹气。@Soura Chatterjee你读过我上面的答案了吗?有什么反馈吗?我看到你以前在这里得到的任何答案都没有标记为“答案”,你知道如何标记为“答案”吗?@Soura Chatterjee你读过我上面的答案吗?有什么反馈吗?我看到你以前在这里得到的任何答案都没有标记为“答案”,你知道如何标记为“答案”吗?