【问题标题】:Excel after saving 10 files give me error保存10个文件后的Excel给我错误
【发布时间】:2016-03-28 16:10:04
【问题描述】:

我创建了一个在单击按钮上启动的脚本,因此它从路径和格式加载 CSV 文件,然后保存它。因为我有来自 1...10000 的文件,所以我制作了 1.txt 等文件。 我遇到的问题是当它开始时一切正常,但是在 10-13 个文件之后它给出错误并且 excel 关闭。以下是我正在使用的代码。请在我做错的地方帮助我。我认为我在尝试 redim 的数组中犯了错误,但是那个给了我同样的错误。这是我放置在按钮上以启动进程的子程序。由于我有数千个文件,所以请建议我解决方案。

Sub WorkbooksLoop()
' get the list of filenames
Dim pageStart As Integer
Dim pageEnd As Integer
pageStart = CInt(Cells(3, "C").Value) ' getting from cell of excel sheet
pageEnd = CInt(Cells(4, "C").Value) ' getting from cell of excel sheet
Dim Filenames(44) As String ' variable I know there are 44 files


For j = pageStart To pageEnd
        Filenames(j) = CStr(j) + ".txt"
Next j


On Error GoTo NoFilenames

Dim controllerwb As Workbook
Set controllerwb = ActiveWorkbook
Dim wb As Workbook
Dim fname As Variant

Dim rootPath As String
rootPath = ThisWorkbook.Path
rootPath = rootPath & "\"

For Each fname In Filenames
    ' Make the controller active
    controllerwb.Activate

    On Error Resume Next
    ' If activate fails, then the workbook isn't open
    Workbooks(fname).Activate
    ' If activate fails, then the workbook isn't open
    If Err <> 0 Then
        OpenFile (rootPath & fname)
        Set wb = ActiveWorkbook
        wb.Activate
    ' Otherwise, workbook is already open, refer to it by name
    Else
        OpenFile (rootPath & fname)
        Set wb = ActiveWorkbook
    End If

    ' do something to the open workbook my process to format sheet
        deletingRowsColumns
        ledgerSetup
        resizeColumns
        columnLines
        columnAlignments
        mergeTitles
        settingNames
    wb.Close
Next fname
NoFilenames:
End Sub

【问题讨论】:

  • 您对On Error Resume Next的不当使用可能会隐藏在调用过程中发生的错误,例如deletingRowsColumnsledgerSetup等。
  • 我建议在End If 语句之后 立即添加On Error GoTo 0。这将恢复正常的错误处理,并帮助识别任何其他调用过程中的错误。
  • 还要考虑描述错误出现在哪一行,以及您收到的具体错误消息。
  • 另外,当调试器启动时,看看它是否是同一个工作簿,这会导致错误。是文件夹循环中的错误还是正在调用的其他代码?这是另一个遍历文件夹的例子。Loop through folder
  • 另外:(1)不要依赖ActiveWorkbook。始终获取打开或创建工作簿时获得的工作簿对象。 (2) IF 语句的(Err &lt;&gt; 0)(Err = 0) 部分都在做同样的事情(工作簿不需要处于活动状态) (3) 我在任何地方都看不到保存。 (4)在FOR循环前放一个Debug.Print pageStart &amp; " - " &amp; pageEnd (5)在deletingRowsColumns前放一个Debug.Print wb.name (6)写死前Excel报的错误

标签: vba excel csv excel-2007


【解决方案1】:

我已经完成了所有工作并以不同的方式重新编码。但仍然在 10-20 文件后通过错误。因为我在我的mac上使用windows机器作为虚拟机,所以我只是想为什么不在mac上用microsoft office试试。并且必须将目录的正斜杠更改为冒号(有趣的是,我认为它应该是反斜杠,但这就是 vba 所做的)并且它起作用了我收到一些文件未保存的警报,但至少我可以做 1000文件很容易休息,我可以手动保存。但它确实有效,虽然 vba 引擎在 mac 中有点慢,但谁在乎我只是把它留了几个小时来为我处理所有文件。 感谢你的帮助。 Mike 是的,我需要了解有关 ActiveWorkbook 和脚本的更多信息。我会尽力按照你告诉我的去做,但我的工作已经完成。谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2012-04-22
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多