Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
18.04.2024, 12:05:31

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 240 Сообщений в 5 456 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
  Просмотр сообщений
Страниц: [1]
1  Прочие форумы / Курилка / MS Project : 19.08.2016, 06:45:31
не нашел нужной категории для проекта, неужели в нем так мало программируют? ну да и ладно
задача такая, нужно пройтись по списку задач в Проекте и в графе Длительность и расставить строку "0м" - типа 0 минут.
У Задач которые включают в себя подзадачи нельзя изменить значение длительности, вопрос, как посмотреть в VBA можно вводить значение в ячейку или нет.
2  Основные форумы / Вопросы по программам / MS Project как обратиться к ячейке : 19.08.2016, 06:30:08
задача такая, нужно пройтись по списку задач в Проекте и в графе время расставить 0м. у Задач которые включают в себя подзадачи нельзя изменить значение длительности, вопрос, как посмотреть в VBA можно вводить значение в ячейку или нет.
3  Основные форумы / Вопросы по Excel и VBA / Re:Проблема при обращении к ячейкам открываемой книге : 17.08.2016, 15:22:31
более менее разобрался. скопировал инфу с листа в новую книгу
4  Основные форумы / Вопросы по Excel и VBA / Re:Проблема при обращении к ячейкам открываемой книге : 17.08.2016, 12:36:17
для удобства уберу лишний код тогда
файлы для сканирования какие то слишком "тяжелые" поэтому на диск скинул
https://drive.google.com/folderview?id=0ByCliqqf00OwbGFCQkpSNmRlVTQ&usp=sharing
5  Основные форумы / Вопросы по Excel и VBA / Re:Проблема при обращении к ячейкам открываемой книге : 17.08.2016, 12:18:37
тыкаю в ячейку, допустим в 4,3 у меня название спецификации. вылетает - завершается процедура ScanP с параметром в виде объекта(пробывал и с книгой workbook через workbooks.open), которая вызывается из ОткрытиеПапкиПОКРАСКА
6  Основные форумы / Вопросы по Excel и VBA / Re:Проблема при обращении к ячейкам открываемой книге : 17.08.2016, 12:00:04
я пошаговой смотрел, msgbox .cells(4,3) пробывал и другие ячейки пытался вывести, просто кудв не "ткни" в книгу вылетает. такое может быть из за модуля и формы внутри ее?
7  Основные форумы / Вопросы по Excel и VBA / Re:Проблема при обращении к ячейкам открываемой книге : 17.08.2016, 11:35:32
неа, не хотит.

spoiler for Весь код:
Код: (vb)

Option Base 1
' определение данных для сканирования
Public Type Inf56Spec
    namespec As String
    nProg As String
    nRep As String
    time As String
    material As String
    tolshina  As String
    list As String
    ostList As String
End Type

Public Type InfGSpec
    namespec As String
    time As String
End Type

Public Type InfPSpec
    namespec As String
    time As String
    raschod As String
End Type

Public Type InfZak
    namezak As String
    tokarka As String
    sv As String
    sl As String
    shina As String
End Type

Public Type Specification
    namespec As String
End Type

' определение глобальных массивов с данными
Dim Info5Spec() As Inf56Spec
Dim Info6Spec() As Inf56Spec
Dim InfoGSpec() As InfGSpec
Dim InfoPSpec() As InfoPok
Dim InfoZak() As InfZak
Dim Spec() As Specification

'указание количества для каждого массива
Dim kInfo5Spec As Integer
Dim kInfo6Spec As Integer
Dim kInfoGSpec As Integer
Dim kInfoPSpec As Integer
Dim kInfoZak As Integer
Dim kSpec As Integer

Sub ScanZak(zakbook As Workbook)
    
    Dim iFirst As Long
    Dim iLast As Long
    iFirst = 1224
    iLast = 1280
    Dim i As Long
    Dim k As Integer
    With zakbook.Sheets(1)
        For i = iFirst To iLast
            If .Cells(i, 1).Text <> "" Then
                kInfoZak = kInfoZak + 1
                ReDim Preserve InfoZak(kInfoZak)
                On Error Resume Next
                InfoZak(kInfoZak).namezak = .Cells(i, 1).Text
                On Error Resume Next
                InfoZak(kInfoZak).tokarka = .Cells(i, 9).Text
                On Error Resume Next
                InfoZak(kInfoZak).shina = .Cells(i, 13).Text
                On Error Resume Next
                InfoZak(kInfoZak).sv = Left(.Cells(i, 10).Text, InStr(.Cells(i, 10).Text, "/") - 1)
                On Error Resume Next
                InfoZak(kInfoZak).sl = Mid(.Cells(i, 10).Text, InStr(.Cells(i, 10).Text, "/") + 1, Len(.Cells(i, 10).Text) - InStr(.Cells(i, 10).Text, "/"))
                
            End If
        Next i
    End With

End Sub

Sub ScanSpec5(bookspec As Workbook)

    kInfo5Spec = kInfo5Spec + 1
    ReDim Preserve Info5Spec(kInfo5Spec)
    Info5Spec(kInfo5Spec).namespec = "TC-500 " & bookspec.Sheets(1).Cells(7, 10).Text
    Info5Spec(kInfo5Spec).nProg = bookspec.Sheets(1).Cells(7, 1).Text
    Info5Spec(kInfo5Spec).nRep = bookspec.Sheets(1).Cells(7, 2).Text
    Info5Spec(kInfo5Spec).time = bookspec.Sheets(1).Cells(7, 8).Text
    Dim k As Integer
    Dim mat As String
    k = 14
    Do While bookspec.Sheets(1).Cells(k, 1) <> "Материал" Or k >= 9
        If bookspec.Sheets(1).Cells(k, 1) <> "" Then
            mat = bookspec.Sheets(1).Cells(k, 1).Text
            Exit Do
        End If
        k = k - 1
    Loop
    Dim q As Integer

    q = InStr(mat, "s")
    If q = 0 Then
        q = InStr(mat, "S")
    End If
    If q = 0 Then
        Info5Spec(kInfo5Spec).tolshina = ""
        Info5Spec(kInfo5Spec).material = mat
    Else
        Info5Spec(kInfo5Spec).tolshina = Mid(mat, q, Len(mat) - q + 1)
        Info5Spec(kInfo5Spec).material = Mid(mat, 1, q - 1)
    End If
    Info5Spec(kInfo5Spec).list = bookspec.Sheets(1).Cells(k, 4).Text
    Info5Spec(kInfo5Spec).ostList = bookspec.Sheets(1).Cells(k, 6).Text
    
End Sub

Sub ScanSpec6(bookspec As Workbook)

    kInfo6Spec = kInfo6Spec + 1
    ReDim Preserve Info6Spec(kInfo6Spec)
    Info6Spec(kInfo6Spec).namespec = "TC-600 " & bookspec.Sheets(1).Cells(7, 10).Text
    Info6Spec(kInfo6Spec).nProg = bookspec.Sheets(1).Cells(7, 1).Text
    Info6Spec(kInfo6Spec).nRep = bookspec.Sheets(1).Cells(7, 2).Text
    Info6Spec(kInfo6Spec).time = bookspec.Sheets(1).Cells(7, 8).Text
    Dim k As Integer
    Dim mat As String
    k = 14
    Do While bookspec.Sheets(1).Cells(k, 1) <> "Материал" Or k >= 9
        If bookspec.Sheets(1).Cells(k, 1) <> "" Then
            mat = bookspec.Sheets(1).Cells(k, 1).Text
            Exit Do
        End If
        k = k - 1
    Loop
    Dim q As Integer

    q = InStr(mat, "s")
    If q = 0 Then
        q = InStr(mat, "S")
    End If
    If q = 0 Then
        Info6Spec(kInfo6Spec).tolshina = ""
        Info6Spec(kInfo6Spec).material = mat
    Else
        Info6Spec(kInfo6Spec).tolshina = Mid(mat, q, Len(mat) - q + 1)
        Info6Spec(kInfo6Spec).material = Mid(mat, 1, q - 1)
    End If
    
    Info6Spec(kInfo6Spec).list = bookspec.Sheets(1).Cells(k, 4).Text
    Info6Spec(kInfo6Spec).ostList = bookspec.Sheets(1).Cells(k, 6).Text
    
End Sub

Sub ScanG(bookspec As Workbook)

    kInfoGSpec = kInfoGSpec + 1
    ReDim Preserve InfoGSpec(kInfoGSpec)
    With bookspec.Sheets("Спецификация с гибки")
        InfoGSpec(kInfoGSpec).namespec = "Гиб. " & .Cells(5, 4).Text
        Dim k As Integer
        k = 1
        Do While InStr(.Cells(k, 1), "ИТОГО") = 0 And k < 150
            k = k + 1
        Loop
        InfoGSpec(kInfoGSpec).time = .Cells(k, 6).Text
    End With
End Sub

Sub ScanP(bookspec As Workbook)

    With bookspec.Worksheets(1)

'тут ошибка

        If .Cells(4, 3).Value <> Null Then
            kInfoPSpec = kInfoPSpec + 1
            ReDim Preserve InfoPSpec(kInfoPSpec)
            InfoPSpec(kInfoPSpec).namezak = "Покр. " & .Cells(4, 3).Text
            Dim NN  As Integer
            NN = InStr(InfoPSpec(kInfoPSpec).namezak, "№")
            InfoPSpec(kInfoPSpec).namezak = WorksheetFunction.Trim(Mid(InfoPSpec(kInfoPSpec).namezak, NN + 1, Len(InfoPSpec(kInfoPSpec).namezak) - NN))
            
            Dim Itogo As Double
            Dim ItogoKras As Double
                
            Dim summ As Double
            
            Dim RowItog As Integer
            Dim ColumnItog As Integer
            Dim k As Integer
            Dim i As Integer
            k = 200
            For i = 10 To k
                If InStr(StrConv(.Cells(i, 40).Text, vbProperCase), "Итог") <> 0 Then
                    ColumnItog = 40
                    RowItog = i
                    i = k
            GoTo найден
                End If
            Next i
            
            For i = 10 To k
            
            On Error GoTo err1:
            summ = summ + CDbl(.Cells(i, 41).Value)
            
err1:
                If InStr(StrConv(.Cells(i, 41).Text, vbProperCase), "Итог") <> 0 Then
                    ColumnItog = 41
                    RowItog = i
                    i = k
            GoTo найден
                End If
            Next i
найден:
    
            If ColumnItog = 40 Then
            Itogo = .Cells(RowItog, ColumnItog + 2).Value
            ItogoKras = .Cells(RowItog, ColumnItog + 1).Value
            GoTo далеезаполнение
            End If
            
            If ColumnItog = 41 Then
                Itogo = summ
                ItogoKras = .Cells(RowItog, ColumnItog + 1).Value
            GoTo далеезаполнение
            End If
        
далеезаполнение:
            InfoPSpec(kInfoPSpec).kraska = CStr(ItogoKras)
            
            InfoPSpec(kInfoPSpec).time = CStr(Itogo)
        End If
    End With
End Sub





































Sub ВыборСпецификаций(PathToFolder As String)
    Dim specbook As Workbook
    Dim FSO 'открытие заказов
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim file
    Set SubFolder = FSO.getfolder(PathToFolder)
    For Each f1 In SubFolder.subfolders
        kSpec = kSpec + 1
        ReDim Preserve Spec(kSpec)
        Spec(kSpec).namespec = f1.Name
    Next
End Sub

Sub ОткрытиеПапкиПОКРАСКА(PathToFolder As String)
    Dim specbook As Workbook
    Dim FSO 'открытие заказов
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim file
    
    'Set SubFolder = FSO.getfolder(PathToFolder)
    'For Each f1 In SubFolder.subfolders
    '    On Error Resume Next: Set file = FSO.getfolder(f1.Name)
    '    If Not file Is noting Then
    '        For Each sfile In file.Files
    '            If InStr(sfile.Name, "окрас") <> 0 Then
    '
    '                Set specbook = Workbooks.Open(file.Name & "\" & sfile.Name, ReadOnly:=True)
    '                СохранениеБезМакросов specbook, file.Name & "\"
    '                specbook.Close False
    '            End If
    '        Next
    '    End If
    'Next
    
    Set SubFolder = FSO.getfolder(PathToFolder)
    For Each f1 In SubFolder.subfolders
        On Error Resume Next: Set file = FSO.getfolder(f1.Name)
        If Not file Is noting Then
            For Each sfile In file.Files
                If InStr(sfile.Name, "окрас") <> 0 And InStr(sfile.Name, "без макросов") <> 0 Then
                    
                    Set specbook = GetObject(file.Name & "\" & sfile.Name)
                    'Workbooks.Open(file.Name & "\" & sfile.Name, ReadOnly:=True)
                    ScanP specbook
                    specbook.Close False
                End If
            Next
        End If
    Next
End Sub

Sub ОткрытиеПапкиГИБКА(PathToFolder As String)
    Dim specbook As Workbook
    Dim FSO 'открытие заказов
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim file
    Set SubFolder = FSO.getfolder(PathToFolder)
    For Each f1 In SubFolder.subfolders
        On Error Resume Next: Set file = FSO.getfolder(f1.Name)
        If Not file Is noting Then
            For Each sfile In file.Files
                If InStr(sfile.Name, "ибк") <> 0 Then
                    
                    Set specbook = GetObject(file.Name & "\" & sfile.Name)
                    'Workbooks.Open(file.Name & "\" & sfile.Name, ReadOnly:=True)
                    ScanG specbook
                    specbook.Close False
                End If
            Next
        End If
    Next
End Sub

Sub ОткрытиеПапки600(PathToFolder As String)
    Dim specbook As Workbook
    Dim FSO 'открытие заказов
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim file
    Set SubFolder = FSO.getfolder(PathToFolder)
    For Each f1 In SubFolder.subfolders
        On Error Resume Next: Set file = FSO.getfolder(f1.Name)
        If Not file Is noting Then
            For Each sfile In file.Files
                If InStr(sfile.Name, "66") = 1 Then
                    
                    Set specbook = GetObject(file.Name & "\" & sfile.Name)
                    'Workbooks.Open(file.Name & "\" & sfile.Name, ReadOnly:=True)
                    ScanSpec6 specbook
                    specbook.Close False
                End If
            Next
        End If
    Next
End Sub

Sub ОткрытиеПапки500(PathToFolder As String)
    Dim specbook As Workbook
    Dim FSO 'открытие заказов
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim file
    Set SubFolder = FSO.getfolder(PathToFolder)
    For Each f1 In SubFolder.subfolders
        On Error Resume Next: Set file = FSO.getfolder(f1.Name)
        If Not file Is noting Then
            For Each sfile In file.Files
                If InStr(sfile.Name, "55") = 1 Then
                    
                    Set specbook = GetObject(file.Name & "\" & sfile.Name)
                    'Workbooks.Open(file.Name & "\" & sfile.Name, ReadOnly:=True)
                    ScanSpec5 specbook
                    specbook.Close False
                End If
            Next
        End If
    Next
End Sub

Sub ОткрытиеПапкиЗАКАЗЫ(PathToFolder As String)
    Dim zakbook As Workbook
    Dim FSO 'открытие заказов
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Dim file
    On Error Resume Next: Set file = FSO.getfolder(PathToFolder)
    If Not file Is noting Then
        For Each sfile In file.Files
            If InStr(sfile.Name, "Заказы") <> 0 Then
                
                Set zakbook = GetObject(PathToFolder & sfile.Name)
                'Workbooks.Open(PathToFolder & sfile.Name, ReadOnly:=True)
                ScanZak zakbook
                zakbook.Close False
            End If
        Next
    End If
End Sub












Sub ОткрытиеПапок()
    Prepare
    УдалениеИнформации
    
    Dim ZakPathToFolder As String
    Dim OpenFolderZak As FileDialog
    Set OpenFolderZak = Application.FileDialog(msoFileDialogFolderPicker)
    With OpenFolderZak
        .Title = "Открытие папки с заказом"
        If .Show = 0 Then Exit Sub
        ZakPathToFolder = .SelectedItems(1) & "\"
    End With
    
    ОткрытиеПапкиЗАКАЗЫ ZakPathToFolder
    
    
    Dim SpecPathToFolder As String
    Dim OpenFolderSpec As FileDialog
    Set OpenFolderSpec = Application.FileDialog(msoFileDialogFolderPicker)
    With OpenFolderSpec
        .Title = "Открытие папки со Спецификациями"
        If .Show = 0 Then Exit Sub
        SpecPathToFolder = .SelectedItems(1) & "\"
    End With
        
    'ОткрытиеПапки500 SpecPathToFolder
    'ОткрытиеПапки600 SpecPathToFolder
    'ОткрытиеПапкиГИБКА SpecPathToFolder
    ОткрытиеПапкиПОКРАСКА SpecPathToFolder
    
    ВыборСпецификаций SpecPathToFolder
    
    Заполнение
    Ended
End Sub














' запись.....



Sub УдалениеИнформации()
    kInfo5Spec = 0
        Erase Info5Spec
    kInfo6Spec = 0
        Erase Info6Spec
    kInfoGSpec = 0
        Erase InfoGSpec
    kInfoPSpec = 0
        Erase InfoPSpec
    kInfoZak = 0
        Erase InfoZak
    kSpec = 0
        Erase Spec
End Sub




Sub СохранениеБезМакросов(book As Workbook, path As String)
    book.SaveAs path & book.Name & "(без макросов).xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub





Sub Заполнение()
    Dim AcRow As Integer
    Dim iSpec As Integer
    Dim i500 As Integer
    Dim i600 As Integer
    Dim iGib As Integer
    Dim iPok As Integer
    Dim iZak As Integer
    
    AcRow = 2
    With ThisWorkbook.Sheets("база данных")
        Do While iSpec < UBound(Spec)
            iSpec = iSpec + 1
            .Cells(AcRow, 2) = Spec(iSpec).namespec
            'сравниваются по номеру спецификации
            
            
            
            
            AcRow = AcRow + 1
        Loop
        
    End With


End Sub


8  Основные форумы / Вопросы по Excel и VBA / Проблема при обращении к ячейкам открываемой книге : 17.08.2016, 11:17:06
в общем, дело такое. нужно из папки с файлами выбрать файлы по имени, открыть их и достать из них нужную ифу. знаю что и где в них находится, то есть обращение к несуществующим ячейкам не происходит.
видов файлов всего 4. 4 вида открываются, все норм. 3 вида сканируются, а вот 1 вид при обращении к ячейке завершает процедуру и никаких ошибок ни каких предупреждений, просто завершает.
помогите разобраться в чем дело.
код(весь код не вижу смысла писать, но если что могу написать):
Код: (vb)

Sub ScanP(bookspec As Workbook)

    With bookspec.Worksheets(1)
        If .Cells(4, 3) <> Null Then
            kInfoPSpec = kInfoPSpec + 1
            ReDim Preserve InfoPSpec(kInfoPSpec)

Страниц: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru