Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 切换到其他工作簿_Excel_Vba - Fatal编程技术网

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你读过我上面的答案吗?有什么反馈吗?我看到你以前在这里得到的任何答案都没有标记为“答案”,你知道如何标记为“答案”吗?