在VBA中引用Windows便携设备文件时遇到问题?

时间:2016-08-30 01:41:56

标签: excel vba wpd

我一直在不知疲倦地寻找解决问题的方法,但没有发现任何有用的东西!所以我希望这里有人可以帮助我的具体情况...提前致谢!

所以,我有一个条形码扫描器,它将库存作为文本文件存储在其内部存储器中。通过使用Windows Mobile Device Center 6.1,我可以在我的PC上浏览扫描仪文件夹并打开该文本文件以查看我扫描的项目。

我正在编写一个excel宏,它将打开该文本文件,读取每行库存,然后用它做其他事情。到目前为止,如果我将扫描仪上的文本文件复制到某些地方,例如“我的文档”,我就取得了成功。但是,我想让它变得简单,并且能够直接从扫描仪打开该文本文件。

我的问题是引用扫描仪的路径。因为它是一个便携式设备,它没有像C:或类似的驱动器。相反,该路径看起来像计算机\ MT2070-ML416147 \ Application \ Inventory \ export.txt'。但是,当我尝试打开输入路径时,我收到一条错误,说“"路径未找到"”。

如果有人可以提供帮助,我会非常感激!如果有人需要我所拥有的代码片段,请告诉我。

2 个答案:

答案 0 :(得分:2)

无法通过Windows文件系统API访问连接的Windows CE设备的文件系统的内容,这是因为它们不是已装入的卷。您的设备出现在Windows资源管理器中,因为WMDC安装了一个Shell命名空间处理程序,该处理程序创建代表连接设备的shell文件夹 - 这与控制面板和网络位置文件夹的工作方式相同,即使它们也不是真正的文件系统目录。可以把它想象成Windows在文件系统抽象上的挥手。

一切都没有丢失,但是,你有几个选择:

  1. 使用智能设备连接API浏览设备并从中获取数据文件:https://msdn.microsoft.com/en-us/library/bb384093.aspx - 这与资源管理器在显示设备的shell文件夹时使用的API相同。
  2. 从设备中取出存储卷(例如SD卡)并将其插入计算机上的SD卡读卡器,以便直接浏览和操作文件系统。
  3. 编写在设备上运行的程序,将数据从设备推送到共享位置。
  4. 选项1将为您提供最佳结果,但可能需要在C ++ / Win32中对其进行编码。 VBA不是进行系统编程的最佳环境。您可以始终使用C ++编写并将您的图层公开为COM对象,然后您可以通过VBA使用它。虽然你会遇到32/64位的Office问题,也可能是沙盒问题。

    选项3有点困难,因为Windows CE的“Windows Mobile”风格的最后一个SDK是针对Visual Studio 2008发布的 - 不支持更新版本的VS.这意味着使用贫穷的Compact Framework 3.5或C ++ 03来对抗WinCE API。巧合的是,我认为这是Windows Mobile在iPhone推出时注定失败的部分原因:环境太过被忽视,背后无法跟上。

答案 1 :(得分:0)

检查您的设备是否可通过Shell.Application ActiveX访问。以下是显示“打印机和传真”位置中所有项目的示例:

Sub Test()

    Set objShellApp = CreateObject("Shell.Application")
    Set objFolder = objShellApp.Namespace("::{2227a280-3aea-1069-a2de-08002b30309d}") ' Printers and Faxes

    Debug.Print "CLSID:" & vbCrLf & objFolder.Self.Path & vbCrLf
    Debug.Print "Folder name: " & vbCrLf & objFolder.Self.Name & vbCrLf
    For Each objItem In objFolder.Items()
        Debug.Print objItem.Name
    Next

End Sub

我的输出如下:

  

CLSID:
  :: {2227A280-3AEA-1069-A2DE-08002B30309D}
  
  文件夹名称:
  打印机
  
  传真
  Microsoft XPS文档编写器
  PDFCreator的
  发送至OneNote 2013
  ...- P0086 on ...- s0002
  ...- P0087 on ...- s0002
  ...- P0049 on ...- S0002
  ...- P0068 on ...- S0002
  ......- P0067 on ...- S0002

尝试其他CLSID,例如:

::{20D04FE0-3AEA-1069-A2D8-08002B30309D} - Computer
::{00f2886f-cd64-4fc9-8ec5-30ef6cdbe8c3} - Scanners and Cameras
::{fb0c9c8a-6c50-11d1-9f1d-0000f8757fcd} - Scanners and Cameras
::{e211b736-43fd-11d1-9efb-0000f8757fcd} - Scanners and Cameras
::{0c15d503-d017-47ce-9016-7b3f978721cc} - Portable Device Values
::{35786d3c-b075-49b9-88dd-029876e11c01} - Portable Devices

看看hereherehere。如果您在其中一个显示的项目中找到设备名称,那么您显然可以从中检索文件。