2016-08-30 26 views
1

私はずっと私の問題の解決策を探していましたが、役に立たなかったことは何も見つかりませんでした!だから私はここの誰かが私の特定の状況に役立つことを願って...あらかじめありがとう!VBAのWindowsポータブルデバイスファイルを参照する際に問題がありますか?

私は、インベントリを内部メモリにテキストファイルとして保存するバーコードスキャナを持っています。 Windows Mobile Device Center 6.1を使用することで、私のPC上でスキャナフォルダをナビゲートし、そのテキストファイルを開いてスキャンしたアイテムを確認することができます。

私は、このテキストファイルを開き、各行の目録を読み、次にそれを使って他のことを行うExcelマクロを作成しています。私はスキャナのテキストファイルを「マイドキュメント」のような場所にコピーすると、これまで成功しています。しかし、私はそれを簡単にし、そのテキストファイルをスキャナから直接開くことができるようにしたい。

私の問題は、スキャナのパスを参照することです。ポータブルデバイスなので、C:などのドライブはありません。代わりに、パスは 'Computer \ MT2070-ML416147 \ Application \ Inventory \ export.txt'のようになります。しかし、入力用にそのパスを開こうとすると、「パスが見つかりません」というエラーが表示されます。

誰かが助けることができれば、私は非常に感謝しています!誰かが持っているコードスニペットが必要な場合は、私に知らせてください。

答えて

2

WindowsのファイルシステムAPIを使用して、添付されたWindows CEデバイスのファイルシステムの内容にアクセスする方法はありません。これは、マウントされていないボリュームであるためです。 WMDCは、添付ファイルを表すシェルフォルダを作成するシェル名前空間ハンドラをインストールするため、Windowsエクスプローラに表示されます。これは、実際のファイルシステムディレクトリではないにもかかわらず、コントロールパネルとネットワークプレイスフォルダと同じ方法です。ファイルシステムの抽象化についてWindowsが手を振っていると考えてください。

すべてが失われていない、しかし、あなたはいくつかのオプションがあります:

  1. デバイスを探索し、そこからデータファイルを取得するには、スマートデバイス接続APIを使用します。https://msdn.microsoft.com/en-us/library/bb384093.aspxを - これは同じAPIエクスプローラでデバイスのシェルフォルダが表示されているときに使用しています。
  2. デバイスからストレージボリューム(SDカードなど)を取り外し、パソコンのSDカードリーダーに接続して、直接ファイルシステムを参照して操作できます。
  3. デバイスから共有場所にデータをプッシュするために、デバイス自体で実行されるプログラムを作成します。

オプション1は最適な結果を得ますが、C++/Win32でコーディングする必要があります。 VBAは、システムプログラミングを行うのに最適な環境ではありません。常にC++で記述し、レイヤーをCOMオブジェクトとして公開し、VBAで消費することができます。 Officeの32ビット/ 64ビットの問題、おそらくはサンドボックスの問題にぶつかるでしょう。

オプション3は、Visual Studio 2008用にWindows CEの "Windows Mobile"フレーバー用の最後のSDKがリリースされたため、やや難しくなります.VSの最新バージョンはサポートされていません。つまり、貧血Compact Framework 3.5またはWinCE APIに対してC++ 03のいずれかを使用することを意味します。偶然にも、これは、iPhoneが出てきたときにWindows Mobileが破壊された理由の一部であると私は信じている。環境はあまりにも無視されており、後ろを追い越せなかった。

0

端末がShell.Application ActiveX経由でアクセスできるかどうかを確認してください。

CLSID:次のように私のために出力される

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 

:以下 "プリンタとFAX" の場所にあるすべての項目を示す一例である
は:: {2227A280-3AEA-1069- A2DE-08002B30309D}

フォルダ名:
プリンタ

ファックス
マイクロソフトXPSドキュメントライター
のPDFCreator
は2013
...- P0086上...- S0002
...- P0087上...- S0002
...- P0049上のOneNoteに送ります。.. 。-S0002
...- ...- S0002
上P0068 ...- ...- S0002

のP0067は次のように、別の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 

たとえば、here,hereおよびhereのように見てください。表示されている項目のいずれかでデバイス名が見つかった場合は、明らかにそのデバイスからファイルを取得できます。

関連する問題