当前位置: 首页 > 知识库问答 >
问题:

VBA代码在新工作簿中工作,但不是我希望它在其中工作的工作簿

壤驷华辉
2023-03-14

我有一个工作簿,宏不起作用,基本上只是从单元格A3上下复制每个工作表中的值,然后连续将每个值粘贴到新的摘要工作表中。

当我真的创建了一个新工作簿,并将我所有的工作表复制粘贴到新工作簿中时,一切都很好。但如果我继续写旧的工作手册,就会出现错误

选择工作表类的方法失败

在我使用与我复制的完全相同的工作表创建的其他2个工作簿中,它没有失败...为什么是这个特定的工作簿?

我关闭所有其他工作簿以避免ActiveWorkBook出错-也许这不是最好的方式,但它不应该影响这一点。

Option Explicit

Public Sub SelectItemsEstimate()
    Dim ws As Worksheet
    Dim LastRow As Long

    For Each ws In ActiveWorkbook.Worksheets
        If ws.Name <> "Business Unit Key" _
            And ws.Name <> "dv" And ws.Name <> "cc" And ws.Name <> "wer" And ws.Name <> "dafd" _
            And ws.Name <> "Master Sheet Summary Data" _
            And ws.Name <> "Query for Macro" _
            And ws.Name <> "Query for Macro 2 with Format" _
            And ws.Name <> "Paste all values" _
            And ws.Name <> "Summary" Then

            Worksheets(ws.Name).Select
            Range("A3", Range("A3").SpecialCells(xlCellTypeLastCell)).Select
            Selection.Copy

            With ActiveWorkbook.Worksheets("Summary")
                LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' get last row with data in column "A"
                ' paste
                .Range("A" & LastRow + 1).PasteSpecial Paste:=xlPasteValues
            End With
        End If
    Next
End Sub

共有1个答案

宁浩博
2023-03-14

选择工作表类的方法失败

这可能是由工作表可见性引起的-excel无法选择隐藏或非常隐藏的工作表。尝试此代码检查某些工作表是否不可见

Sub CheckSheetVisibility()
Dim ws As Worksheet
Dim wb As Workbook

Set wb = ThisWorkbook

For Each ws In wb.Sheets
    If Not ws.Visible = xlSheetVisible Then ws.Visible = xlSheetVisible
Next
End Sub

下面介绍如何重构代码以避免ActiveWorkbook/ActiveSheet语句出现问题,并且不使用。选择/。激活方法:

Sub SelectItemsEstimate()
Dim ws As Worksheet
Dim wb As Workbook
Dim wsToCopyTo As Worksheet
Dim LastRow As Long

Set wb = ThisWorkbook
Set wsToCopyTo = wb.Sheets("Summary")

For Each ws In wb.Sheets
    If ws.Name <> "Business Unit Key" _
            And ws.Name <> "dv" And ws.Name <> "cc" And ws.Name <> "wer" And ws.Name <> "dafd" _
            And ws.Name <> "Master Sheet Summary Data" _
            And ws.Name <> "Query for Macro" _
            And ws.Name <> "Query for Macro 2 with Format" _
            And ws.Name <> "Paste all values" _
            And ws.Name <> "Summary" Then

            With ws
                Range(.Cells(3, 1), .Cells(Rows.Count, 1).End(xlUp)).Copy
            End With

            wsToCopyTo.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues

    End If
Next

End Sub
 类似资料:
  • 我使用这段代码将工作簿中的每一张工作表复制到一个新的工作簿中,它工作得很好,但它颠倒了工作表的顺序,是否有任何办法阻止它这样做? 我正在复制所有的工作表,这样我就可以将它保存为不同的文件扩展名,这是我发现唯一有效的方法。

  • 问题内容: 我正在创建一个日期时间字符串,如下所示: 使用以下代码,我在Firefox中获得无效的日期,但在Chrome中正常运行 在firefox中,date1给我一个无效的日期,但是在chrome中,它的工作正常,主要原因是什么? 问题答案: 您无法以任何方式实例化日期对象。它必须以特定的方式。以下是一些有效的示例: 要么

  • 所以在问这个之前,我搜索并发现了一些与我在这里想要做的相似的事情。 基本上我有工作簿AlphaMaster。这个工作簿是一个模板,我想用它来创建每周的新工作簿。 在本工作簿中,有名为“周一至周六”的工作表,以及带有相应日期的周一、周二等其他工作表。 我创建了一个在打开工作簿时加载的表单。我想要的是当我单击表单运行时,它将: > 将代码保存模板作为新工作簿运行 根据userform1的输入重命名工作

  • 当我运行此命令时,java--version仍然在cmd终端中工作,但它们显示我添加您的路径java_home。我不确定为什么给我这个错误。我正在使用vs代码

  • 作为预先警告,我是使用VBA的新手。 我已经拼凑了以下代码来执行以下操作:1。找到工作表“intrastat”2。复制此工作表3的使用范围。作为值粘贴到新工作簿4中。重新格式化B5栏中的日期。将工作簿保存在原始工作簿的位置。 然而,只有当我将宏保存在原始工作簿中时,这才起作用。我需要的是能够有宏保存在一个不同的工作簿和运行宏,我需要能够选择“原始”工作簿从一个文件位置在我的硬盘。 有什么想法吗?

  • 我使用一个包在Flutter中,它可以在Android上正常工作,但是当在ios模拟器上运行我的项目时,我在控制台中收到错误。 当我运行时,我得到以下错误,由于内容长度,我删除了错误的一些重复部分。 我在上面的错误中找不到任何相关消息这是 这就是我与pusher的连接方式 但在我注释掉上述文件和<code>pusher_client:^2.0.0<code>中的<code>时。yaml然后运行<c