在VBA中调用Year()函数时出现预期的数组错误

问题描述:

编辑2:此问题已得到解决。我犯了一个错误,声明一个名称为'Year'的变量...在VBA中调用Year()函数时出现预期的数组错误

我试图让一个单元格包含我提供的一系列报告中的版权,并且由于版权随年份发生变化,想要调用年份函数给我当年,所以我不必每年一月更新宏。我有问题的代码如下所示:

With .Cells(5, 1) 
      .Value = Chr(169) & " " & Year(Date) & " NCH Marketing Services, Inc" 
      .Font.Bold = False 
      .Font.Name = "Arial" 
      .Font.Size = 11 
     End With 

当我执行这个代码,我收到错误消息“编译错误:预期阵”。奇怪的是,我试图在三个不同的场合运行这个宏,它没有编译第一次或第三次,但第二次,它运行得很好。我没有对代码进行任何编辑,并且我已经在线查看年度函数的语法/用法,并且我无法弄清楚为什么有时会这样。有没有一种方法可以以更可靠的方式实现这一点?

编辑:下面是完整的代码

Option Explicit 
Sub RGA_Format_Reports() 

Application.ScreenUpdating = False 

Dim Year As Integer 
Dim Quarter As Integer 

Dim FolderPath As String 
Dim FileName As String 
Dim WorkBk As Workbook 

Dim iRows As Integer 
Dim iCols As Integer 

Dim shpTitle As Shape 
Dim shpLogo As Shape 


'Quarter = InputBox("Please enter the quarter number for which the reports are being run.") 

'Year = InputBox("Please enter the year for which the reports are being run.") 

'FolderPath = "G:\Analytical Services\Internal Client Requests\NRS\Scheduled\" & Year & "\Quarterly RGA Store Alert Reports\" & Year & " Q" & Quarter & "\" 

'FolderPath = "G:\Analytical Services\General Team Folders\Kyle\Macro Tests\RGA Reports\" 

'FileName = Dir(FolderPath & "*.xl*") 

'DoWhile FileName <> "" 

    'Set WorkBk = Workbooks.Open(FolderPath & FileName) 
     'With WorkBk 

With ActiveWorkbook 

     With .ActiveSheet 

      iRows = .UsedRange.Rows.Count 
      iCols = .UsedRange.Columns.Count 

      .Rows.AutoFit 
      .Columns.AutoFit 

      .Columns(1).ColumnWidth = 30 


      ActiveWindow.FreezePanes = False 
      .Range("A9").Select 
      ActiveWindow.FreezePanes = True 

      With .Range(.Cells(iRows - 2, 1), .Cells(iRows, 1)) 
       .WrapText = False 
       .Font.Name = "Arial" 
       .Font.Size = 10 
      End With 


      With .PageSetup 
       .TopMargin = Application.InchesToPoints(0.25) 
       .BottomMargin = Application.InchesToPoints(0.25) 
       .LeftMargin = Application.InchesToPoints(0.25) 
       .RightMargin = Application.InchesToPoints(0.25) 
       .CenterHorizontally = True 
       .Zoom = False 
       .Orientation = xlLandscape 
       .FitToPagesWide = 1 
       .FitToPagesTall = False 
       .PrintTitleRows = "$1:$8" 
      End With 


      .Range(.Cells(9, 3), .Cells(iRows, 3)).HorizontalAlignment = xlRight 
      .Range(.Cells(iRows - 4, 1), .Cells(iRows - 4, iCols)).Font.Bold = True 
      .Range(.Cells(iRows - 4, 1), .Cells(iRows - 4, iCols)).Interior.Color = RGB(238, 236, 225) 


      With .Range(.Cells(7, 9), .Cells(7, 12)) 
       .Merge 
       .HorizontalAlignment = xlCenter 
       .Font.Bold = True 
       .Font.Name = "Arial" 
       .Font.Size = 10 
       .Interior.Color = RGB(238, 236, 225) 

       With .Borders(xlEdgeTop) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeBottom) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeLeft) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeRight) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       .Value = "Total Billed" 
      End With 


      With .Range(.Cells(7, 13), .Cells(7, 19)) 
       .Merge 
       .HorizontalAlignment = xlCenter 
       .Font.Bold = True 
       .Font.Name = "Arial" 
       .Font.Size = 10 
       .Interior.Color = RGB(238, 236, 225) 

       With .Borders(xlEdgeTop) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeBottom) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeLeft) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeRight) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       .Value = "Total Adjustments" 
      End With 


      With .Range(.Cells(8, 1), .Cells(iRows - 4, 8)) 
       With .Borders(xlEdgeTop) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeBottom) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeLeft) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeRight) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 
      End With 


      With .Range(.Cells(7, 9), .Cells(iRows - 4, 12)) 
       With .Borders(xlEdgeTop) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeBottom) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeLeft) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeRight) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 
      End With 


      With .Range(.Cells(7, 13), .Cells(iRows - 4, 19)) 
       With .Borders(xlEdgeTop) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeBottom) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeLeft) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

       With .Borders(xlEdgeRight) 
        .LineStyle = xlContinuous 
        .Weight = xlThick 
       End With 

      End With 

      If .Cells(9, 4) = 0 Then 
       Columns("D:E").Delete 
      End If 

      For iRows = 1 To 4 
       .Cells(iRows, 1).Font.Bold = True 
       .Cells(iRows, 1).Font.Name = "Arial" 
       If iRows = 1 Then 
        .Cells(iRows, 1).Font.Size = 14 
       Else 
        .Cells(iRows, 1).Font.Size = 12 
       End If 
      Next iRows 

      With .Cells(5, 1) 
       .Value = Chr(169) & " " & Year(Date) & " NCH Marketing Services, Inc" 
       .Font.Bold = False 
       .Font.Name = "Arial" 
       .Font.Size = 11 
      End With 

      .Columns("A").ColumnWidth = 200 

      .Range(Cells(1, 1), Cells(5, 1)).WrapText = False 

      .Range(Cells(1, 1), Cells(5, 1)).Copy 
      .Range("B1").Select 
      Application.Wait (Now + TimeValue("00:00:01")) 
      .Pictures.Paste.Select 
      .Range(Cells(1, 1), Cells(5, 1)).ClearContents 
      .Columns("A").AutoFit 
      .Range("A1").Select 

      Set shpTitle = .Shapes("Picture 1") 
      With shpTitle 
       .Name = "Title Picture" 
       .Placement = xlFreeFloating 
      End With 

      Set shpLogo = .Shapes.AddPicture("G:\Analytical Services\AS Tools\AS Templates\NCH Logo.png", False, True, 1, 1, 60, 67) 
      With shpLogo 
       .Name = "Logo Picture" 
       .Placement = xlFreeFloating 
      End With 

      With shpTitle 
       .Left = 67 
      End With 


      .Columns("A").ColumnWidth = 30 



     End With 

End With 


End Sub 
+0

对“带有.Cells(5,1)”的引用是什么?代码中的前一个'With'是什么?否则,如果您使用'With With Sheets(“Sheet1”)。Cells(5,1)',例如,它工作正常 –

+0

整个链是: 'With ActiveWorkbook With .ActiveSheet With .Cells(5,1 )' –

+0

我很怀疑你没有对代码做任何无意的更改。编译错误不会动态改变。如果您提供更多的上下文,这将有所帮助答案几乎肯定存在于您未显示的代码中。 –

@ShaiRado指出,我已经设置一个变量,“年份”的名称。我知道,声明与函数名称相同的变量是一个很大的不,不;我只是精神错乱。更改变量声明解决了我的问题。谢谢@ShaiRado。