【问题标题】:File open prompt Function code not working - don't know why文件打开提示功能代码不起作用-不知道为什么
【发布时间】:2014-10-28 04:25:35
【问题描述】:

我有一个调用函数文件(路径)的 Sub ImportTest1()。导入子似乎工作正常,但我不能确定,因为在设置 QueryTable 内容以将文本文件打开到 Excel 工作表时,Function 部分不起作用。下面的代码是我目前所拥有的(粗体部分是不起作用的部分),我不确定这是什么问题。

Sub ImportTest1()

Dim path As String

'CALL TO OPEN FILE DIALOG BOX
path = opener()
If path = "" Then
    Exit Sub
End If

'CALL TO FILE OPEN FUNCTION
files (path)

End Sub

Function opener()

Dim sFile As String

With UserForm1.CommonDialog1
.Filter = "All Files (*.*)|*.*"
.ShowOpen
If Len(.FileName) = 0 Then
    Exit Function
End If
sFile = .FileName
End With
Unload UserForm1

opener = sFile

End Function

Function files(path As String)

Workbooks.OpenText FileName:="prt.", Origin:=xlWindows, StartRow:=2, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(1, 1, 1, 1, 1, 1)

End Function

【问题讨论】:

  • 你的FieldInfo不是需要取二维数组的数组吗?我可能是错的,但我认为您至少需要FieldInfo:Array(Array(0,1), Array(1,1), Array(2,1), etc.,我认为您需要它是Array(1,2,3, etc.) 而不是Array(1,1,1,...)
  • 当我使用记录宏来查找prt.文件数组是并查看了我得到的那部分...
  • 你说得到错误的代码行是粗体的,但我看不到粗体。错误到底是什么意思?
  • 另外,您似乎从opener() 获取文件路径和名称,然后将结果path 传递给files(path),但您没有使用path它。您的意思是使用FileName:=path 而不是FileName:="prt."
  • 哦,我只是在这部分使用原始宏,但由于将文件更改为变量选择,我不确定......所以路径是所选文件位置的副本吗??跨度>

标签: excel file vba import prompt


【解决方案1】:

我认为您可以大大简化您的代码,并只处理您想要实现的目标。从您之前的 cmets 和原始帖子中我可以看出,您希望 A. 从用户那里检索文件名和路径。您可以通过以下方式做到这一点

f = InputBox(Prompt:="Please enter a file path and name.")

这会弹出一个对话框,用户可以在其中输入一些文本。 f 中存储的将是一个表示文件名和路径的字符串。例如,用户可以输入C:\Users\Owner\Desktop\myFile.csv 之类的内容。

如果你想打开存储在 f 中的那个文件,你可以试试你帖子里已有的东西

Workbooks.OpenText Filename:=f, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(1,1), Array(2,1), Array(3,1))

这假设输入了一个 3 列的逗号分隔文件,但您可以将其修改为您喜欢的任何内容。

总的来说,您可能只需要这四行 vba 代码即可完成您想要完成的任务。你可以把它放到一个子程序(不是函数)中,就像这样

Sub OpenMyFile()
f = InputBox(Prompt:="Please enter a file path and name.")
Workbooks.OpenText Filename:=f, DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(1,1), Array(2,1), Array(3,1))
ActiveSheet.UsedRange.Copy ThisWorkbook.Sheets(1).Cells(1, 1)
ActiveWorkbook.Close False
end sub

希望对你有帮助。

【讨论】:

  • 啊,谢谢,这容易多了。是否需要输入文件路径而不是选择的文件?只是为了澄清 f 定义为:String 或 Long 还是其他什么?
  • 请注意我已编辑以更正错字,因此请使用已编辑的版本。这段代码假定用户将在一个字符串中一起输入整个路径和文件名。看我的例子:C:\Users\Owner\Desktop\myFileName.csv.
  • 只是文件名:=f 那么呢?我认为这会复杂得多,过去几周 VBA 让我很恼火 :) 感谢您的帮助
  • 是的,文件名:=f。当然,我不太清楚您要打开的文件的确切性质。我的示例是 .csv 文件,因此您必须修改规范以接受您尝试打开的文件。
  • 这是一种文本文件,通常称为“prt#”。最后没有.txt。当我手动复制数据时,我必须选择“所有文件”类型才能选择所需的文件。我是只在输入框中输入文件名还是整个路径。我尝试了整个路径,但没有奏效
猜你喜欢
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-19
  • 2014-01-17
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多