英文:
VBA: How to delete Queries from active worksheet?
问题
以下是翻译好的部分:
"I have a Workbook that has a "live" tab, which has around 8 Queries."
"我有一个工作簿,其中有一个名为“live”的标签,其中包含大约8个查询。"
"Everyday I duplicate this sheet, before refreshing. In the duplicated sheet, I would like to remove all queries, as I don't need them anymore."
"每天在刷新之前,我都会复制这张工作表。在复制的工作表中,我希望删除所有查询,因为我不再需要它们。"
"I'm trying to create a macro to remove all Queries."
"我正在尝试创建一个宏来删除所有查询。"
"I tried following code, but it doesn't work. error: object doesn't support this method
for the line 5."
"我尝试了以下代码,但它不起作用。在第5行出现错误:对象不支持此方法
。"
"I also tried the code from this question, with some modification, but gets syntax error for line 3."
"我还尝试了来自这个问题的代码,并进行了一些修改,但在第3行出现了语法错误。"
英文:
I have a Workbook that has a "live" tab, which has around 8 Queries.
Everyday I duplicate this sheet, before refreshing. In the duplicated sheet, I would like to remove all queries, as i dont need them anymore.
I'm trying to create a macro to remove all Queries.
I tried following code, but it doesn't work. error: object doesn't support this method
for the line 5.
Sub DelQueries()
Dim q As WorkbookQuery
For Each q In ActiveWorkbook.Queries
If q.Parent.Name = ActiveSheet.Name Then
q.Delete
End If
Next
End Sub
I also tried the code from this question, with some modification, but gets syntax error for line 3.
Sub loop_del_query()
For Each Worksheet In ThisWorkbook.Worksheets
If Worksheet.Name = ActiveSheet.Name
Qcount = Worksheet.Queries.Count
If Qcount > 0 Then
For Each Query In Worksheet.Queries
Query.Delete
Next
End If
End If
Next Worksheet
End Sub
答案1
得分: 1
以下是代码的翻译部分:
Option Explicit
Sub DeleteQueries()
Dim wb As Workbook, ws As Worksheet
Dim wq As WorkbookQuery, qname As String
Dim qt As QueryTable, tbl As ListObject
Dim msg As String, dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
' existing queries
For Each wq In wb.Queries
dict.Add wq.Name, 1
Next
' scan table object for query tables
For Each tbl In ws.ListObjects
Set qt = Nothing
On Error Resume Next
Set qt = tbl.QueryTable
On Error GoTo 0
If Not qt Is Nothing Then
qname = qt.WorkbookConnection.Name
If Left(qname, 8) = "Query - " Then
qname = Mid(qname, 9)
'Debug.Print tbl.Name & " Query:" & qname
'delete query if exists
If dict.Exists(qname) Then
wb.Queries(qname).Delete
msg = msg & vbCrLf & qname
Else
Debug.Print "Not found", qname
End If
End If
End If
Next
If msg = "" Then
MsgBox "No Queries deleted", vbInformation
Else
MsgBox "Queries deleted:" & msg, vbInformation
End If
End Sub
希望这有所帮助。如果您有其他问题,请随时提出。
英文:
As explained on this post try ;
Option Explicit
Sub DeleteQueries()
Dim wb As Workbook, ws As Worksheet
Dim wq As WorkbookQuery, qname As String
Dim qt As QueryTable, tbl As ListObject
Dim msg As String, dict As Object
Set dict = CreateObject("Scripting.Dictionary")
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
' existing queries
For Each wq In wb.Queries
dict.Add wq.Name, 1
Next
' scan table object for query tables
For Each tbl In ws.ListObjects
Set qt = Nothing
On Error Resume Next
Set qt = tbl.QueryTable
On Error GoTo 0
If Not qt Is Nothing Then
qname = qt.WorkbookConnection.Name
If Left(qname, 8) = "Query - " Then
qname = Mid(qname, 9)
'Debug.Print tbl.Name & " Query:" & qname
'delete query if exists
If dict.exists(qname) Then
wb.Queries(qname).Delete
msg = msg & vbCrLf & qname
Else
Debug.Print "Not found", qname
End If
End If
End If
Next
If msg = "" Then
MsgBox "No Queries deleted", vbInformation
Else
MsgBox "Queries deleted:" & msg, vbInformation
End If
End Sub
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论