Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2009, 01:33   #21
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Тогда в моем случае так:
Код:
Sub test()
    Application.ScreenUpdating = False
    Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls"
    With Workbooks.Open(Filename, , True)
        .Worksheets(3).[B3:B35].Cells.Copy ThisWorkbook.Worksheets(1).[B3] ' копируем содержимое листа
        .Close False
    End With
End Sub
Да, копирует, но почему-то в строке формул, если курсор на В3:В35, такое
Код:
='F:\Заявки\2009\Июль\[На 01.07.09.xls]№ 2'!H5+
'F:\Заявки\2009\Июль\[На 01.07.09.xls]№ 2'!F26+'F:\Заявки\2009\Июль\[На 01.07.09.xls]№ 2'!I54
valerij вне форума Ответить с цитированием
Старый 21.07.2009, 10:15   #22
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Три листа исписал, профи, ау-у!!!
Уж и так, не помогает
Код:
Sub test()
    Application.ScreenUpdating = False
    Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls"
    With Workbooks.Open(Filename, , True)
        .Worksheets(3).[B3:B35].Cells.Value = ThisWorkbook.Worksheets(1).[B3].Value 
        .Close False
    End With
End Sub

Последний раз редактировалось valerij; 21.07.2009 в 10:21.
valerij вне форума Ответить с цитированием
Старый 21.07.2009, 10:53   #23
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Три листа исписал, профи, ау-у!!!
Уж и так, не помогает
Может, хватит уже переписывать чужой код, и пора наконец взяться за учебник?

Ты понимаешь, что делает этот макрос?
Что означает точка перед .Worksheets(3).[B3:B35].Cells.Value ?
Что означает False в строке .Close False

Цитата:
Код:
Sub test()
    Application.ScreenUpdating = False
    Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls"
    With Workbooks.Open(Filename, , True)
        .Worksheets(3).[B3:B35].Cells.Value = ThisWorkbook.Worksheets(1).[B3].Value 
        .Close False
    End With
End Sub
Этот макрос если и заработает, пользы от него не будет никакой.
Ибо он уничтожит все сделанные им изменения в файле.

Изучи объектную модель Excel, а потом уже пиши все эти макросы...
EducatedFool вне форума Ответить с цитированием
Старый 21.07.2009, 11:44   #24
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
и пора наконец взяться за учебник?.
Нет у меня ТАКИХ учебников и в продаже их нет.
А учусь, пытаюсь учится, по чужим кодам, где практически нет комметов.
Не можете помочь, ну и ладно...
Цитата:
Ибо он уничтожит все сделанные им изменения в файле.
Ни чего он не уничтожает, только выводит в строке формул......
valerij вне форума Ответить с цитированием
Старый 21.07.2009, 15:03   #25
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Методом тыка:
Код:
Sub test()
Dim nn As Byte
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls"
    With Workbooks.Open(Filename, , True)
    For nn = 3 To 35
        ThisWorkbook.Worksheets(1).Cells(nn, 2) = .Worksheets(3).Cells(nn, 2)
        Next
        .Close False
    End With
    Application.EnableEvents = True
End Sub
Может подскажите, как листать
Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls"
Если бы не было нуля перед 1(1.07.09.xls), ясно, а так:
Код:
For dat = 1 to 31
Filename = "F:\Заявки\2009\Июль\На " & dat & ".07.09.xls"
next
Не удалось найти 'F:\Заявки\2009\Июль\На 1.07.09.xls'. Проверьте задание имени и местоположения файла.
valerij вне форума Ответить с цитированием
Старый 21.07.2009, 16:10   #26
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Код:
Sub test()
    For dat = 1 To 31
        Filename = "F:\Заявки\2009\Июль\На " & Format(dat, "00") & ".07.09.xls"
        Debug.Print Filename
    Next
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 21.07.2009, 21:01   #27
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Игорь, так как прописать в макросе:
Если нет такой Книги перейти на метку
Код:
With Workbooks.Open(Filename, , True)
If нет Книги then GoTo 1
valerij вне форума Ответить с цитированием
Старый 21.07.2009, 21:20   #28
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Вот тебе 4 варианта:

Код:
Sub test1()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls"
    On Error Resume Next
    With Workbooks.Open(Filename, , True)
        If Err.Number = 0 Then    ' если книга открылась
            For nn = 3 To 35
                ThisWorkbook.Worksheets(1).Cells(nn, 2) = .Worksheets(3).Cells(nn, 2)
            Next
            .Close False
        End If
        Err.Clear    ' сброс ошибки
    End With
    Application.EnableEvents = True
End Sub

Sub test2()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls"
    On Error GoTo 1
    With Workbooks.Open(Filename, , True)
        For nn = 3 To 35
            ThisWorkbook.Worksheets(1).Cells(nn, 2) = .Worksheets(3).Cells(nn, 2)
        Next
        .Close False
    End With
1:     Err.Clear    ' сброс ошибки
    Application.EnableEvents = True
End Sub

Sub test3()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls"
    On Error Resume Next
    With Workbooks.Open(Filename, , True)
        For nn = 3 To 35
            ThisWorkbook.Worksheets(1).Cells(nn, 2) = .Worksheets(3).Cells(nn, 2)
        Next
        .Close False
    End With
    Application.EnableEvents = True
End Sub

Sub test4()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls"
    If Dir(Filename) = "" Then GoTo 1    ' такого файла нет
    With Workbooks.Open(Filename, , True)
        For nn = 3 To 35
            ThisWorkbook.Worksheets(1).Cells(nn, 2) = .Worksheets(3).Cells(nn, 2)
        Next
        .Close False
    End With
1:     Application.EnableEvents = True
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 21.07.2009, 23:04   #29
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Во, оно, выбрал 4, ближе к пониманию!
Код:
Sub test4()
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    For dat = 1 To 31
    Filename = "F:\Заявки\2009\Июль\На " & Format(dat, "00") & ".07.09.xls"
    If Dir(Filename) = "" Then GoTo 1    ' такого файла нет
    With Workbooks.Open(Filename, , True)
        For nn = 3 To 35
            ThisWorkbook.Worksheets(1).Cells(nn, dat + 1) = .Worksheets(3).Cells(nn, 2)
        Next
        .Close False: GoTo 2
1:      For vv = 3 To 35
            ThisWorkbook.Worksheets(1).Cells(vv, dat + 1) = 0
        Next
2:    End With
    Next
Application.EnableEvents = True
End Sub
Два последних, ?, клянусь!!

1. че означает Dir(Filename) = "" ?
2. Здесь происходит открытие книг, падает скорость, так, а мона не открывать книг(я там не понял, как это сделать, SAS объяснял)?
valerij вне форума Ответить с цитированием
Старый 22.07.2009, 15:23   #30
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

SAS
В этом макросе очень низкая скорость, 12 сек., наверное из -за(красным)
Код:
Sub test4()
    Dim dat As Long, nn As Long, Filename As String, wb As Workbook
    Application.EnableEvents = False: Application.ScreenUpdating = False
    For dat = 1 To 31
        Filename = ThisWorkbook.Path & "\На " & Format(dat, "00") & ".07.09.xls"
        With ThisWorkbook.Sheets(1)
            If Dir(Filename) = "" Then
                .Range(.Cells(3, dat + 1), .Cells(35, dat + 1)) = 0
            Else
                Workbooks.Open Filename:=Filename
                Sheets(3).[B3:B35].Copy: .Cells(3, dat + 1).PasteSpecial Paste:=xlPasteValues
                ActiveWorkbook.Close False
            End If
        End With
    Next
    Application.EnableEvents = True
End Sub
А так, 3 сек
Код:
Sub рабочий_2()
Dim dat As Byte, nn As Byte, Filename As String
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    For dat = 1 To 31
    Filename = ThisWorkbook.Path & "\На " & Format(dat, "00") & ".07.09.xls"
     If Dir(Filename) = "" Then GoTo 2    ' такого файла нет
    With Workbooks.Open(Filename, , True)
        For nn = 3 To 35
            ThisWorkbook.Worksheets(1).Cells(nn, dat + 1) = Worksheets(3).Cells(nn, 2)
        Next
       .Close False
    End With
2:    Next
 Application.EnableEvents = True
End Sub
И что дало ThisWorkbook.Path, если файлы все равно открываются и "собирательный" файл должен лежать вместе с остальными, а так Filename = "F:\Заявки\2009\Июль\На 01.07.09.xls", может находится в любом месте?

А, Application.DisplayAlerts = False это то же самое, что и Application.ScreenUpdating = False ??

Последний раз редактировалось valerij; 22.07.2009 в 16:31.
valerij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А вот и еще пара задач на Паскале.Буду очень признательна, если решите!:) Darangel Помощь студентам 2 28.01.2009 23:12
WebBrowser! Если нет коннекта... Port 111 Работа с сетью в Delphi 1 15.01.2009 15:15
Есть кто из Сочи;) ... Если нет, то приезжайте летом nomad7 Свободное общение 8 06.01.2009 18:59
Проверить существует ли путь и создать если его нет hoba PHP 6 29.08.2008 14:40
Как вставить таймер в программу если нет формы durexa Помощь студентам 9 25.06.2007 13:13