VBA如何检验文件路径是不是正确?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA如何检验文件路径是不是正确?相关的知识,希望对你有一定的参考价值。

VBA,我想检测文件路径和文件夹路径是否正确,但是我在正确的文件路径后面加了 . 一个英文半角的点,还有几条 \ ,还是会显示文件路径正确从而通过IF判断导致异常!!!我在网上搜了好几种判断方式,有些可以判断出,有些路径明明是错的,却判断出正确,我不知道怎么回事!不知道有没有有效地文件路径判断方法?
谢谢一楼,但是如果你在你的地址后加一个 “\..”显然不正确,还是会显示文件存在。
二楼,我之前用的就是这种,在正确路径后输入“.”或者好几个“\”还是会显示路径正确。怎么办?

Sub aa()
Dim fso
Path1 = "c:\\test.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(Path1) Then
MsgBox "路径正确,文件存在"
Else
MsgBox "路径不正确,文件不存在"
End If
End Sub

你说的在路径后面加.或者加\\是什么意思?
举个例子好么?我在我这里测试没有问题.
参考技术A Dim StrPath As String
StrPath = "z:\test.txt\.."
s = InStrRev(StrPath, "\")
If s > 0 Then
If Dir(StrPath) = Mid(StrPath, s + 1, Len(StrPath) - s) Then
MsgBox "文件存在"
Else
MsgBox "文件不存在"
End If
End If本回答被提问者采纳

如何使用 VBA 在 Excel 中正确添加表格列?

【中文标题】如何使用 VBA 在 Excel 中正确添加表格列?【英文标题】:How do I correctly add Table Columns in Excel using VBA? 【发布时间】:2020-12-20 12:58:38 【问题描述】:

问题:我在使用 VBA 向多个工作簿中的表添加列时收到间歇性结果。在一次情况下,我收到一个超出范围的错误。有时会添加所有新列,但大多数情况下只会添加一些列,并将剩余的列标题带到下一行,而不是创建列。

我正在尝试做的事情:我正在尝试将 7 列添加到现有表中,然后将数据添加到引用每行中现有表数据的那些列中。

我尝试过的:我尝试过不同版本的代码。

在循环添加数据之前,我在开头添加了这段代码。此代码错误并出现“脚本超出范围”错误。它将添加前两列,它将第三列名称添加到第一行的第一个单元格,然后尝试添加第四列时出错。 tblCols 变量是添加新列之前所有表列的计数。

Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 1).Name = "Transaction Name In"
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 2).Name = "Transaction Name Out"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 3) = "Batch Map Name"    
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 4).Name = "Inbound Path and File"
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 5).Name = "Outbound Path and File"
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 6).Name = "Lookup Tables"
Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 7).Name = "Logical Path"

如果我使用下面的代码并简单地添加新数据,大多数情况下,简单地添加此数据会强制创建新列,然后循环后面的代码用于命名标题。但是,这也并不总是有效。我不会收到错误,但最后几个列标题将写入第一行,而不是创建列。我对循环代码没有任何问题。

    Dim x As Long

For x = 1 To tblRows
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x, (tblCols + 1)) = CreateTransInName(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x, (tblCols + 2)) = CreateTransOutName(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x, (tblCols + 3)) = CreateBatchMapName(x)
    
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x, (tblCols + 4)) = CreateInboundPath(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x, (tblCols + 5)) = CreateOutboundPath(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x, (tblCols + 6)) = CopyLookupTables(x)
    Worksheets(wsName).ListObjects(tblName).DataBodyRange(x, (tblCols + 7)) = CreatelogicalPath(x)
Next

DoEvents

Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 1) = "Transaction Name In"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 2) = "Transaction Name Out"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 3) = "Batch Map Name"

Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 4) = "Inbound Path and File"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 5) = "Outbound Path and File"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 6) = "Lookup Tables"
Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 7) = "Logical Path"
MsgBox "Naming Convention Completed"

如果有人有建议,我愿意接受。我真的有点困惑,第一块代码不起作用。

【问题讨论】:

为什么第三列使用 HeaderRowRange,与其他列不一致? 正如 Jeremy Hodge 上面所写 - 您应该将 HeaderRowRange(tblCols + 3) 替换为 ListColumns.Add(tblCols + 3).Name。我建议有这个代码块(它调整 ListObject 的大小并为标题提供名称)** 在顶部**(在复制数据的块之前),因为 Excel 在调整 ListObjects 的大小时往往会做一些额外的操作。 @Jeremy 和 Tomek - 我没有注意到这一点。我复制了代码,知道我可以简单地用 ListColumns.Add 替换它,但错过了一个。感谢收看。 【参考方案1】:

您可以使用这些方法来添加列。将所有列名放在一个字符串数组中,然后遍历这些项目,随时添加。

Public Sub AddColumnsToTable()

Dim ColumnHeaders(1 To 3) As String
Dim col As ListColumn
Dim i As Integer

ColumnHeaders(1) = "Hello"
ColumnHeaders(2) = "This is"
ColumnHeaders(3) = "A new column"

For i = 1 To 3

    Set col = Me.ListObjects(1).ListColumns.Add
    col.Name = ColumnHeaders(i)

Next i

End Sub

【讨论】:

【参考方案2】:

纠正我的复制/粘贴错误,在第一块代码的第 3 行将 HeaderRowRange 替换为 ListColumns.Add 是修复。我帖子中的第一个代码块是添加列的正确方法。我只是犯了一个错误,幸好有人发现了它。

改变这个:

Worksheets(wsName).ListObjects(tblName).HeaderRowRange(tblCols + 3) = "Batch Map Name"

到这里:

Worksheets(wsName).ListObjects(tblName).ListColumns.Add(tblCols + 3) = "Batch Map Name"

【讨论】:

以上是关于VBA如何检验文件路径是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

CFileDialog 如何获取文件夹路径

引用另外表格,提示 #REF!路径也设置好了。被引用的表格不打开就错误,打开就正常。不用vba能处理吗?

如何在excel vba中传递包含excel文件路径的字符串以访问vba

如何在excel VBA中获取保存文件的路径和名称?

如何在 VBA 中设置因月份而异的文件路径?

求代码:winform 检验某路径下的一个xml文件是不是存在,若存在删除,不存在创建。