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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2012, 12:37   #41
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Hugo 121, напиши плиз можно такое или нет? А то через 2 часа на ковер.
slone2179 вне форума Ответить с цитированием
Старый 07.02.2012, 13:07   #42
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Workbooks("2.xls").Close вынесите из этого цикла, поставьте перед последним end if.
Так файл всегда будет закрываться, если открылся.
Ну и ещё нужно отключить на время работы обновление экрана - не будет мельтешить.
Добавьте после
If Err = 0 Then
строку
Application.ScreenUpdating = False
а в конце кода
Application.ScreenUpdating = True
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.02.2012, 13:26   #43
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Спасибо, Hugo 121! Все отлично. Последний маленький нюанс. В ячейку D я ввожу данные и все нормально. Но если мне в ячейку G Price писать новую цену, то опять открывается второй файл. Насчет web кошелька лучше в личку писать?
Вложения
Тип файла: rar vba.rar (264.7 Кб, 8 просмотров)
slone2179 вне форума Ответить с цитированием
Старый 07.02.2012, 13:49   #44
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Чтоб зазря файл не открывать - перенесите код, делающий эту работу, после проверки диапазона:

Код:
    If myC = 4 And Len(ThisWorkbook.Sheets(1).Range("D" & myR)) >= 2 Then

'вот этот блок переносим сверху:
    On Error Resume Next
    Set WB = Workbooks.Open("C:\Documents and Settings\admin\Мои документы\2.xls")
    If Err = 0 Then
    On Error GoTo 0
    Set Sh = WB.Sheets("Лист1")

'далее по тексту
Да, строку
Application.ScreenUpdating = False
нужно в начало кода писать, перед
On Error Resume Next

Про деньги - а что там писать? Я цену не назначал... Хотите поделиться заработанным - номер ниже, не откажусь, интернет дома не дешёвый
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.02.2012, 13:58   #45
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ещё немного подправил - вот так вроде всё должно быть:

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myF
    If Target.Value = Empty Then Exit Sub
    Application.ScreenUpdating = False

    myC = Target.Column
    myR = Target.Row

    If myC = 4 Then
        On Error Resume Next
        Set WB = Workbooks.Open("C:\Documents and Settings\admin\Мои документы\vba\2.xls")
        If Err = 0 Then
            On Error GoTo 0
            Set Sh = WB.Sheets("Лист1")
            Set myF = Sh.Cells.Find(ThisWorkbook.Sheets(1).Range("D" & myR))
            If Not myF Is Nothing Then
                Application.EnableEvents = False
                ThisWorkbook.Sheets(1).Range("G" & myR) = Sh.Range("E" & myF.Row)
                Application.EnableEvents = True
            End If
            WB.Close 0
        End If
    End If
    Application.ScreenUpdating = True
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 07.02.2012 в 14:01.
Hugo121 вне форума Ответить с цитированием
Старый 07.02.2012, 14:04   #46
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Спасибо большое. Очень помог, чтобы в дальнейшем не тратить время на проверку цены и т.п. Это не заказ. Но в конце месяца зарплата есть. Значит на кошелек кидать я так понял оплату интернета (за месяц, за год, за......) По какой книжке учился?
slone2179 вне форума Ответить с цитированием
Старый 07.02.2012, 14:08   #47
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Это конечно уже не важно, но почему если несколько ячеек выделяешь и нажимаешь Delete, то появляется ошибка. А по одной очищаешь - без проблем?
slone2179 вне форума Ответить с цитированием
Старый 07.02.2012, 14:13   #48
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Интернет за месяц не оплатите... ~30$ Потому что не по кабелю идёт - а другого нет...
Ну а книжек не читал - лучшие учителя - это форумы и лень ("двигатель прогресса"). Лень всё это делать руками - ну Вы теперь тоже это думаю поняли
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.02.2012, 14:16   #49
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

По удалению - нужно считать, сколько ячеек изменяется. Т.к. код рассчитан на обработку одной ячейки.
Добавьте первой строкой
If Target.Cells.Count > 1 Then Exit Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 07.02.2012, 14:22   #50
slone2179
Форумчанин
 
Аватар для slone2179
 
Регистрация: 22.04.2011
Сообщений: 155
По умолчанию

Ну все Вы меня убили, получилось классно. Спасибо большое. В конце месяца поможем с интернетом. Тему можно закрывать. Hugo 121 большой респект.
slone2179 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа в Delphi с Excel файлами! Leximus Общие вопросы Delphi 5 02.10.2010 11:37
связи между файлами excel redfield Microsoft Office Excel 0 04.05.2010 16:22
Резервное копирование папки с файлами xls (Excel 2003) vfv Microsoft Office Excel 11 12.03.2010 17:05
Работа с файлами из Excel axell_pnz Microsoft Office Excel 4 16.11.2009 11:10
работа с excel файлами через Delphi Winss Помощь студентам 6 08.09.2007 17:54