Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
VBA Excel宏打开工作簿,但所有内容都冻结,因为该文件试图运行自己的宏_Vba_Excel - Fatal编程技术网

VBA Excel宏打开工作簿,但所有内容都冻结,因为该文件试图运行自己的宏

VBA Excel宏打开工作簿,但所有内容都冻结,因为该文件试图运行自己的宏,vba,excel,Vba,Excel,因此,我有一个宏,它应该转到一个文件夹,循环遍历文件夹中的每个工作簿,并提取某些数据。文件夹中的数据包含不同年份的文件,较新的文件工作正常。但是,当我打开一些旧文件时,我遇到了一个问题。较旧的文件保存为.xls文件,但当您打开它们时,唯一显示“EnableMacros”的工作表,并警告用户必须更改其安全设置才能启用宏。由于我的选项和信任中心设置被设置为允许宏不受限制地运行,因此当我正常打开工作簿时,“EnableMacros”选项卡会显示一秒钟,然后会被包含数据的正常选项卡所取代。但是,当我让宏

因此,我有一个宏,它应该转到一个文件夹,循环遍历文件夹中的每个工作簿,并提取某些数据。文件夹中的数据包含不同年份的文件,较新的文件工作正常。但是,当我打开一些旧文件时,我遇到了一个问题。较旧的文件保存为.xls文件,但当您打开它们时,唯一显示“EnableMacros”的工作表,并警告用户必须更改其安全设置才能启用宏。由于我的选项和信任中心设置被设置为允许宏不受限制地运行,因此当我正常打开工作簿时,“EnableMacros”选项卡会显示一秒钟,然后会被包含数据的正常选项卡所取代。但是,当我让宏打开文件时,程序就会停止,打开的工作簿只显示EnableMacros选项卡,不会更新以显示包含数据的工作表。我不知道如何解决这个问题。这一切都很复杂,因为我无法更改我正在打开的工作簿中的任何内容,因为它们是受保护的。帮忙

我正在使用电子表格专家提供的宏浏览文件夹中的文件,并进行自己的修改,以提取我想要的数据:

Sub LoopAllExcelFilesInFolder()
'PURPOSE: To loop through all Excel files in a user specified folder and perform a set task on them
'SOURCE: www.TheSpreadsheetGuru.com

Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim FldrPicker As FileDialog

'transfer values with range
Dim rngcopySA As Range

'Optimize Macro Speed
  Application.ScreenUpdating = False
  Application.EnableEvents = False
  Application.Calculation = xlCalculationManual

'Retrieve Target Folder Path From User
  Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)

    With FldrPicker
      .Title = "Select A Target Folder"
      .AllowMultiSelect = False
        If .Show <> -1 Then GoTo NextCode
        myPath = .SelectedItems(1) & "\"
    End With

'In Case of Cancel
NextCode:
  myPath = myPath
  If myPath = "" Then GoTo ResetSettings

'Target File Extension (must include wildcard "*")
  myExtension = "*.xls*"

'Target Path with Ending Extention
  myFile = Dir(myPath & myExtension)

'Loop through each Excel file in folder
  Do While myFile <> ""
    'Set variable equal to opened workbook
      Set wb = Workbooks.Open(Filename:=myPath & myFile)

    'Ensure Workbook has opened before moving on to next line of code
      DoEvents

正如我之前所说的,这对于较新的文件来说很好,只有那些具有“EnableMacros”选项卡的较旧文件才有问题。我还尝试过查看文件夹中的每个旧.xls文件,并点击Convert按钮以退出兼容模式,因此将所有文件更改为.xlsm(并将文件夹选择器代码更改为查找.xlsm文件)但这也有完全相同的问题。

设置电子表格的人使用
xlVeryHidden
阻止人们在不使用宏的情况下取消隐藏表格

要选择一个隐藏的图纸,必须首先使其可见,这很简单

Sheets("Service Areas").Visible = True 
然后,您应该能够选择图纸

请注意,即使图纸被隐藏,您仍然可以选择数据并复制它,因此您可以更改导致此问题的代码:

'Copy Range with Membership Data to this file
  'transfer values with range
  Set rngcopySA = wb.Worksheets("Service Areas").Range("A13:E13", wb.Worksheets("Service Areas").Range("A13:E13").End(xlDown))

  ThisWorkbook.Sheets("Old SA Files").Range("A" & Rows.count).End(xlUp).Offset(1).Resize(rngcopySA.Rows.count, rngcopySA.Columns.count).Cells.Value = rngcopySA.Cells.Value

请注意,完全没有
Select
,这可以避免屏幕闪烁和闪烁。有关避免选择的更多详细信息,请参阅。

Ok,这样
工作表(“服务区域”).Visible=True
工作正常,现在当一切停止时,该工作表可见。好极了新的错误消息显示“应用程序定义的或对象定义的错误”。对于新文件,一切仍然有效。该错误消息出现在
Set rngcopySA=wb.Worksheets(“服务区域”).Range(“A13:E13”,Range(“A13:E13”).End(xlDown))行
。我已将图纸参考添加到该范围中-由于我们没有激活特定范围,我们必须确保每个范围都具有适当的资格谢谢!我的代码现在有一些其他问题,但我认为这部分已经解决了!
'Copy Range with Membership Data to this file
  'transfer values with range
  Set rngcopySA = wb.Worksheets("Service Areas").Range("A13:E13", wb.Worksheets("Service Areas").Range("A13:E13").End(xlDown))

  ThisWorkbook.Sheets("Old SA Files").Range("A" & Rows.count).End(xlUp).Offset(1).Resize(rngcopySA.Rows.count, rngcopySA.Columns.count).Cells.Value = rngcopySA.Cells.Value