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 например.