OGI-刘杰 2024-09-10 18:18 采纳率: 40%
浏览 1

如何让宏只在其对应的工作簿中运行,同时也不影响我打开其他的工作簿

如何让宏只在其对应的工作簿中运行。我有一个宏,作用是合并更新数据。当只有这个宏所在的工作簿打开时,数据更新是正常的。
但当我打开其他工作簿的时候,数据就经常会更新到其他的工作簿里了。
这个是我不想出现的。
我想让数据只在我指定的那个工作簿里更新。同时也不影响我打开其他的工作簿工作,该怎么改呢

代码如下:

Sub 合并目录所有工作簿全部工作表()
 
Dim MP, MN, AW, Wbn, wn
 
Dim Wb As Workbook
 
Dim i, a, b, d, c, e
 
Application.ScreenUpdating = False
 
MP = ActiveWorkbook.Path
 
MN = Dir(MP & "\" & "*.xls")
 
AW = ActiveWorkbook.Name
 
Num = 0
 
e = 1
 
Do While MN <> ""
 
If MN <> AW Then
 
Set Wb = Workbooks.Open(MP & "\" & MN)
 
a = a + 1
 
With Workbooks(1).ActiveSheet
 
For i = 1 To Sheets.Count
 
If Sheets(i).Range("a1") <> "" Then
 
Wb.Sheets(i).Range("a1").Resize(1, Sheets(i).UsedRange.Columns.Count).Copy .Cells(1, 1)
 
d = Wb.Sheets(i).UsedRange.Columns.Count
 
c = Wb.Sheets(i).UsedRange.Rows.Count - 1
 
wn = Wb.Sheets(i).Name
 
.Cells(1, d + 1) = "表名"
 
.Cells(e + 1, d + 1).Resize(c, 1) = MN & wn
 
e = e + c
 
Wb.Sheets(i).Range("a2").Resize(c,d).Copy .Cells(.Range("a1048576").End(xlUp).Row + 1, 1)
 
End If
 
Next
 
Wbn = Wbn & Chr(13) & Wb.Name
 
Wb.Close False
 
End With
 
End If
 
MN = Dir
 
Loop
 
Range("a1").Select
 
Application.ScreenUpdating = True
 
MsgBox "共合并了" & a & "个工作薄下全部工作表。如下:" & Chr(13) & Wbn, vbInformation, "提示"
 
End Sub
  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-10 18:19
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的问题主要是关于宏如何在特定的工作簿中运行,同时不影响其他工作簿的操作。根据你的需求,这里有几个可能的解决方案:

    解决方案一:使用工作簿的打开和关闭事件

    你可以使用Excel的VBA(Visual Basic for Applications)来编写一个宏,使其仅在特定的工作簿中运行。同时,你可以在打开其他工作簿时暂停宏的运行。具体实现方法是通过工作簿的打开(Open)和关闭(Deactivate)事件来管理宏的运行。以下是简单的代码示例:

    Private Sub Workbook_Open()
        ' 当工作簿打开时,启动宏
        Call 合并目录所有工作簿全部工作表
    End Sub
    
    Private Sub Workbook_Deactivate()
        ' 当工作簿失去焦点或关闭时,暂停宏的运行
    End Sub
    

    这段代码假设你的宏名称是合并目录所有工作簿全部工作表。每当这个工作簿被打开时,它会运行这个宏。当工作簿失去焦点或关闭时,它会暂停宏的运行。这可以确保宏只在特定的工作簿中运行。

    解决方案二:限制宏的作用范围

    对于你的现有代码,你可以通过添加一些条件判断来限制宏的作用范围。例如,你可以在循环中添加一个条件判断来检查当前工作簿是否是目标工作簿。如果是目标工作簿,则执行合并操作;否则,跳过该工作簿。这样,即使你打开了其他工作簿,宏也只会在目标工作簿中运行。这个思路需要对你的现有代码进行修改和增强。具体的实现需要你根据自己的需求和逻辑来进行调整。这个思路需要结合你对目标工作簿的判断条件来进行实施。例如,你可以通过工作簿的名称或者路径来判断是否为目标工作簿。然后,在循环中增加相应的条件判断语句来控制宏的运行。需要注意的是,这种方法需要你手动指定目标工作簿的名称或路径信息。这些判断可以在循环开始时或者数据复制之前进行,根据实际需求进行选择和设计。在增加条件判断后,需要确保代码的逻辑和流程的合理性,避免因为逻辑错误导致数据合并出现问题。同时,还需要注意代码的健壮性和错误处理机制,确保在异常情况发生时能够妥善处理并给出相应的提示信息。这样可以帮助你更好地控制宏的运行范围和行为,以满足你的需求。希望这些解决方案能够帮助你解决问题!如果你还有其他问题或需要进一步的帮助,请随时提问!

    评论

报告相同问题?

问题事件

  • 创建了问题 9月10日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?