@KTG

WIA ошибка при установке параметра PAGES (VBA). Почему?

Sub scan()
    Dim objDM As WIA.DeviceManager
    
        Dim objDev As WIA.Device
        
            Dim objItem As WIA.Item
            Dim objImage As WIA.ImageFile
        
        Dim s As String
        Dim i As Integer
        
        Dim p As Property
       
     Set objDM = New WIA.DeviceManager
     For i = 1 To objDM.DeviceInfos.Count
        If objDM.DeviceInfos(i).Type = 1 Then
          s = objDM.DeviceInfos(i).DeviceID
        End If
     Next
     
     Set objDev = objDM.DeviceInfos(s).Connect
     If objDev Is Nothing Then
        MsgBox ("Error: Not device found")
     Else
        objDev.Properties("Document Handling Select").Value = 1
        objDev.Properties("Pages").Value = 1
        
            Set objItem = objDev.Items(1)
            Set objImage = objItem.Transfer(WIA.FormatID.wiaFormatTIFF)
'            objImage.SaveFile "c:\test\" & ActiveCell.Value & ".TIFF"
            
        Set objItem = Nothing
        Set objImage = Nothing
        Set objDev = Nothing
     End If
     
     Set objDev = Nothing
     Set objDM = Nothing
    
End Sub


На сколько я разобрался, то строка
objDev.Properties("Document Handling Select").Value = 1

отвечает за то, откуда берется бумага и какой тип сканирования. , В данном случае бумагу меня хватает с лотка автоподачи.

Эта же строчка отвечает за количество отсканируемых страниц из лотка.
objDev.Properties("Pages").Value = 1
Если поставить 0, то должен сканировать автоматом все, которые лежат в лотке.
Если 1 - то только 1 лист.

Так вот. Почему-то, при изменении количества страниц
например: objDev.Properties("Pages").Value = 0
Выдает ошибку о неверно заданном параметре и в Debug подсвечитвает следующую строку:
Set objImage = objItem.Transfer(WIA.FormatID.wiaFormatTIFF)


Как быть?
У меня не получается определять наличие бумаги в автоподатчике.
Хотя по идее МФУ это предусматривает, по крайне мере при попытке сканировать и не закладывая бумагу - он об этом сообщает.
Как крайний вариант, оставил себе в запасе решение в цикле, до выхода ошибки OnError.
Но мне кажется, это не совсем правильно.

И да. Почему-то в VBA не работают контстанты, WIA_DPS_PAGES например.
  • Вопрос задан
  • 994 просмотра
Решения вопроса 1
@KTG Автор вопроса
Вот кстати полностью рабочий код, который делает то, что от него требуется.
Сканирует без диалога все листы из автоподатчика, пока не вывалиться ошибка Err.Number -2145320957.
Затем все конвертирует в TIFF и сохраняет в один многостраничный документ.

Sub scan()
    
    Dim objDM As WIA.DeviceManager
    'MsgBox (Split(ActiveCell.Address, "$")(1))
        Dim objDev As WIA.Device
        
            Dim objItem As WIA.Item
            Dim objImage, FirstImage As WIA.ImageFile
            Dim objIP As WIA.ImageProcess
        
        Dim s As String
        Dim i, num As Integer
      
     Set objDM = New WIA.DeviceManager
     For i = 1 To objDM.DeviceInfos.Count
        If objDM.DeviceInfos(i).Type = 1 Then
          s = objDM.DeviceInfos(i).DeviceID
        End If
     Next
     
     Set objDev = objDM.DeviceInfos(s).Connect
     If objDev Is Nothing Then
        MsgBox ("Error: Not device found")
     Else

        objDev.Properties("Document Handling Select").Value = 1
        objDev.Properties("Pages").Value = 1
     
        Set objItem = objDev.Items(1)
     
            Set objImage = New WIA.ImageFile
            Set objIP = New WIA.ImageProcess
            
ScanStart:

        On Error GoTo ScanError
            
            Set objImage = objItem.Transfer("{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}")
            num = num + 1
            If num = 1 Then
                Set FirstImage = objImage
            Else
                objIP.Filters.Add (objIP.FilterInfos("Frame").FilterID)
                objIP.Filters(objIP.Filters.Count).Properties("ImageFile") = objImage
                objIP.Filters(objIP.Filters.Count).Properties("FrameIndex") = objIP.Filters.Count
            End If

        GoTo ScanStart
        
ScanError:

        Select Case Err.Number
            Case -2145320957
                MsgBox ("No More Pages Found")

                objIP.Filters.Add (objIP.FilterInfos("Convert").FilterID)
                objIP.Filters(objIP.Filters.Count).Properties("FormatID") = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"
                Set FirstImage = objIP.Apply(FirstImage)
                FirstImage.SaveFile "c:\test\" & ActiveCell.Value & num & ".TIFF"
            Case Else
                MsgBox ("Error: " & Err.Description & "(" & Err.Number & ")")
        End Select
        
        Set FirstImage = Nothing
        Set objItem = Nothing
        Set objImage = Nothing
        Set objDev = Nothing
     End If
     
     Set objDev = Nothing
     Set objDM = Nothing
    
End Sub
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы