使用vba更改查询的来源

时间:2018-04-16 12:50:49

标签: excel excel-vba vba

我试图弄清楚如何通过VBA自动编辑查询源,从而创建查询。 Point是包含数据的excel文件存储在同一文件夹中作为将在其中创建查询的excel文件,如果我想将整个文件夹发送到另一个Person,则查询将尝试连接到My User包含数据的本地excel文件。

 Dim Datei2 As String
Set Datei2 = ActiveWorkbook.Path
Datei2 = ActiveWorkbook.Path & "\NameOfTheFile.csv"
'This part creates the path I want to use

ActiveWorkbook.Queries.Add Name:="NameOfTheFile" _
    , Formula:= _
    "let" & Chr(13) & "" & Chr(10) & "    Quelle = 

Csv.Document(File.Contents(""C:\Users\USERNAME\Desktop\censored\NameOfTheFile.c 
sv""),[Delimiter="";"", Columns=18, Encoding=1252, 
 QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""Geänderter Typ"" = Table.TransformColumnTypes(Quelle,{{""Column1"", type text}, {""Column2"", type text}, {""Column3"", type text}, {""Column4"", type text}," & _
    " {""Column5"", type text}, {""Column6"", type text}, {""Column7"", type text}, {""Column8"", type text}, {""Column9"", type text}, {""Column10"", type text}, {""Column11"", type text}, {""Column12"", type text}, {""Column13"", type text}, {""Column14"", type text}, {""Column15"", type text}, {""Column16"", type text}, {""Column17"", type text}, {""Column18"", type t" & _
    "ext}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Geänderter Typ"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
    "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""NameOfTheFile"";Extended Properti" _
    , "es="""""), Destination:=Range("$A$1")).QueryTable
    .CommandType = xlCmdSql
    .CommandText = Array( _
    "SELECT * FROM [NameOfTheFile]")
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .ListObject.DisplayName = "NameOfTheFile"
    .Refresh BackgroundQuery:=False

希望它不会太乱,我创建了一个新宏并包含了所有代码,因此如果输入路径和文件名,就可以运行它。

我创建了前三行代码,它给出了包含数据的excel的位置,然后应该将当前绝对路径下面的五行粘贴(在CSV.Document(File.Contents(...)下面) )

或者是否可以编辑现有的查询,我可以使用上面的字符串更改路径?

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

从评论中摘录:

对于字符串的部分说:

Csv.Document(File.Contents(""C:\Users\USERNAME\Desktop\censored\NameOfTheFile.csv"")

而是使用下面的Datei2是带有新文件路径的字符串变量:

Csv.Document(File.Contents(""" & Datei2 & """)

<强>解释

使用Csv.Document(File.Contents(""" & Datei2 & """)代替Csv.Document(File.Contents(" & Datei2 & ")的原因。

您可以从原始代码行(如下所示)中看到"的三种不同用法。

  1. "

    • 这标记字符串的开头或结尾。将字符串附加在一起时,这些单引号不包含在字符串值中。它们是Excel的简单标记,用于了解字符串边界的位置。
  2. 加倍""

    • 在字符串中使用它来存储"的值,因为单个双引号本身将被解释为字符串边界,而不是要包含在字符串中的值。
  3. """

    • 这是上述两者的组合。您将主要在硬编码字符串值的开头或结尾处看到此内容;即下面代码末尾的最后一个硬编码字符串值(" #""Geänderter Typ""")。实际存储的值为:#"Geänderter Typ"(尽管#之前的标签空间未显示)。第一个"表示字符串的开头。直接在""之后的#被解释为单个双引号字符,以存储为字符串的一部分。最后的"""被解释为首先要存储的"字符,然后是字符串的结束边界。
    • 如果"""位于字符串的开头,则它首先被解释为字符串的strating边界,然后是"要存储的字符。
  4. 由于答案(Csv.Document(File.Contents(""C:\Users\USERNAME\Desktop\censored\NameOfTheFile.csv"")中寻址的字符串的原始部分是硬编码字符串的一部分,因此""表示字符串中存储的"。< / p>

    由于需要包含存储的"以使代码正常工作,并且由于Datei2变量在任一端都不包含存储的",因此{{1需要在"""变量的任一侧保持字符串中存储的"

    Datei2