2017-05-19 12 views
0

HP Scanjet Enterprise Flow 7500スキャナーから文書をスキャンするために作成されたMS Access 2013でマクロを実行し、その結果をPDFとして保存し、組織内の他の人に自動的に電子メールで送信します。アクセスVBAが遅いWIA

マクロ自体は実行する必要がありますが、スキャナに付属のHPソフトウェアと比較すると、マクロのスキャン部分の処理に時間がかかります。 HPソフトウェアでは、23ページをスキャンする時間は約30秒でした。マクロでは、その時に約3〜4枚のシートがスキャンされました。スキャナを制御するために使用しているコードを以下で見つけてください。実行速度を向上させるために改善または変更できるものは誰にでも見えますか?

Const WIA_FORMAT_JPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}" 

Private Sub cmdOK_Click() 

Dim intPages       As Integer 'number of pages 
Dim img         As wia.ImageFile 
Dim strPath        As String 
Dim strPathImg       As String 
Dim strFileJPG       As String 
Dim txt_id        As String 
Dim strRPTScan       As String 

    strPath = "H:\Scan\" 'set path to save files 
    strPathImg = "H:\Scan\Images\" 
    intPages = 1 

    On Error GoTo ErrorHandler 

'scan 
ScanStart: 
Dim DialogScan       As New wia.CommonDialog 
Dim DPI         As Integer 
Dim PP         As Integer 
Dim l         As Integer 
Dim Scanner        As wia.Device 
Dim intVerticalExtent     As Integer 
Dim intOneTwoSided      As Integer 

    Set Scanner = DialogScan.ShowSelectDevice(wia.WiaDeviceType.ScannerDeviceType, False, False) 

    'Set page length 
    Select Case fraPaperFormat 
      Case 1 
        intVerticalExtent = 1650 
        strRPTScan = "rptScan11" 
      Case 2 
        intVerticalExtent = 2100 
        strRPTScan = "rptScan14" 
    End Select 
    'Set single or two-sided scanning 
    Select Case fraSingleTwoSided 
      Case 1 
        intOneTwoSided = 1 
      Case 2 
        intOneTwoSided = 5 
    End Select 

    'Set scanner properties depending on userform letter format values 
    With Scanner 
      .Properties("3088").Value = intOneTwoSided        'determined above 
      .Items(1).Properties("Horizontal Resolution").Value = 150 
      .Items(1).Properties("Vertical Resolution").Value = 150 
      .Items(1).Properties("6149").Value = 0   'x point to start scan 
      .Items(1).Properties("6150").Value = 0 'y point to start scan 
      .Items(1).Properties("Horizontal Extent").Value = 1275 
      .Items(1).Properties("Vertical Extent").Value = intVerticalExtent  'determined above 
    End With 

    'Start Scan if err number -2145320957 Scan document finish 
    Do While Err.Number <> -2145320957 'error number is ADF status don't feed document 
      On Error GoTo here 
      Set img = Scanner.Items(1).Transfer(WIA_FORMAT_JPEG) 
      strFileJPG = strPathImg & CStr(intPages) & ".jpg" 
      img.SaveFile (strFileJPG) 'save files .jpg in temp folder 
      DoCmd.SetWarnings False 
      DoCmd.RunSQL "insert into scantemp (picture) values ('" & strFileJPG & "')" 'insert picture temp to table scan temp 
      intPages = intPages + 1 'add number pages 
here: 
    Loop 

'after finish scan start convert to pdf 

助けてください。

答えて

1

明らかに、HPアプリケーションは、ADF内のすべてのページをスキャンするようにHPアプリケーションが指示する可能性があるため、VBAコードよりも速いジョブを実行できます。私が知る限り、WIAを使うと、これを回避することはできません。

コードを最適化できる方法の1つは、まずすべての画像をスキャンしてコレクションに追加し、コレクション内のすべてのファイルを一時ファイルに保存してから、データベースに追加しますそれぞれのイメージを別々に処理する代わりに、単一のクエリを使用します。

さらに最適化されたスキャンソリューションは、スキャンをスキャンして同時に処理するマルチスレッドを実装します。 VBAにはマルチスレッドのネイティブ実装はありませんが、Web上にはそれぞれ独自の制限がある2つのソリューションがあります。

+0

私はそれができないと思っていましたが、私はちょうどその場合に尋ねると思いました。私はこれらの新しい提案にあなたの研究をさらに進めていきます。助けてくれてありがとう。 – viRg