阅读背景:

VBA如何获取一个运行程序生成的excel路径.

来源:互联网 
Sub test()
Workbooks.Open "G:\work11111
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

19 个解决方案

#1


' (MS Excel / VBA代码)

' MS Excel 应用程序的路径:   Application.Path
' zoneinfo.csv文档的路径:    Workbooks("zoneinfo.csv").Path

#2


注意: 新建的工作簿(还未保存到磁盘的),它的文档路径很可能是“空串”。

#3


 
CurDir 函数
      

返回一个 Variant (String),用来代表当前的路径。

语法

CurDir[(drive)]

可选的 drive 参数是一个字符串表达式,它指定一个存在的驱动器。如果没有指定驱动器,或 drive 是零长度字符串 (""),则 CurDir 会返回当前驱动器的路径。

#4


引用 1 楼 Chen8013 的回复:
' (MS Excel / VBA代码)

' MS Excel 应用程序的路径:   Application.Path
' zoneinfo.csv文档的路径:    Workbooks("zoneinfo.csv").Path

....那我这段代码该如何改.....

#5


引用 3 楼 zhao4zhong1 的回复:
 
CurDir 函数
      

返回一个 Variant (String),用来代表当前的路径。

语法

CurDir[(drive)]

可选的 drive 参数是一个字符串表达式,它指定一个存在的驱动器。如果没有指定驱动器,或 drive 是零长度字符串 (""),则 CurDir 会返回当前驱动器的路径。

我有点看不懂.....那我这段代码怎么改

#6


 
Dir 函数
      

返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。

语法

Dir[(pathname[, attributes])]

Dir 函数的语法具有以下几个部分:

部分 描述 
pathname 可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。 
attributes 可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。  


设置值

attributes 参数的设置可为:

常数 值 描述 
vbNormal 0 (缺省) 指定没有属性的文件。 
vbReadOnly 1 指定无属性的只读文件 
vbHidden 2 指定无属性的隐藏文件 
VbSystem 4 指定无属性的系统文件 
vbVolume 8 指定卷标文件;如果指定了其它属性,则忽略vbVolume 
vbDirectory 16 指定无属性文件及其路径和文件夹。 


注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。

说明

Dir 支持多字符 (*) 和单字符 (?) 的通配符来指定多重文件。

 由于 Macintosh 不支持通配符,使用文件类型指定文件组。可以使用 MacID 函数指定文件类型而不用文件名。比如,下列语句返回当前文件夹中第一个TEXT文件的名称:

Dir("SomePath", MacID("TEXT"))

 为选中文件夹中所有文件,指定一空串:

Dir("")

在 Microsoft Windows 中,如果在Dir函数中使用MacID函数,将产生错误。

任何大于256的attribute值都被认为是MacID 函数的值。

在第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。

Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。

提示 由于文件名并不会以特别的次序来返回,所以可以将文件名存储在一个数组中,然后再对这个数组排序。

#7


  脚本运行时库   

Files 集合
请参阅
Drive 对象 | Drives 集合 | File 对象 | Folder 对象 | Folders 集合
语言
JScript

VBScript

显示所有语言
一个文件夹中所有 File 对象的集合。

说明
[JScript]

下面这个例子说明了如何获得一个 Files 集合以及如何使用 Enumerator 对象和 for 语句来遍历该集合: 

[JScript]
function ShowFolderFileList(folderspec)
{
   var fso, f, f1, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.files);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}
[VBScript]

下列代码说明如何获取 Files 集合,以及如何使用 For Each...Next 语句遍历该集合: 

[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name 
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function
方法
Files 集合没有方法。

属性
Count 属性 | Item 属性

请参阅
Drive 对象 | Drives 集合 | File 对象 | Folder 对象 | Folders 集合



--------------------------------------------------------------------------------

© 2001 Microsoft Corporation. 保留所有权利。

#8


引用 7 楼 zhao4zhong1 的回复:
  脚本运行时库   

Files 集合
请参阅
Drive 对象 | Drives 集合 | File 对象 | Folder 对象 | Folders 集合
语言
JScript

VBScript

显示所有语言
一个文件夹中所有 File 对象的集合。

说明
[JScript]

下面这个例子说明了如何获得一个 Files 集合以及如何使用 Enumerator 对象和 for 语句来遍历该集合: 

[JScript]
function ShowFolderFileList(folderspec)
{
   var fso, f, f1, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.files);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}
[VBScript]

下列代码说明如何获取 Files 集合,以及如何使用 For Each...Next 语句遍历该集合: 

[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name 
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function
方法
Files 集合没有方法。

属性
Count 属性 | Item 属性

请参阅
Drive 对象 | Drives 集合 | File 对象 | Folder 对象 | Folders 集合



--------------------------------------------------------------------------------

© 2001 Microsoft Corporation. 保留所有权利。



我说的那个运行程序,在软件里点开的时候,先生成一个‘加工单总信息’,然后再运行我自己做的xlt格式单,同时我的xlt格式单要去获取这个‘加工单总信息’里的内容。而我写的代码我不知道怎么同时提取到这个运行程序生成的‘加工单总信息’。还有就是这个‘加工单总信息’很多很多,不同的目录下都有一个叫b.xlt的‘加工单总信息’。搜索叫这个名字的不现实,我只需要在点击运行程序时生成的那个路径!比如点击运行程序,我就可以获取到它将‘加工单总信息’创建在G:\AA\aa\1这个地方

#9


引用 楼主 qq_30519247 的回复:
想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

#10


引用 9 楼 Chen8013 的回复:
Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

#11



FileMon
FindFirstChangeNotification
ReadDirectoryChangesW

#12


引用 9 楼 Chen8013 的回复:
Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

我这段代码中G:\work11111\0_1\zoneinfo.csv就是那个外部exe生成的,但是在软件里是不停建工作目录的,所以我一定要获取到这个exe所生成的工作目录路径!

#13


引用 11 楼 zhao4zhong1 的回复:

FileMon
FindFirstChangeNotification
ReadDirectoryChangesW


不好意思。。实在看不懂您写的啥

就我这段代码该如何改

#14


引用 10 楼 qq_30519247 的回复:
Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

#15


引用 14 楼 Chen8013 的回复:
Quote: 引用 10 楼 qq_30519247 的回复:

Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

怎么说呢,找生成路径规律是不可能的,因为这个工作目录是可以自己选择存放在哪的,就像另存为一样!现在做的是文档A的工作,下次就是B的工作,下次可能就是别的工作!而每次运行这个exe程序的时候它一定会把那个xlt文件存放在当前打开的文档路径下面!
比如这次做的是文档A,另存在G:\youyou\dada\A。那么在运行了这个exe程序的时候,它就一定会在G:\youyou\dada\A这个文件夹下面生成一个a.csv,路径也就是G:\youyou\dada\A\a.csv   那同理   
这次做的是文档B,另存在G:\youyou\dada\B 运行exe这个程序  那就是G:\youyou\dada\B\a.csv
每次生成的文件都是这个a.csv   也就是说所有文档在软件应用中只要点了这个exe这个程序,每个文件夹里都会有a.csv
我前面也说过了再运行exe的时候同时也会调用我自己做的B.xlt。这个B.xlt会去调用a.csv这个文件里面的数据。
因为从一个文件薄跨簿调用数据必须要两个文件同时打开,那我只能去寻找每次这个exe生成的当时那个文档下的路径

啊啊啊啊啊啊要疯了我   大神我只能解释到这了 我极限了  我先把分给你好了!实在弄不了的话我就只能做一个弹出选择路径的窗口了。。。。谢谢 

#16


Process Monitor 实时监视文件系统、注册表、进程、线程和 DLL 活动。  https://www.microsoft.com/china/technet/sysinternals/utilities/processmonitor.mspx

#17


引用 14 楼 Chen8013 的回复:
Quote: 引用 10 楼 qq_30519247 的回复:

Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

大神你也解决不了么

#18


引用 15 楼 qq_30519247 的回复:
Quote: 引用 14 楼 Chen8013 的回复:

Quote: 引用 10 楼 qq_30519247 的回复:

Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

怎么说呢,找生成路径规律是不可能的,因为这个工作目录是可以自己选择存放在哪的,就像另存为一样!现在做的是文档A的工作,下次就是B的工作,下次可能就是别的工作!而每次运行这个exe程序的时候它一定会把那个xlt文件存放在当前打开的文档路径下面!
比如这次做的是文档A,另存在G:\youyou\dada\A。那么在运行了这个exe程序的时候,它就一定会在G:\youyou\dada\A这个文件夹下面生成一个a.csv,路径也就是G:\youyou\dada\A\a.csv   那同理   
这次做的是文档B,另存在G:\youyou\dada\B 运行exe这个程序  那就是G:\youyou\dada\B\a.csv
每次生成的文件都是这个a.csv   也就是说所有文档在软件应用中只要点了这个exe这个程序,每个文件夹里都会有a.csv
我前面也说过了再运行exe的时候同时也会调用我自己做的B.xlt。这个B.xlt会去调用a.csv这个文件里面的数据。
因为从一个文件薄跨簿调用数据必须要两个文件同时打开,那我只能去寻找每次这个exe生成的当时那个文档下的路径

啊啊啊啊啊啊要疯了我   大神我只能解释到这了 我极限了  我先把分给你好了!实在弄不了的话我就只能做一个弹出选择路径的窗口了。。。。谢谢 


工作A和B的命名是有规律的么,还是由操作员自己决定的,如果是前者,按照规律来找路径。如果是后者操作员自己决定写了什么路径,那么弹出个对话框让他自己决定取什么路径下的文件也理所当然。

#19


引用 15 楼 qq_30519247 的回复:
Quote: 引用 14 楼 Chen8013 的回复:

Quote: 引用 10 楼 qq_30519247 的回复:

Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

怎么说呢,找生成路径规律是不可能的,因为这个工作目录是可以自己选择存放在哪的,就像另存为一样!现在做的是文档A的工作,下次就是B的工作,下次可能就是别的工作!而每次运行这个exe程序的时候它一定会把那个xlt文件存放在当前打开的文档路径下面!
比如这次做的是文档A,另存在G:\youyou\dada\A。那么在运行了这个exe程序的时候,它就一定会在G:\youyou\dada\A这个文件夹下面生成一个a.csv,路径也就是G:\youyou\dada\A\a.csv   那同理   
这次做的是文档B,另存在G:\youyou\dada\B 运行exe这个程序  那就是G:\youyou\dada\B\a.csv
每次生成的文件都是这个a.csv   也就是说所有文档在软件应用中只要点了这个exe这个程序,每个文件夹里都会有a.csv
我前面也说过了再运行exe的时候同时也会调用我自己做的B.xlt。这个B.xlt会去调用a.csv这个文件里面的数据。
因为从一个文件薄跨簿调用数据必须要两个文件同时打开,那我只能去寻找每次这个exe生成的当时那个文档下的路径

啊啊啊啊啊啊要疯了我   大神我只能解释到这了 我极限了  我先把分给你好了!实在弄不了的话我就只能做一个弹出选择路径的窗口了。。。。谢谢 

既然你说了:
B.xlt始终会“跟外部程序”在一起、它要调用你的B.xlt(这“调用”难道不是打开这个模板文档吗?)
那B.xlt被打开时,它的里面的宏是有机会被执行的;
B.xlt的宏代码可以取得“自己的路径”,不就知道“外部程序”的路径了吗!
外部程序输出的csv文档,“相对路径”是确定的,那根据“外部程序”的路径,不就决定了csv文档的路径了吗?

_1\zoneinfo.csv" Workbooks.Open "G:\work11111
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

19 个解决方案

#1


' (MS Excel / VBA代码)

' MS Excel 应用程序的路径:   Application.Path
' zoneinfo.csv文档的路径:    Workbooks("zoneinfo.csv").Path

#2


注意: 新建的工作簿(还未保存到磁盘的),它的文档路径很可能是“空串”。

#3


 
CurDir 函数
      

返回一个 Variant (String),用来代表当前的路径。

语法

CurDir[(drive)]

可选的 drive 参数是一个字符串表达式,它指定一个存在的驱动器。如果没有指定驱动器,或 drive 是零长度字符串 (""),则 CurDir 会返回当前驱动器的路径。

#4


引用 1 楼 Chen8013 的回复:
' (MS Excel / VBA代码)

' MS Excel 应用程序的路径:   Application.Path
' zoneinfo.csv文档的路径:    Workbooks("zoneinfo.csv").Path

....那我这段代码该如何改.....

#5


引用 3 楼 zhao4zhong1 的回复:
 
CurDir 函数
      

返回一个 Variant (String),用来代表当前的路径。

语法

CurDir[(drive)]

可选的 drive 参数是一个字符串表达式,它指定一个存在的驱动器。如果没有指定驱动器,或 drive 是零长度字符串 (""),则 CurDir 会返回当前驱动器的路径。

我有点看不懂.....那我这段代码怎么改

#6


 
Dir 函数
      

返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。

语法

Dir[(pathname[, attributes])]

Dir 函数的语法具有以下几个部分:

部分 描述 
pathname 可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。 
attributes 可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。  


设置值

attributes 参数的设置可为:

常数 值 描述 
vbNormal 0 (缺省) 指定没有属性的文件。 
vbReadOnly 1 指定无属性的只读文件 
vbHidden 2 指定无属性的隐藏文件 
VbSystem 4 指定无属性的系统文件 
vbVolume 8 指定卷标文件;如果指定了其它属性,则忽略vbVolume 
vbDirectory 16 指定无属性文件及其路径和文件夹。 


注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。

说明

Dir 支持多字符 (*) 和单字符 (?) 的通配符来指定多重文件。

 由于 Macintosh 不支持通配符,使用文件类型指定文件组。可以使用 MacID 函数指定文件类型而不用文件名。比如,下列语句返回当前文件夹中第一个TEXT文件的名称:

Dir("SomePath", MacID("TEXT"))

 为选中文件夹中所有文件,指定一空串:

Dir("")

在 Microsoft Windows 中,如果在Dir函数中使用MacID函数,将产生错误。

任何大于256的attribute值都被认为是MacID 函数的值。

在第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。

Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。

提示 由于文件名并不会以特别的次序来返回,所以可以将文件名存储在一个数组中,然后再对这个数组排序。

#7


  脚本运行时库   

Files 集合
请参阅
Drive 对象 | Drives 集合 | File 对象 | Folder 对象 | Folders 集合
语言
JScript

VBScript

显示所有语言
一个文件夹中所有 File 对象的集合。

说明
[JScript]

下面这个例子说明了如何获得一个 Files 集合以及如何使用 Enumerator 对象和 for 语句来遍历该集合: 

[JScript]
function ShowFolderFileList(folderspec)
{
   var fso, f, f1, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.files);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}
[VBScript]

下列代码说明如何获取 Files 集合,以及如何使用 For Each...Next 语句遍历该集合: 

[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name 
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function
方法
Files 集合没有方法。

属性
Count 属性 | Item 属性

请参阅
Drive 对象 | Drives 集合 | File 对象 | Folder 对象 | Folders 集合



--------------------------------------------------------------------------------

© 2001 Microsoft Corporation. 保留所有权利。

#8


引用 7 楼 zhao4zhong1 的回复:
  脚本运行时库   

Files 集合
请参阅
Drive 对象 | Drives 集合 | File 对象 | Folder 对象 | Folders 集合
语言
JScript

VBScript

显示所有语言
一个文件夹中所有 File 对象的集合。

说明
[JScript]

下面这个例子说明了如何获得一个 Files 集合以及如何使用 Enumerator 对象和 for 语句来遍历该集合: 

[JScript]
function ShowFolderFileList(folderspec)
{
   var fso, f, f1, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.files);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}
[VBScript]

下列代码说明如何获取 Files 集合,以及如何使用 For Each...Next 语句遍历该集合: 

[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name 
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function
方法
Files 集合没有方法。

属性
Count 属性 | Item 属性

请参阅
Drive 对象 | Drives 集合 | File 对象 | Folder 对象 | Folders 集合



--------------------------------------------------------------------------------

© 2001 Microsoft Corporation. 保留所有权利。



我说的那个运行程序,在软件里点开的时候,先生成一个‘加工单总信息’,然后再运行我自己做的xlt格式单,同时我的xlt格式单要去获取这个‘加工单总信息’里的内容。而我写的代码我不知道怎么同时提取到这个运行程序生成的‘加工单总信息’。还有就是这个‘加工单总信息’很多很多,不同的目录下都有一个叫b.xlt的‘加工单总信息’。搜索叫这个名字的不现实,我只需要在点击运行程序时生成的那个路径!比如点击运行程序,我就可以获取到它将‘加工单总信息’创建在G:\AA\aa\1这个地方

#9


引用 楼主 qq_30519247 的回复:
想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

#10


引用 9 楼 Chen8013 的回复:
Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

#11



FileMon
FindFirstChangeNotification
ReadDirectoryChangesW

#12


引用 9 楼 Chen8013 的回复:
Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

我这段代码中G:\work11111\0_1\zoneinfo.csv就是那个外部exe生成的,但是在软件里是不停建工作目录的,所以我一定要获取到这个exe所生成的工作目录路径!

#13


引用 11 楼 zhao4zhong1 的回复:

FileMon
FindFirstChangeNotification
ReadDirectoryChangesW


不好意思。。实在看不懂您写的啥

就我这段代码该如何改

#14


引用 10 楼 qq_30519247 的回复:
Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

#15


引用 14 楼 Chen8013 的回复:
Quote: 引用 10 楼 qq_30519247 的回复:

Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

怎么说呢,找生成路径规律是不可能的,因为这个工作目录是可以自己选择存放在哪的,就像另存为一样!现在做的是文档A的工作,下次就是B的工作,下次可能就是别的工作!而每次运行这个exe程序的时候它一定会把那个xlt文件存放在当前打开的文档路径下面!
比如这次做的是文档A,另存在G:\youyou\dada\A。那么在运行了这个exe程序的时候,它就一定会在G:\youyou\dada\A这个文件夹下面生成一个a.csv,路径也就是G:\youyou\dada\A\a.csv   那同理   
这次做的是文档B,另存在G:\youyou\dada\B 运行exe这个程序  那就是G:\youyou\dada\B\a.csv
每次生成的文件都是这个a.csv   也就是说所有文档在软件应用中只要点了这个exe这个程序,每个文件夹里都会有a.csv
我前面也说过了再运行exe的时候同时也会调用我自己做的B.xlt。这个B.xlt会去调用a.csv这个文件里面的数据。
因为从一个文件薄跨簿调用数据必须要两个文件同时打开,那我只能去寻找每次这个exe生成的当时那个文档下的路径

啊啊啊啊啊啊要疯了我   大神我只能解释到这了 我极限了  我先把分给你好了!实在弄不了的话我就只能做一个弹出选择路径的窗口了。。。。谢谢 

#16


Process Monitor 实时监视文件系统、注册表、进程、线程和 DLL 活动。  https://www.microsoft.com/china/technet/sysinternals/utilities/processmonitor.mspx

#17


引用 14 楼 Chen8013 的回复:
Quote: 引用 10 楼 qq_30519247 的回复:

Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

大神你也解决不了么

#18


引用 15 楼 qq_30519247 的回复:
Quote: 引用 14 楼 Chen8013 的回复:

Quote: 引用 10 楼 qq_30519247 的回复:

Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

怎么说呢,找生成路径规律是不可能的,因为这个工作目录是可以自己选择存放在哪的,就像另存为一样!现在做的是文档A的工作,下次就是B的工作,下次可能就是别的工作!而每次运行这个exe程序的时候它一定会把那个xlt文件存放在当前打开的文档路径下面!
比如这次做的是文档A,另存在G:\youyou\dada\A。那么在运行了这个exe程序的时候,它就一定会在G:\youyou\dada\A这个文件夹下面生成一个a.csv,路径也就是G:\youyou\dada\A\a.csv   那同理   
这次做的是文档B,另存在G:\youyou\dada\B 运行exe这个程序  那就是G:\youyou\dada\B\a.csv
每次生成的文件都是这个a.csv   也就是说所有文档在软件应用中只要点了这个exe这个程序,每个文件夹里都会有a.csv
我前面也说过了再运行exe的时候同时也会调用我自己做的B.xlt。这个B.xlt会去调用a.csv这个文件里面的数据。
因为从一个文件薄跨簿调用数据必须要两个文件同时打开,那我只能去寻找每次这个exe生成的当时那个文档下的路径

啊啊啊啊啊啊要疯了我   大神我只能解释到这了 我极限了  我先把分给你好了!实在弄不了的话我就只能做一个弹出选择路径的窗口了。。。。谢谢 


工作A和B的命名是有规律的么,还是由操作员自己决定的,如果是前者,按照规律来找路径。如果是后者操作员自己决定写了什么路径,那么弹出个对话框让他自己决定取什么路径下的文件也理所当然。

#19


引用 15 楼 qq_30519247 的回复:
Quote: 引用 14 楼 Chen8013 的回复:

Quote: 引用 10 楼 qq_30519247 的回复:

Quote: 引用 9 楼 Chen8013 的回复:

Quote: 引用 楼主 qq_30519247 的回复:

想在一个软件上做个小加工单,也不会用VBA,做来做去也就这样实现了功能,但是还有最后一个大问题,因为是 先运行软件里一个程序,然后软件在一个地方生成了一个‘加工单总信息’,然后我要提取这个‘加工单总信息’的内容来写入另一个xlt表格中,那问题就是我要怎么样获取这个软件程序生成的那个‘加工单总信息’的路径!这段代码该怎么改呀
Sub test()
Workbooks.Open "G:\work11111\0_1\zoneinfo.csv"
Workbooks("zoneinfo.csv").Sheets("zoneinfo").Range("D1:D50").Copy _
            Workbooks("sheet1").Sheets("Sheet1").Range("C2")
Workbooks("zoneinfo.csv").Close vbFalse
End Sub

这段话的含义不明确。


你这“一个程序”是外部的exe程序?
是“你自己的”还是第三方开发好的?
你是“如何调用并等待文档生成”的?

是外部的exe程序.........这个exe程序会调用在它文件夹下的一个名叫B.xlt的文件。所以我只需要改个名叫B.xlt的就行了。但是我自己的这个B.xlt这个文件里面的VBA代码中,还需要获取这个外部exe程序生成的它自己程序的一个csv的文件路径。。。能获取到么。

1. 既然B.xlt里面有你的VBA代码,如果能被执行的话,那么至少可以得到“部分路径”。
2. 你自己找一下它生成的路径、文档名的规律,看能不能确定最终的完整路径。
3. 它生成输出文件后,能不能自动调用Excel把它打开?
  如果可以自动打开的话,你只要“按文档名找到工作簿”对象,就可以得到它的路径了。

4. 最后的“终极武器”:监视“外部exe程序”所在文件夹的变化。
    但这个应用难度有点大,未必适合你使用………… 

怎么说呢,找生成路径规律是不可能的,因为这个工作目录是可以自己选择存放在哪的,就像另存为一样!现在做的是文档A的工作,下次就是B的工作,下次可能就是别的工作!而每次运行这个exe程序的时候它一定会把那个xlt文件存放在当前打开的文档路径下面!
比如这次做的是文档A,另存在G:\youyou\dada\A。那么在运行了这个exe程序的时候,它就一定会在G:\youyou\dada\A这个文件夹下面生成一个a.csv,路径也就是G:\youyou\dada\A\a.csv   那同理   
这次做的是文档B,另存在G:\youyou\dada\B 运行exe这个程序  那就是G:\youyou\dada\B\a.csv
每次生成的文件都是这个a.csv   也就是说所有文档在软件应用中只要点了这个exe这个程序,每个文件夹里都会有a.csv
我前面也说过了再运行exe的时候同时也会调用我自己做的B.xlt。这个B.xlt会去调用a.csv这个文件里面的数据。
因为从一个文件薄跨簿调用数据必须要两个文件同时打开,那我只能去寻找每次这个exe生成的当时那个文档下的路径

啊啊啊啊啊啊要疯了我   大神我只能解释到这了 我极限了  我先把分给你好了!实在弄不了的话我就只能做一个弹出选择路径的窗口了。。。。谢谢 

既然你说了:
B.xlt始终会“跟外部程序”在一起、它要调用你的B.xlt(这“调用”难道不是打开这个模板文档吗?)
那B.xlt被打开时,它的里面的宏是有机会被执行的;
B.xlt的宏代码可以取得“自己的路径”,不就知道“外部程序”的路径了吗!
外部程序输出的csv文档,“相对路径”是确定的,那根据“外部程序”的路径,不就决定了csv文档的路径了吗?

_1\



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: