从VBA更新SQL表

时间:2015-08-03 19:37:49

标签: excel vba excel-vba

每次运行某个宏时,我都需要刷新一个表。我将SQL查询存储在表属性中。我试过点击excel中的刷新按钮但是没有用。

下面是我写的(尝试)在调用时更新查询的子。

db = models.ImageField(upload_to="foo")

2 个答案:

答案 0 :(得分:0)

对不起,这是一个评论而不是一个答案,但我会在这里发布,所以我可以使用代码块。我以前没有在Excel中使用SQL,但我看到两个可能的原因:

  1. “table”不是“tableQueries”所在的工作表。
  2. 使用选择和选择会导致问题。
  3. 如果“table”不是表“tableQueries”,则必须告诉我们哪张表是正确的。但假设它在“表”上,请尝试使用此代码,看看问题是否仍然存在:

    Sub updateTable()
    
    ListObjects("tableQueries").QueryTable.Refresh BackgroundQuery:=True
    
    With ActiveSheet.ListObjects("tableQueries")
        .HeaderRowRange(1) = "Column 1"
        .HeaderRowRange(2) = "Column 2"
        .HeaderRowRange(3) = "Column 3"
        .HeaderRowRange(4) = "Column 4"
        .HeaderRowRange(5) = "Column 5"
        .HeaderRowRange(6) = "Column 6"
    End With
    
    End Sub
    

    如果这不起作用,有时With可能会对表格感到脾气暴躁。试试这个:

    Sub updateTable()
    
    ListObjects("tableQueries").QueryTable.Refresh BackgroundQuery:=True
    
    ActiveSheet.ListObjects("tableQueries").HeaderRowRange(1) = "Column 1"
    ActiveSheet.ListObjects("tableQueries").HeaderRowRange(2) = "Column 2"
    ActiveSheet.ListObjects("tableQueries").HeaderRowRange(3) = "Column 3"
    ActiveSheet.ListObjects("tableQueries").HeaderRowRange(4) = "Column 4"
    ActiveSheet.ListObjects("tableQueries").HeaderRowRange(5) = "Column 5"
    ActiveSheet.ListObjects("tableQueries").HeaderRowRange(6) = "Column 6"
    
    End Sub
    

答案 1 :(得分:0)

如果你想刷新整张纸而不仅仅是表,那么下面的两行应该可以解决问题。在宏之后运行某个宏和第二行之前放置第一行。

1. ActiveSheet.EnableCalculation = False  'Before your macro
2. ActiveSheet.EnableCalculation = True   'After your macro  

例如:

Sub refreshSheet()
    ActiveSheet.EnableCalculation = False
    'Call your sub here  <-----
    ActiveSheet.EnableCalculation = True
End Sub