【问题标题】:Date for VBA not working in Excel 2011?VBA 的日期在 Excel 2011 中不起作用?
【发布时间】:2012-09-18 12:12:09
【问题描述】:

这是我的代码,我正在尝试,它可以在 PC 上运行,但不能在 Mac 上运行,运行此代码并创建一个 Excel 表,命名,添加一个选项卡,更改所述选项卡的颜色,更改将所述选项卡的名称,然后在保持单元格格式和单元格宽度和高度的同时将数据转置到新的工作表中。

这在 PC 上有效....但是当我使用 Mac 时,它不起作用。

我进入参考文献,这就是我所看到的。

我看到 Ref 编辑控件,并且缺少 Microsoft 脚本运行时。我都禁用了,脚本仍然在这里给我一个错误:

wbBK2.SaveAs Dir & Application.PathSeparator & "Open Order Report -" & Format(Date, "mm-dd-yyyy") & ".xlsx"

错误发生在(Date, "mm-dd-yyyy") 特别是日期部分。我无法弄清楚为什么会诚实地发生这种情况。如果有人可以仔细阅读并给我答案和解决方案,将不胜感激。

我得到的错误是 Error '9 Subscript Out Of Range 我看不出这个错误只出现在 Mac 而不是 PC 上的原因。

Option Explicit

Sub OpenOrderReportExport()

    Dim wsJL As Worksheet   'Jobs List
    Dim wsPOT As Worksheet  'PO Tracking
    Dim wsTNO As Worksheet  'Tel-Nexx OOR
    Dim wsDOO As Worksheet  'Dakota OOR
    Dim wbBK1 As Workbook   'Open Order Report
    Dim wbBK2 As Workbook   'New Workbook
    Dim wsWS1 As Worksheet  'Sheet1
    Dim wsWS2 As Worksheet  'Sheet2
    Dim wsWS3 As Worksheet  'Sheet3
    Dim wsWS4 As Worksheet  'Sheet4
    Dim CurrentFile As String, NewFileType As String, NewFile As String, Dir As String, lastrow As Long

    Set wsJL = Sheets("Jobs List")      'Jobs List
    Set wsPOT = Sheets("PO Tracking")   'PO Tracking
    Set wsTNO = Sheets("Tel-Nexx OOR")  'Tel-Nexx OOR
    Set wsDOO = Sheets("Dakota OOR")    'Dakota OOR
    Set wbBK1 = ThisWorkbook
    Set wbBK2 = Workbooks.Add           'New Workbook
    Set wsWS1 = wbBK2.Sheets("Sheet1")  'Sheet1
    Set wsWS2 = wbBK2.Sheets("Sheet2")  'Sheet2
    Set wsWS3 = wbBK2.Sheets("Sheet3")  'Sheet3


        Application.ScreenUpdating = False    ' Prevents screen refreshing.
        CurrentFile = ThisWorkbook.FullName
        NewFileType = "Excel Files 2007 (*.xlsx)"
        Dir = ThisWorkbook.path & Application.PathSeparator & "Reports"
        wbBK2.SaveAs Dir & Application.PathSeparator & "Open Order Report -" & Format(Date, "mm-dd-yyyy") & ".xlsx"
        Sheets.Add After:=Sheets(Sheets.Count)

    Set wsWS4 = wbBK2.Sheets("Sheet4")  'Sheet4

        With wbBK2
            Dim Sht As Worksheet
                For Each Sht In Worksheets
                    Sht.Tab.Color = 255
                Next
        End With

        Sheets("Sheet1").Name = "Jobs List"
        Sheets("Sheet2").Name = "PO Tracking"
        Sheets("Sheet3").Name = "Dakota OOR"
        Sheets("Sheet4").Name = "Tel-Nexx OOR"

        With wbBK1
            'Jobs List Export
            lastrow = wsJL.Range("B" & Rows.Count).End(xlUp).Row
            wsJL.Range("A2:N2").Copy
            wsWS1.Range("A1").PasteSpecial xlPasteAll
            wsJL.Range("A3:N" & lastrow).Copy
            wsWS1.Range("A2").PasteSpecial xlPasteValuesAndNumberFormats
            wsWS1.Range("A2").PasteSpecial xlPasteColumnWidths
            wsJL.Range("B3:N" & lastrow).Copy
            wsWS1.Range("B2").PasteSpecial xlPasteFormats
            wsWS1.Columns("A").Delete

            'Tel-Nexx Export
            lastrow = wsTNO.Range("B" & Rows.Count).End(xlUp).Row
            wsTNO.Range("A2:Q2").Copy
            wsWS2.Range("A1").PasteSpecial xlPasteAll
            wsTNO.Range("A3:Q" & lastrow).Copy
            wsWS2.Range("A2").PasteSpecial xlPasteValuesAndNumberFormats
            wsWS2.Range("A2").PasteSpecial xlPasteColumnWidths
            wsTNO.Range("B3:Q" & lastrow).Copy
            wsWS2.Range("B2").PasteSpecial xlPasteFormats
            wsWS2.Columns("A").Delete

            'Dakota Export
            lastrow = wsDOO.Range("B" & Rows.Count).End(xlUp).Row
            wsDOO.Range("A2:O2").Copy
            wsWS3.Range("A1").PasteSpecial xlPasteAll
            wsDOO.Range("A3:O" & lastrow).Copy
            wsWS3.Range("A2").PasteSpecial xlPasteValuesAndNumberFormats
            wsWS3.Range("A2").PasteSpecial xlPasteColumnWidths
            wsDOO.Range("B3:O" & lastrow).Copy
            wsWS3.Range("B2").PasteSpecial xlPasteFormats
            wsWS3.Columns("A").Delete

            'PO Tracking Export
            lastrow = wsPOT.Range("B" & Rows.Count).End(xlUp).Row
            wsPOT.Range("A2:K2").Copy
            wsWS4.Range("A1").PasteSpecial xlPasteAll
            wsPOT.Range("A3:K" & lastrow).Copy
            wsWS4.Range("A2").PasteSpecial xlPasteValuesAndNumberFormats
            wsWS4.Range("A2").PasteSpecial xlPasteColumnWidths
            wsPOT.Range("B3:K" & lastrow).Copy
            wsWS4.Range("B2").PasteSpecial xlPasteFormats
            wsWS4.Columns("A").Delete
        End With

        With wsWS1
            .Activate
            .Range("A1").Select
        End With
End Sub

【问题讨论】:

  • Dlls 适用于 Windows。如果不进行某种变通方法(例如虚拟化),它们不应该在 Mac 上工作。但是,我在您的代码中没有看到任何乍一看需要这些 dll 的任何内容。尝试删除引用,看看您的代码是否有效。
  • 不,错误类型 9,看起来文档已创建,但未命名或保存。同样的地方,只是没有真正描述为什么。

标签: excel vba macos excel-2011


【解决方案1】:

MISSING 引用是导致问题的原因。删除那里的复选标记,date 之类的基本内容将重新开始工作。如果这些引用对您正在运行的代码至关重要,则必须搜索 Mac 等效项

有关引用的更多信息 - 通常解决“缺失”会修复它,但是来自 here

您所描述的是典型的损坏引用。这个可以 由引用的文件是不同的版本或不同的文件引起的 开发代码的机器与 客户端机器。我们公司还尝试保持所有机器的配置 以同样的方式,但我发现它基本上是不可能管理的。

打开任何代码模块(或使用 Ctrl-G 打开调试窗口,前提是您 没有选择“将调试窗口保持在顶部”选项)。选择工具 | 来自菜单栏的引用。检查所有选定的参考文献。

如果任何选定的引用前面有“MISSING:”,请取消选择 他们,然后退出对话。如果你真的需要参考(S)你 只是未选中(您可以通过编译所有模块来判断),返回 并重新选择它们。

如果没有“MISSING:”,随机选择一个额外的参考,退出 对话框,然后返回并取消选择刚刚添加的引用。如果 这不能解决问题,请尝试取消选择尽可能多的选定内容 尽可能参考(Office 可能不允许您全部取消选择),退出 对话框,然后返回并重新选择刚才的引用 未选中。 (注意:在删除之前写下引用的内容 它们,因为当您返回时它们的顺序会有所不同)

是的,消除歧义为 VBA.xxxx 将起作用,因为 Excel 不再需要 查看所有参考资料。

【讨论】:

  • 按照我的帖子所述,已经这样做了,但我仍然遇到错误。
  • @MattRidge,错误不在日期中,而是在 format() 中,因为它认为它是一个数组,而不是一个函数。在答案中添加了更多信息
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多