Ответы пользователя по тегу Visual Basic
  • Как сканировать на МФУ из лотка через WIA (VBA)?

    @KTG Автор вопроса
    разобрался.
    "objDev.Properties("Document Handling Select").Value = 1"
    Полностью код в комментариях к вопросу
    WIA ошибка при установке параметра PAGES (VBA). Почему?
    Ответ написан
    Комментировать
  • WIA ошибка при установке параметра PAGES (VBA). Почему?

    @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
    Ответ написан
    4 комментария
  • Возможно ли написать скрипт сканирования для Excel 2010?

    @KTG Автор вопроса
    Разобрался.
    Повесил кнопку, написал обработчик вызывающий сканирование.
    Следующим шагом нужно сделать многостраничное сканирование, т.е. если нужно несколько сканов сохранить в один документ.
    PDF или многостраничный TIF.
    PDF видимо не подойдет, т.к. придется таскать за собой внешнюю библиотеку для создания PDF?
    А в случае с файлами xlsm формата (Excel c макросами) это не совсем удобно.
    Ответ написан
    Комментировать