我试图弄清楚如何通过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(...)下面) )
或者是否可以编辑现有的查询,我可以使用上面的字符串更改路径?
感谢您的时间!
答案 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 & ")
的原因。
您可以从原始代码行(如下所示)中看到"
的三种不同用法。
单"
:
加倍""
:
"
的值,因为单个双引号本身将被解释为字符串边界,而不是要包含在字符串中的值。三"""
:
" #""Geänderter Typ"""
)。实际存储的值为:#"Geänderter Typ"
(尽管#
之前的标签空间未显示)。第一个"
表示字符串的开头。直接在""
之后的#
被解释为单个双引号字符,以存储为字符串的一部分。最后的"""
被解释为首先要存储的"
字符,然后是字符串的结束边界。"""
位于字符串的开头,则它首先被解释为字符串的strating边界,然后是"
要存储的字符。由于答案(Csv.Document(File.Contents(""C:\Users\USERNAME\Desktop\censored\NameOfTheFile.csv""
)中寻址的字符串的原始部分是硬编码字符串的一部分,因此""
表示字符串中存储的"
。< / p>
由于需要包含存储的"
以使代码正常工作,并且由于Datei2
变量在任一端都不包含存储的"
,因此{{1需要在"""
变量的任一侧保持字符串中存储的"
。
Datei2