当新的一年到来时,会创建新工作表,因此这个新工作表中的表格也是如此。我已经录制了一个宏来创建一个表。一个简单的函数(作为单独的模块)返回当前年份,因此新工作表得到它的名称,我想在这个新工作表中用当前年份命名该表,但它没有正常工作。当我在创建表名后检查它时,它就像_
2016。
创建表格宏后,使用我的名字命名列,但是第一列崩溃时出现错误method range of object _global failed
。
我不确定如何正确传递函数的结果来命名表,并使用它来引用宏中的表来更改列名。 记录宏而不是:
Range("Data.GetYear[[#Headers],[Kolumna1]]").Select
有:
Range("Table1[[#Headers],[Kolumna1]]").Select
并且它起作用所以基本上问题是如何用变量替换Table1
所以我可以轻松地引用表格,因为在工作簿中不能有多个具有相同名称的表。
Function GetYear() As String
GetYear = Format(Date, "yyyy")
End Function
创建表格:
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$8:$F$8"), , xlYes).Name = Data.GetYear
Range("Data.GetYear[[#Headers],[Kolumna1]]").Select
ActiveCell.FormulaR1C1 = "Lp."
Range("Data.GetYear[[#Headers],[Kolumna2]]").Select
ActiveCell.FormulaR1C1 = "Data przychodu"
Range("Data.GetYear[[#Headers],[Kolumna3]]").Select
ActiveCell.FormulaR1C1 = "Kwota przychodu"
Range("Data.GetYear[[#Headers],[Kolumna4]]").Select
ActiveCell.FormulaR1C1 = "Podatek"
Range("Data.GetYear[[#Headers],[Kolumna5]]").Select
ActiveCell.FormulaR1C1 = "Dochód"
Range("Data.GetYear[#All]").Select
Selection.Columns.AutoFit
Range("Data.GetYear[[#Headers],[Lp.]]").Select
Selection.AutoFilter
答案 0 :(得分:0)
我写了一个简短的Workbook_Open事件宏。如果新年份数据的工作表或表格不存在,则会自动创建它们。基本上,第一次在新的一年中打开工作簿时,将创建工作表和表。
您可以查看此工作代码,了解我如何处理Worksheet / ListObject命名以及填充表头。
Option Explicit
Private Sub Workbook_Open()
On Error GoTo bm_New_Year_ws
With Worksheets(Chr(95) & Year(Date))
On Error GoTo bm_New_Year_tbl
With .ListObjects(Format(Date, "\t\a\b\l\e0000"))
.Parent.Select
.Parent.Range("B9").Select
End With
End With
GoTo bm_Safe_Exit
bm_New_Year_tbl:
On Error GoTo 0
With Worksheets(Chr(95) & Year(Date))
.Range("B8:F8") = Array("Lp.", "Data przychodu", _
"Kwota przychodu", _
"Podatek", "Dochód")
With .ListObjects.Add(xlSrcRange, .Range("B8:F9"), , xlYes)
.Name = Format(Date, "\t\a\b\l\e0000")
.Range.Columns.AutoFit
End With
End With
On Error GoTo bm_Safe_Exit
Resume
bm_New_Year_ws:
On Error GoTo 0
With Worksheets.Add(after:=Sheets(Sheets.Count))
.Name = Chr(95) & Year(Date)
End With
On Error GoTo bm_Safe_Exit
Resume
bm_Safe_Exit:
End Sub
答案 1 :(得分:0)
表名不能是纯数字。它们必须是文本,这就是为什么在带有下划线字符的数字之前允许作为表名,但只是数字不允许。
我建议找一些标准的命名约定,它是文本的,但却是需要的年份。一些例子可能是:
Table2015
2015Table
_2015
2015Data
2015Whatever...
这是我用来检查给定工作簿中是否存在表的例程......
Function TableExists(ByVal TableName As String, Optional ByVal TableSheet As Worksheet) As Boolean
'
' Returns True if a Table exists with the specified name on the specified (or active) sheet.
'
' Author: Zack Barresse
'
' Syntax: TableExists(TableName,[TableSheet])
'
' Parameters: TableName. String. Required. Table name to check if it exists.
' TableSheet. Worksheet. Optional. Worksheet to look for Table in. The active sheet
' is used if not specified
'
If TableSheet Is Nothing Then
If ActiveSheet Is Nothing Then Exit Function
Set TableSheet = ActiveSheet
End If
On Error Resume Next
TableExists = CBool(Len(TableSheet.ListObjects(TableName).Name) <> 0)
On Error GoTo 0
End Function
HTH Zack Barresse
答案 2 :(得分:0)
谷歌搜索更多的解决方案,我发现这一行:
Range("Data.GetYear[[#Headers],[Kolumna1]]").Select
应如下所示:
Range(Data.GetYear & "[[#Headers],[Kolumna1]]").Select
目前我的行看起来像这样:
Range(Nazwa & "[[#Headers],[Kolumna1]]").Select
其中Nazwa
是一个简单的字符串函数:
Function Nazwa() As String
Nazwa = "Najem_" & Year(Date)
End Function
这就是将变量用作表名所必需的全部内容。这么简单,花了很多时间来解决这个问题。