Function update_avgcpu_data(Server_hostname)
Dim rpt_name As String
rpt_name = Server_hostname & "avgcpu"
MsgBox rpt_name
With ThisWorkbook.Sheets(Server_hostname).ListObjects.Add(SourceType:=0, Source:= _
"ODBC;DSN=localtest;",Destination:=ThisWorkbook.Sheets(Server_hostname).Range("$A$1")).QueryTable
.CommandText = "SELECT cpu_avg_statistics_0.LOGDATE as 'Date of Month', cpu_avg_statistics_0.CPU as 'CPU Utilization %' FROM test.cpu_avg_statistics cpu_avg_statistics_0 WHERE (cpu_avg_statistics_0.SERVER_NAME='" & Server_hostname & "') AND (cpu_avg_statistics_0.LOGDATE between '2012-02-01' and '2012-02-05') ORDER BY cpu_avg_statistics_0.LOGDATE"
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = rpt_name
.Refresh BackgroundQuery:=False
End With
End Function
我使用上面的函数来运行查询,错误代码是运行时错误1004,应用程序定义或对象定义的错误。当按下调试时,它停在该行 .ListObject.DisplayName = rpt_name。请帮忙
答案 0 :(得分:2)
当我使用宏创建基本相同的脚本时,我遇到了同样的问题。经过一两个小时的调试,我想出了这个:
简短回答是您有一个名为 rpt_name 的对象。由于你不能拥有两个具有相同名称的对象,因此excel会抛出错误。
长答案我从VBA帮助功能得到了这个:“如果尝试将Name属性设置为另一个ListObject对象已经使用的名称,则会引发运行时错误。 “
更长的回答对我来说,我的错误是我每次运行宏时都在创建一个新表,并且宏试图为新表使用相同的名称。当然我第一次运行宏它有效,因为它没有重复的名称,但后续运行导致崩溃,因为重复的名称(在我的情况下是一个表名)
最长回答此时我猜您可能在消息框(脚本的第三行?)中输入了相同的 rpt_name ,从而导致错误。在继续编写脚本之前,您可能需要将输入到消息框中的内容与现有名称列表进行比较...
答案 1 :(得分:1)
我今天早些时候遇到了同样的错误。为了解决这个问题,我做了以下几点:
在导入访问表之前,我添加了一个表
ActiveWorkbook.Worksheets.Add
访问导入代码:
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _................
.........
.........
重命名工作表。以下代码将活动工作表重命名为AccessImport
ActiveSheet.Name = "AccessImport"
答案 2 :(得分:0)
您的变量“Server_hostname”可能包含不允许用于表格显示名称的空格或其他字符。
尝试相同的代码,但更改rpt_name的值。例如rpt_name =“avgcpu”