天道酬勤,学无止境

VBA 的日期在 Excel 2011 中不起作用?(Date for VBA not working in Excel 2011?)

问题

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

这在 PC 上有效......但是当我进入 Mac 时,它没有。

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

在此处输入图片说明

我看到 Ref Edit Control 和 Microsoft Scripting Runtime 丢失。 我禁用了两者,脚本仍然在这里给我一个错误:

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

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

我得到的Error '9 Subscript Out Of RangeError '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
回答1

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

关于参考的更多信息 - 通常解决“丢失”修复它,但是,从这里

您所描述的是典型的损坏引用。 这可能是由于引用文件的版本不同或位于开发代码的机器和客户端机器之间的不同位置造成的。 我们公司也试图保持所有机器配置相同,但我发现这基本上是不可能管理的。

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

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

如果没有“缺少:”,则随机选择一个附加参考,退出对话框,然后返回并取消选择您刚刚添加的参考。 如果这不能解决问题,请尝试尽可能多地取消选择已选择的参考文献(Office 可能不允许您全部取消选择它们),退出对话框,然后返回并重新选择您刚刚取消选择的参考文献。 (注意:在删除之前写下引用是什么,因为当你返回时它们的顺序会不同)

是的,消除歧义为 VBA.xxxx 会起作用,因为 Excel 不再需要查看所有引用。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • VBA cDate 不适用于 Mac excel 2011(14.7.1)(VBA cDate not working on Mac excel 2011(14.7.1))
    问题 我正在尝试使用 VBA 脚本将日期转换为 long。 下面是代码片段 Sub test() Dim str as string Dim d as variant str="1/1/2016" d=cdate(str) end sub 上面的代码段在 Windows 上运行良好,但在 MAC 上给了我类型不匹配错误。 在日期中转换有效字符串是否有任何周转。 回答1 您的区域设置是根本原因。 你可以尝试修改它们吗? defaults write NSGlobalDomain AppleICUDateFormatStrings -dict 1 dd/MM/yyyy 回答2 您的代码确实在我的本地 OS X 机器上使用 Excel 运行。 不过,我有不同的区域设置。 我建议尝试使用国际日期格式(“YYYY-mm-dd”)。 Sub Main Dim str as String Dim d as Variant str = "2016-01-01" d = CDate(str) End Sub 或者,您可以尝试“2016 年 1 月 1 日”。 PS:您可以在 OS X 中的系统偏好设置 -> 语言和地区 -> 高级 -> 日期下查看您的日期和时间设置: 回答3 许多不同的答案,所以我不妨把这种做法扔进戒指, Sub test() Dim str As String Dim d As
  • Dir()函数在Mac Excel 2011 VBA中不起作用(Dir() function not working in Mac Excel 2011 VBA)
    问题 嗨,我正在尝试列出Excel工作簿所在子目录中的所有文件。由于某些原因,代码无法执行Dir功能。 任何人都可以请教吗? 谢谢! Sub ListFiles() ActiveSheet.Name = "temp" Dim MyDir As String 'Declare the variables Dim strPath As String Dim strFile As String Dim r As Long MyDir = ActiveWorkbook.Path 'current path where workbook is strPath = MyDir & ":Current:" 'files within "Current" folder subdir, I am using Mac Excel 2011 'Insert the headers in Columns A, B, and C Cells(1, "A").Value = "FileName" Cells(1, "B").Value = "Size" Cells(1, "C").Value = "Date/Time" 'Find the next available row r = Cells(Rows.Count, "A").End(xlUp).Row + 1 'Get the first file
  • Excel VBA:On错误Goto语句在For-Loop中不起作用(Excel VBA: On Error Goto statement not working inside For-Loop)
    问题 我正在尝试在excel中循环浏览一个表。 该表的前三列具有文本标题,其余部分以日期为标题。 我想依次将这些日期分配给Date类型的变量,然后根据日期执行一些操作 为此,我在myTable.ListColumns上使用了foreach循环。 由于前三列没有日期标头,因此我尝试设置循环,以便在将标头字符串分配给date-type变量时出错,该循环直接进入下一列 这似乎适用于第一列。 但是,当第二列的标题“分配”给date-type变量时,即使宏位于错误处理块中,该宏也会遇到错误。 Dim myCol As ListColumn For Each myCol In myTable.ListColumns On Error GoTo NextCol Dim myDate As Date myDate = CDate(myCol.Name) On Error GoTo 0 'MORE CODE HERE NextCol: On Error GoTo 0 Next myCol 重申一下,该错误会在循环的第二轮语句中抛出 myDate = CDate(myCol.Name) 谁能解释为什么On Error语句停止工作? 回答1 随着如图所示的代码,你实际上仍然被认为是错误处理程序中,当你击next声明。 这意味着除非您从当前的错误处理程序恢复,否则不允许后续的错误处理程序。 更好的架构是:
  • Excel 2010 vba 在 Excel 2012 中不起作用(Excel 2010 vba not working in Excel 2012)
    问题 我有 vba 代码,可以根据从另一个工作簿复制到当前工作簿的某些数据自动创建数据透视表。 当我在我的机器上运行它时,它很好。 另一个人也没有问题,但是一个女人收到了关于“运行时错误 '5':无效的过程调用或参数”的错误,它突出显示了我的代码 "ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "WorkRange", Version:=xlPivotTableVersion14).CreatePivotTable _ TableDestination:=ActiveSheet.Cells(3,1), TableName:="PivotTable2", DefaultVersion _ :=xlPivotTableVersion14 我的代码每次都会复制新的数据表并将其重命名为“调用数据 - 日期时间”,并每次在新表上创建一个新的数据透视表,所以我不认为是表名导致问题,特别是因为它对我来说运行良好。 她是唯一一个有问题的人。 有任何想法吗? 这里是所有的代码: Sub GeneratePivot() ' ' Macro11 Macro ' Dim myDate As Date, aDate myDate = Date + 7 - Weekday(Date) aDate =
  • Mac Excel 2011 VBA UDF 不起作用 - SET 或 FIND 命令似乎是问题所在(Mac Excel 2011 VBA UDF not working - SET or FIND command seems to be the issue)
    问题 我正在将电子表格从 Excel 2007 转换为 Mac Excel 2011。我已经尝试了几个小时来解决我的问题,但没有成功,因此我们将不胜感激! 此 UDF 在范围内查找字符串,然后返回找到的单元格下方一个单元格的值。 SET 命令在 Mac 版本中不返回任何内容,但在 Excel 2007 中有效。 Function FindRng(Fnd As String) Application.Volatile Dim Rng As Range If Fnd = "" Then FindRng = 0 GoTo 109 End If With Sheets("Matrix").Range("G2:FZ13") Set Rng = .Find(What:=Fnd, _ After:=.Cells(2, 7), _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False) If Not Rng Is Nothing Then FindRng = Sheets("Matrix").Cells(Rng.Row + 1, Rng.Column).Value Else FindRng = 0 End If End With 109
  • 按名称获取元素在excel vba中不起作用(get element by name not working in excel vba)
    问题 这是 HTML 代码: <table> <tr><td>Date:</td><td><input type='text' name='d' value=''><br>(Example: Oct. 8)</td></tr> <tr><td>Teams:</td><td><input type='text' name='away' value=''> at <input type='text' name='home' value=''><br>(Example: Florida at Buffalo)</td></tr> <tr><td>Time:</td><td><input type='text' name='t' value=''><br>(Example: 7:00 PM)</td></tr></table><br><input type='submit' value='Submit'>" 我正在使用此代码: Sub extractdata() Dim x As Long Dim objie As Object Set objie = CreateObject("internetexplorer.application") objie.Top = 0 objie.Left = 0 objie.Width = 800 objie.Height = 600 objie
  • vba,excel:返回此字符串数组中最早的日期值(vba, excel : returning the earliest date value in this array of string)
    问题 我在编码方面遇到了一些问题,不知道在哪里解决这个问题: 我希望 BronzeDate 返回在我的数组中找到的最早日期。 这是打印输出的示例: Possible Bronze Date : 6/6/2011 Possible Bronze Date : 10/5/2011 Possible Bronze Date : 10/5/2011 Possible Bronze Date : 12/5/2011 Possible Bronze Date : 10/5/2011 Possible Bronze Date : 6/6/2011 Possible Bronze Date : 11/5/2011 Possible Bronze Date : 1/16/2012 Possible Bronze Date : 6/6/2011 Possible Bronze Date : Possible Bronze Date : Possible Bronze Date : Possible Bronze Date : Possible Bronze Date : Possible Bronze Date : Possible Bronze Date : Possible Bronze Date : Possible Bronze Date : Possible Bronze Date :
  • vba Excel 2010 Environ(“用户名”)在saveas文件路径中不起作用(vba excel 2010 Environ(“username”) not working in saveas filepath)
    问题 出于某种原因,我可以通过消息框告诉我用户名是什么,但在“另存为”路径中它的工作方式不同。 我收到“找不到路径”错误。 不确定如何解决此问题。 我还查看了参考文献,它们似乎是正确的。 如果我更改路径以包括每台计算机的实际用户名,则宏可以正常工作。 但是我需要将其作为任何计算机/用户的全局宏。 任何帮助将不胜感激。 这是我所拥有的: Sub SAVEAS_2010() ' ' SAVEAS_2010 Macro MsgBox Environ("username") Dim UserName As String UserName = Environ("username") ChDir "C:\Users\" & UserName & "\Dropbox\Open Machine Schedule" ActiveWorkbook.SaveAs FileName:= _ "C:\Users\" & UserName & "\Dropbox\Open Machine Schedule\Open Machine Schedule - Current_2.xlsx" _ , FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False End Sub 回答1 似乎是一个老问题。 但是对于那些偶然发现此帖子的人,添加$对我有用- &Environ $(“
  • 在 Excel 中使用 VBA 从日期中提取年份(Extract Year from Date Using VBA in Excel)
    问题 我有一个包含多张工作表的 Excel 工作簿。 我需要做的是将年份从一张纸中的一列转移到另一张纸上。 我可以让专栏顺利转移,但我不能让它只给我日期。 日期采用dd-mon-yy格式(例如14-Jul-14 )。 我需要的是在yyyy获取它(例如2014 )。 任何帮助都会很棒。 我正在尝试的代码是这样的,但它不起作用。 [...] For I=5 to 5 If Not TransferCol (5) = 0 Then Worksheets ("Results").Cells.(Row, StartColumn + I) = Worksheets("Program").Cells(RowTransfer, Year (TransferCol (5))) Exit Do End If Next [....] 回答1 在我看来,有(至少)两种方法可以实现你想要的。 1. 格式化 您可以复制整个日期并将目标单元格的格式设置为仅显示年份,而不是从源日期中提取年份。 这样您就可以保留原始日期信息,但只显示您感兴趣的部分。这是将日期从"Sheet1"/Cell(1,1)复制到"Sheet2"/Cell(1,1)的示例并使用NumberFormat将目标单元格格式设置为仅显示 4 位年份部分: Public Sub test1() Dim rSrc As Range Dim rDst As
  • 用于带日期循环的 Excel VBA 脚本(Excel VBA script for loop with dates)
    问题 我正在计算两个给定日期之间的工作小时数(上午 8 点到晚上 8 点),不包括周末和公共假期,但我的代码语法不正确。 样本数据: 开始日期:17/06/2011 08:00:00 AM 结束日:19/06/2011 08:00:00 PM Sub SLA_Days_Resolved_F() Dim x As Integer ' Set numrows = number of rows of data. NumRows = Range("F2", Range("F2").End(xlDown)).Rows.Count Dim total As Integer 'to count the total hours Dim st As String 'start date cell Dim en As String 'end date cell Dim destCell As String Dim d As Date ' for the loop total = 0 ' Establish "For" loop to loop "numrows" number of times. For x = 2 To NumRows + 1 st = "G" & CStr(x) 'reference to the cells en = "D" & CStr(x) 'loop from start
  • 单元格引用在 Excel VBA 2010 函数中不起作用(Cells reference not working in Excel VBA 2010 Function)
    问题 我正在尝试编写一个函数,该函数采用一系列数据并从用户提供的列中计算两个数字的比率。 我想在行的末尾打印这个比率,但由于某种原因,我无法使用 cell 函数引用行中的最后一个单元格。 相反,Cells 函数只是不断向我提供该单元格的值,而不是单元格地址。 我认为细胞功能也提供了地址。 有人可以告诉我这是错误的还是我的代码错误? 这是代码 Function calculateRatio(table As Range, numerator As Integer, denominator As Integer, Optional nameOfRatio As String) On Error GoTo ExpectedError Dim num As Double Dim denom As Double Dim ratio As Double If table.Columns.Count < 2 Then MsgBox ("Not enough data. Requires at least two or more rows.") Exit Function End If If numerator < 1 Or numerator > table.Columns.Count Then MsgBox ("Not an acceptable Numerator. Must be
  • 如何在 Powerpoint VBA 中更改格式化日期的区域设置(How to change the locale of a formatted date in Powerpoint VBA)
    问题 在 powerpoint vba 应用程序中,我想根据当前的拼写检查语言(可能与系统区域设置语言相同也可能不同)格式化日期。 例如,语言环境是德语(奥地利),但对于英语客户,文档是英语的,因此日期格式应为“2015 年 1 月 1 日”而不是“01.Jänner 2015” 我在此站点上找到了 excel 的解决方案:如何更改格式化日期的语言环境? 在 powerpoint vba 中尝试相同的技术似乎不起作用: debug.print format (now(), "[$-415] MMMM") Jänner debug.print format (now(), "[$-809] MMMM") Jänner debug.print format (now(), "[any old rubbish] MMMM") Jänner --> vba 忽略方括号中的任何内容。 任何建议如何在 VBA 中实现相同的结果? 回答1 遇到了同样的问题,很难找到解决方案,所以我将回答这个较旧的问题: 使用工具 > 参考 > Microsoft Excel 16.0 对象库(或您当前的 Excel 版本,可能是 12.0 或 14.0)激活 Excel 库菜单入口激活 Microsoft Excel 16.0 对象库 然后你可以使用这个 Excel WorksheetFunction:
  • 刷新 QueryTable 抛出“常规 ODBC 错误” - VBA Excel 2011 for Mac(Refresh QueryTable throwing “General ODBC error” - VBA Excel 2011 for Mac)
    问题 编辑:发现新错误? 我可能刚刚发现为什么我的脚本不再起作用了。 最近有一个办公室更新,似乎他们已经实现了微软查询,它摆脱了我根据需要安装和配置的 ODBC 管理器。 现在实际的问题可能是这个微软查询没有 UNICODE 库,我不知道我可以把它们放在哪里,以便微软查询可以读取/获取它们。 或者更确切地说,我不知道如何为 microsoft 查询提供 UNICODE 库的路径,因为在管理器中不可能更改它,或者可能有但我只是没有找到它? 除此之外,我无法打开 Microsoft 查询管理器,除非我直接从 Excel 工作簿中打开它。 原问题 这段代码工作了一段时间。 现在使用完全相同的代码,我收到运行时错误。 在这里,我已经在这种情况下寻求帮助并使其正常工作。 这是代码: Sub ConnectSQL() Dim connstring As String Dim sLogin As String Dim qt As QueryTable sLogin = "Uid=*;Pwd=*;" sqlstringFirma = "select * from gi_kunden.tbl_Firma" sqlstringPerson = "select * from gi_kunden.tbl_Person" connstring = "ODBC;DSN=KundeDB;" & sLogin
  • 任何有关 EXCEL 中 SQL 和 Microsoft OLE DB Provider for Jet 4.0 的参考/手册?(Any references/manuals on SQL in EXCEL with Microsoft OLE DB Provider for Jet 4.0?)
    问题 是否有任何有关EXCEL 中SQL 语法的参考/手册与 Microsoft OLE DB Provider for Jet 4.0 相关联? 例如,如何编写日期类型的常量? 有哪些关键字/功能/子句可用? 回答1 当使用 Excel 作为 Jet 4.0 数据源时,我所知道的最佳参考是: 如何将 ADO 与来自 Visual Basic 或 VBA 的 Excel 数据一起使用。 特别重要的是,当现有列包含混合数据类型时,如何确定现有列的整体数据类型。 关于 Microsoft OLE DB Provider for Jet 4.0,最相关的文章是这样的: ADO 提供程序属性和设置:Microsoft Jet 4.0 提供程序属性 也就是说,在较早的文章中更好地介绍了 Excel 特定的详细信息。 使用 Excel 和 SQL 时应注意的一个重要问题: BUG:使用 ActiveX 数据对象 (ADO) 查询打开的 Excel 工作表时发生内存泄漏 有哪些关键字/功能/子句可用? 关于使用 Jet 4.0 SQL,这篇文章是我见过的最好的: 中级 Microsoft Jet 4.0 SQL 从理论上讲,Access Help 的 SQL 部分应该是相关的,但它的质量特别低,而且 Jet 4.0 的覆盖率特别低。 同样,并非所有内容都可以直接在 Excel 中运行。 例如
  • 日期过滤器通过 Excel VBA 隐藏所有单元格(Date Filter Hiding All Cells Through Excel VBA)
    问题 我正在使用以下内容过滤掉特定日期,但是它隐藏了所有单元格并且不会保留在所需的数据中。 手动完成后,它工作正常,当我将范围更改为最后一行( $AL1210 )时,它也可以正常工作,但是这个范围会增加,因为我每天都会粘贴新数据。 我正在尝试找到一个理想情况下自动增加到最后一行的范围的解决方案(尽管我已经从其他答案中尝试过并得到相同的结果,因为我不明白为什么过滤器不起作用,任何人都可以帮助我有了这个? Sub Auto_Filter() `Auto_Filter Macro `This Auto Filters all data for years 2017 & 2018, this also sorts to newest date first Keyboard Shortcut: Ctrl+Shift+A Sheets("Paste Data").Select ActiveSheet.Range("$A$1:$AL$10000").AutoFilter Field:=9, Criteria1:= _ ">=01/01/2017", Operator:=xlAnd, Criteria2:="<=31/12/2018" ActiveWorkbook.Worksheets("Paste Data").AutoFilter.Sort.SortFields.Clear
  • Excel VBA 日期格式(Excel VBA date formats)
    问题 我有一个包含多个日期的电子表格。 这些通常出现在mm/dd/yyyy或mm/dd/yyyy hh:mm 。 问题是日期并不总是正确输入,我想进行检查以确保它们是代码中的日期。 我最初的想法是使用IsDate来检查或CDate但这似乎不起作用:它仍然返回字符串而不是日期。 从那以后,我建立了一个小实验,表明这些函数并没有按照我期望的方式工作。 方法论是: 在单元格 A1 中,我输入公式=DATE(2013,10,28) 单元格 B1 公式=A1*1应该等于一个数字 (41575) 运行这个小脚本Sub test() MsgBox ("Start:" & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value)) ActiveCell.Value = Format(ActiveCell.Value, "mm/dd/yyyy") MsgBox ("After format: " & TypeName(ActiveCell.Value) & " " & IsDate(ActiveCell.Value)) ActiveCell.Value = CDate(ActiveCell.Value) MsgBox ("After Cdate: " & TypeName(ActiveCell.Value) & " " & IsDate
  • 找不到 VBA Application.FileDialog(VBA Application.FileDialog not found)
    问题 我在 Mac 上运行 Excel 2011,我的一个应用程序在 Windows 版本上运行,但在我的 Mac 上不起作用。 它在 Application.FileDialog 中找不到方法“FileDialog”。 我正在使用参考 ms office 14.0 对象库、vba、ms excel 14.0 对象库、ole 自动化和 ms forms 2.0 对象库。 为什么我的 mac 上的应用程序类不存在 FilDialog 方法,但它适用于我的 Windows? 回答1 根据本文,Excel 2011 中不存在Application.FileDialog 。 试试这个解决方案,它会创建一个函数。 解决方案如下,并允许它在 Macintosh 上工作: Function myGetOpenFileName(Optional sPath As String) As String Dim sFile As String Dim sMacScript As String If isMac Then If sPath = vbNullString Then sPath = "the path to documents folder" Else sPath = " alias """ & sPath & """" End If sMacScript = "set sFile to
  • 在 Google 表格中使用 VBA 自动 [重复](Use VBA in Google Sheets to auto [duplicate])
    问题 这个问题在这里已经有了答案: 在 Google Docs 中使用 VBA,因为它可以在 MS Excel 中使用 [重复] (1 个回答) 如何将 VBA 脚本转换为 Google Apps 脚本脚本? [关闭] (3 个回答) 3年前关闭。 我试图让谷歌文档在一行中的值发生变化时包含当天日期的自动填充。 我找到了一个可以解决问题的 excel VBA 代码(如下)。 但是,它在谷歌表格中不起作用。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row > 1 Then Cells(Target.Row, "B") = Date End Sub 您知道如何在工作表中以函数或代码的形式完成这项工作吗? 回答1 Google Sheets 不支持VBA——它代表 Visual Basic for Applications,一种从 Visual Basic 派生的微软语言。 什么表不支持的工作只是为宏JavaScript函数。 查看此内容以获取有关 Javascript 宏的更多信息。
  • 在Excel中解析ISO8601日期/时间(包括TimeZone)(Parsing an ISO8601 date/time (including TimeZone) in Excel)
    问题 我需要将Excel / VBA中包含时区(来自外部来源)的ISO8601日期/时间格式解析为正常的Excel日期。 据我所知,Excel XP(我们正在使用的)没有内置的例程,因此我想我正在考虑使用自定义VBA函数进行解析。 ISO8601日期时间看起来像其中之一: 2011-01-01 2011-01-01T12:00:00Z 2011-01-01T12:00:00+05:00 2011-01-01T12:00:00-05:00 2011-01-01T12:00:00.05381+05:00 回答1 有一种(合理的)简单方法可以使用公式而不是宏来解析没有时区的ISO时间戳。 这与原始发布者的要求不完全相同,但是当我尝试在Excel中解析ISO时间戳时发现了这个问题,并且发现此解决方案很有用,所以我想在这里分享一下。 下面的公式将再次解析ISO时间戳,而不带时区: =DATEVALUE(MID(A1,1,10))+TIMEVALUE(MID(A1,12,8)) 这将以浮点格式生成日期,然后您可以使用常规Excel格式将其格式化为日期。 回答2 很多Google搜寻没有任何结果,所以我编写了自己的例程。 将其发布在此处以供将来参考: Option Explicit '--------------------------------------------------------
  • 为表达式设置两个变量的 VBA EXCEL 多个嵌套 FOR 循环(VBA EXCEL Multiple Nested FOR Loops that Set two variable for expression)
    问题 好吧,我已经做了大量的搜索,找到了一些,玩了一点。 我似乎无法让这些循环完全工作,我可以部分完成,但不能全部完成。 由于第一个循环工作正常,然后它变得不稳定。 T是表达式输出t.Value = time1 - time2 Y是设定不变的时间日期= time1 X是时间和日期,必须从与相应y相同的列中的范围中提取。 x= time 2 我已经上传了我的工作簿的相应部分 https://docs.google.com/open?id=0BzGnV1BGYQbvMERWU3VkdGFTQS1tYXpXcU1Mc3lmUQ 我玩过重新排列 for 循环的条件退出。 我什至考虑过尝试 goto,直到我注意到它的提及创建了一大堆尸体。 我对任何建议或方向持开放态度并感激不尽。 我注意到一些语言有退出和继续选项,但它没有出现 VB 吗? 这是我的循环,我已经去除了在尝试让它工作时造成的混乱。 Sub stituterangers() Dim dify As Boolean Dim difx As Boolean Dim time2 As Date Dim time1 As Date For Each t In range("d7:cv7") For Each x In range("d8:cv11") If x > 0 Then time2 = x For Each y In range(