Доброго времени суток! Знатоки VBA, подскажите, плиз, я уже всю голову сломал...: Есть две книги Excel, обе открыты. Значения из первой книги надо перенести в другую по определенному алгоритму через макрос, объявленный публичным. ---- Sub () a = Range("Object1") ' b = Range("Object2") ' c = Range("Quatro") ' d = Range("Position") ' z = Range("Data") ' q = Range("PositionEnd") + 1 ' For i = 0 To d - 1 w = 12 + 2 * i ' e = Cells(w, 3) ' f = Cells(w, 4) + " " + Cells(w + 1, 4) ' g = Cells(w, 5) ' h = Cells(w, 6) ' j = Cells(w + 1, 7) ' здесь вроде всё понятно, макрос будет запускаться с активной книги (допустим "Заявка.xls"), да и не важно какое у неё имя т.к. она активна, главное, что есть конкретные имена ячеек значения из которых присваиваются переменным. некоторым переменным значения будут присваиваться по циклу. ошибок не выдает. всё прогоняет как надо. далее вопрос!: как присвоенные значения автоматом передать в ячейки другой открытой книги (книга "Свод.xls", лист "MTP"), где "q" - номер строки второй книги. в столбец 2 поставить "b", в столбец 6 - "е", в столбец 11 - "z", и т.д. ....... ....... ....... ' здесь должен быть код передачи значений. с явно указанным Range проблем не возникает, а вот как сделать через переменный? q = q + 1 ' соответственно, смещает номер строки и продолжает цикл. Next i End Sub ... Книга, в которую помещаются значения остается неактивной... ----
Заранее благодарен.
Доброго времени суток! Знатоки VBA, подскажите, плиз, я уже всю голову сломал...: Есть две книги Excel, обе открыты. Значения из первой книги надо перенести в другую по определенному алгоритму через макрос, объявленный публичным. ---- Sub () a = Range("Object1") ' b = Range("Object2") ' c = Range("Quatro") ' d = Range("Position") ' z = Range("Data") ' q = Range("PositionEnd") + 1 ' For i = 0 To d - 1 w = 12 + 2 * i ' e = Cells(w, 3) ' f = Cells(w, 4) + " " + Cells(w + 1, 4) ' g = Cells(w, 5) ' h = Cells(w, 6) ' j = Cells(w + 1, 7) ' здесь вроде всё понятно, макрос будет запускаться с активной книги (допустим "Заявка.xls"), да и не важно какое у неё имя т.к. она активна, главное, что есть конкретные имена ячеек значения из которых присваиваются переменным. некоторым переменным значения будут присваиваться по циклу. ошибок не выдает. всё прогоняет как надо. далее вопрос!: как присвоенные значения автоматом передать в ячейки другой открытой книги (книга "Свод.xls", лист "MTP"), где "q" - номер строки второй книги. в столбец 2 поставить "b", в столбец 6 - "е", в столбец 11 - "z", и т.д. ....... ....... ....... ' здесь должен быть код передачи значений. с явно указанным Range проблем не возникает, а вот как сделать через переменный? q = q + 1 ' соответственно, смещает номер строки и продолжает цикл. Next i End Sub ... Книга, в которую помещаются значения остается неактивной... ----
Shnur1979, вы бы прежде чем хамить,почитали бы лучше правила.с вашими каракулями мало у кого будет желание разбираться.зарегестрироваться и приложить пример было бы гораздо быстрее,чем писать столько букавок. [moder]Тему переместил. Shnur1979, прислушайтесь к тому, что советует Китин. Сомневаюсь, что иначе вы ответа дождетесь
Shnur1979, вы бы прежде чем хамить,почитали бы лучше правила.с вашими каракулями мало у кого будет желание разбираться.зарегестрироваться и приложить пример было бы гораздо быстрее,чем писать столько букавок. [moder]Тему переместил. Shnur1979, прислушайтесь к тому, что советует Китин. Сомневаюсь, что иначе вы ответа дождетеськитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Здравствуйте Shnur1979! Я бы Вам не советовал создавать столько переменных и называть a,b,c,d.. Вы так или запутаетесь или запутается тот кто потом будет смотреть этот код.
как присвоенные значения автоматом передать в ячейки другой открытой книги
[vba]
Код
Application.ScreenUpdating = False 'делаете активной книгу2 и начинаете делать обратные действия. присваивать ячейкам переменные. Workbooks("Свод").Activate Cells(q, 2)=b Cells(q, 6)=e ..... Application.ScreenUpdating = True end sub
[/vba] книга2 будет активна...но об этом никто не узнает
Здравствуйте Shnur1979! Я бы Вам не советовал создавать столько переменных и называть a,b,c,d.. Вы так или запутаетесь или запутается тот кто потом будет смотреть этот код.
как присвоенные значения автоматом передать в ячейки другой открытой книги
[vba]
Код
Application.ScreenUpdating = False 'делаете активной книгу2 и начинаете делать обратные действия. присваивать ячейкам переменные. Workbooks("Свод").Activate Cells(q, 2)=b Cells(q, 6)=e ..... Application.ScreenUpdating = True end sub
[/vba] книга2 будет активна...но об этом никто не узнаетМатраскин
Сомнительное усовершенствование. Чтоб не писать workbook, можно воспользоваться конструкцией with ... end with или присвоить родителя переменной. Хороший стиль программирования - не использовать select-ы и activate.
Сомнительное усовершенствование. Чтоб не писать workbook, можно воспользоваться конструкцией with ... end with или присвоить родителя переменной. Хороший стиль программирования - не использовать select-ы и activate.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Спасибо, первый цикл пролетает на "Ура", а на втором затыкается. Устранил, поставив в конец цикла - Workbooks("Заявка.xls").Activate (без этого код Матраскина с Workbooks("Свод").Activate не работает). Кроме меня этот код никто юзать не будет, а я привык с циклами работать и с кучей переменных (грешу я укрупнением). на сколько я понял после WB лучше ещё конкретный лист задать, т.к. их в книге2 "Свод" штук 5. ... ещё два маленьких вопросика по этой теме 1. строчку кода макроса для защиты от "дурака", т.е. если книга "Свод" случайно оказалась закрыта? (но я точно знаю до неё путь и имя этого файла не меняется по определению) 2. о чем я писал в исходном сообщении - без активации книги2 "Свод" можно реализовать данную задачу, т.к. имя книги1 "Заявка" могут поменять и тогда явное указание в коде имени книги1 "Заявка" будет вызывать ошибку на втором цикле
Спасибо, первый цикл пролетает на "Ура", а на втором затыкается. Устранил, поставив в конец цикла - Workbooks("Заявка.xls").Activate (без этого код Матраскина с Workbooks("Свод").Activate не работает). Кроме меня этот код никто юзать не будет, а я привык с циклами работать и с кучей переменных (грешу я укрупнением). на сколько я понял после WB лучше ещё конкретный лист задать, т.к. их в книге2 "Свод" штук 5. ... ещё два маленьких вопросика по этой теме 1. строчку кода макроса для защиты от "дурака", т.е. если книга "Свод" случайно оказалась закрыта? (но я точно знаю до неё путь и имя этого файла не меняется по определению) 2. о чем я писал в исходном сообщении - без активации книги2 "Свод" можно реализовать данную задачу, т.к. имя книги1 "Заявка" могут поменять и тогда явное указание в коде имени книги1 "Заявка" будет вызывать ошибку на втором циклеShnur1979
Вот два экселевских файлика и экспортированный модуль с "жестко"привязанным кодом (рабочий, но когда оба файла открыты и макрос запускается с активного листа "MTP" файла "Заявка").
у файла "Свод" имя остается неизменным и он размещен в корневой папке на сетевом ресурсе. у меня к нему путь J:\Свод.xls файл "Заявка" один из сотни и может иметь разные имена и находиться где угодно на ПК, но структура файла всегда остается неизменной.
значения из файла "Заявка" должны попадать в соответствующие строки (а точнее начиная после последней заполненной ячейки столбца "B") и столбики файла "Свод".
Вот два экселевских файлика и экспортированный модуль с "жестко"привязанным кодом (рабочий, но когда оба файла открыты и макрос запускается с активного листа "MTP" файла "Заявка").
у файла "Свод" имя остается неизменным и он размещен в корневой папке на сетевом ресурсе. у меня к нему путь J:\Свод.xls файл "Заявка" один из сотни и может иметь разные имена и находиться где угодно на ПК, но структура файла всегда остается неизменной.
значения из файла "Заявка" должны попадать в соответствующие строки (а точнее начиная после последней заполненной ячейки столбца "B") и столбики файла "Свод".Shnur1979
Dim wbBook As Workbook On Error Resume Next Set wbBook = Workbooks(fileName) If wbBook Is Nothing Then 'MsgBox fileName & " не открыта" Else Workbooks(fileName).Close False End If
[/vba] так я как то проверял открыта книга или нет, если открыта закрывал без сохранения файла [vba]
Код
If name & ".XLS" = Dir(path & ".XLS") Then Workbooks.Open fileName:=path & ".xls"
[/vba] а так можно проверить есть ли файл по указ. пути и если он есть, то открыть path - путь до файла name - имя файла
Shnur1979, [vba]
Код
Dim wbBook As Workbook On Error Resume Next Set wbBook = Workbooks(fileName) If wbBook Is Nothing Then 'MsgBox fileName & " не открыта" Else Workbooks(fileName).Close False End If
[/vba] так я как то проверял открыта книга или нет, если открыта закрывал без сохранения файла [vba]
Код
If name & ".XLS" = Dir(path & ".XLS") Then Workbooks.Open fileName:=path & ".xls"
[/vba] а так можно проверить есть ли файл по указ. пути и если он есть, то открыть path - путь до файла name - имя файлаМатраскин
в интернете опять кто-то не прав
Сообщение отредактировал Матраскин - Вторник, 24.12.2013, 13:51