Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос "Copy_ROWs_to_EXT_FILE" - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: _Boroda_, китин  
Макрос "Copy_ROWs_to_EXT_FILE"
Saandr Дата: Четверг, 26.04.2012, 15:54 | Сообщение № 21
Группа: Пользователи
Ранг: Новичок
Сообщений: 31
Репутация: 0 ±
Замечаний: 0% ±

СПАСИБО за подсказки и разъяснения!
и за коды!
Буду экспериментировать. smile
 
Ответить
СообщениеСПАСИБО за подсказки и разъяснения!
и за коды!
Буду экспериментировать. smile

Автор - Saandr
Дата добавления - 26.04.2012 в 15:54
JustXXX Дата: Среда, 22.08.2012, 10:22 | Сообщение № 22
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Спасибо Alex_ST за подсказку с использованием файлов.

У меня возник встречный вопрос
Написан макрос
[vba]
Code
Sub Макрос_тест131()
      Dim GetFileName
      GetFileName = Application.GetOpenFilename(FileFilter:="Книга MS Excel (*.xlsx;*.xls),*.xlsx", Title:="Выберите отчёт", MultiSelect:=False)
      If VarType(GetFileName) = vbBoolean Then Exit Sub   ' если нажата "Отмена", то GetFileName = False
      ActiveCell.FormulaR1C1 = GetFileName
End Sub
[/vba]

Он вставляет в выделенную пользователем ячейку, полный путь к файлу.
Мне нужно этот файл использовать в формуле "ВПР", но при использовании в формуле, имя файла надо вводить [в квадратных скобках].
Подскажите как вычленить имя файла из строки и взять его в скобки.



Второй вопрос, в макросе Copy_ROWs_to_EXT_FILE, можно ли организовать функцию, что бы по окончании работы макроса, он сам сделал видимым файл-накопитель?
Я пробовал прописывать в конце макроса строку Window(sDestDir).Visible = True
Но нисего не происходит

Благодарю!


Сообщение отредактировал JustXXX - Среда, 22.08.2012, 11:13
 
Ответить
СообщениеСпасибо Alex_ST за подсказку с использованием файлов.

У меня возник встречный вопрос
Написан макрос
[vba]
Code
Sub Макрос_тест131()
      Dim GetFileName
      GetFileName = Application.GetOpenFilename(FileFilter:="Книга MS Excel (*.xlsx;*.xls),*.xlsx", Title:="Выберите отчёт", MultiSelect:=False)
      If VarType(GetFileName) = vbBoolean Then Exit Sub   ' если нажата "Отмена", то GetFileName = False
      ActiveCell.FormulaR1C1 = GetFileName
End Sub
[/vba]

Он вставляет в выделенную пользователем ячейку, полный путь к файлу.
Мне нужно этот файл использовать в формуле "ВПР", но при использовании в формуле, имя файла надо вводить [в квадратных скобках].
Подскажите как вычленить имя файла из строки и взять его в скобки.



Второй вопрос, в макросе Copy_ROWs_to_EXT_FILE, можно ли организовать функцию, что бы по окончании работы макроса, он сам сделал видимым файл-накопитель?
Я пробовал прописывать в конце макроса строку Window(sDestDir).Visible = True
Но нисего не происходит

Благодарю!

Автор - JustXXX
Дата добавления - 22.08.2012 в 10:22
JustXXX Дата: Среда, 22.08.2012, 11:41 | Сообщение № 23
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Нашел решение для вставки адреса к файлу для функции ВПР

[vba]
Code
    Dim i, reval
      sDestFile = Split(GetFileName, "\")
      For i = 0 To UBound(sDestFile)
          If i <> UBound(sDestFile) Then reval = reval & sDestFile(i) + "\"
          If i = UBound(sDestFile) Then reval = reval & "[" + sDestFile(UBound(sDestFile)) + "]"
      Next i
      Range("A7").Select
      ActiveCell.FormulaR1C1 = reval
[/vba]

Всё оказалось проще чем я думал.

Второй вопрос остался не решенным. sad


Сообщение отредактировал JustXXX - Среда, 22.08.2012, 11:45
 
Ответить
СообщениеНашел решение для вставки адреса к файлу для функции ВПР

[vba]
Code
    Dim i, reval
      sDestFile = Split(GetFileName, "\")
      For i = 0 To UBound(sDestFile)
          If i <> UBound(sDestFile) Then reval = reval & sDestFile(i) + "\"
          If i = UBound(sDestFile) Then reval = reval & "[" + sDestFile(UBound(sDestFile)) + "]"
      Next i
      Range("A7").Select
      ActiveCell.FormulaR1C1 = reval
[/vba]

Всё оказалось проще чем я думал.

Второй вопрос остался не решенным. sad

Автор - JustXXX
Дата добавления - 22.08.2012 в 11:41
Alex_ST Дата: Среда, 22.08.2012, 22:16 | Сообщение № 24
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (JustXXX)
что бы по окончании работы макроса, он сам сделал видимым файл-накопитель?
А что мешает Вам применить самый простой выход: прописать в модуль ЭтаКнига файла-накопителя "открывалку"?[vba]
Code
Private Sub Workbook_Open()
         If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Quote (JustXXX)
что бы по окончании работы макроса, он сам сделал видимым файл-накопитель?
А что мешает Вам применить самый простой выход: прописать в модуль ЭтаКнига файла-накопителя "открывалку"?[vba]
Code
Private Sub Workbook_Open()
         If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 22.08.2012 в 22:16
Alex_ST Дата: Среда, 22.08.2012, 22:29 | Сообщение № 25
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Quote (JustXXX)
Всё оказалось проще чем я думал
У меня сейчас аврал на работе, поэтому с ответом запоздал.
Но я бы не стал так извращаться с циклом.
Первое, что пришло на ум, по началу - то же, что и у Вас - разбить адрес на части в элементы массива по слэшам при помощи Split[vba]
Code
sDestFile = Split(GetFileName, "\")
[/vba]
Но следующие шаги, ИМХО, должны быть типа[vba]
Code
sDestFile(UBound(sDestFile))= "[" & sDestFile(UBound(sDestFile) & "]"   
sDestFile = Join (sDestFile, "\")
[/vba](не проверял, писал по памяти, но что-то типа того)



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Среда, 22.08.2012, 22:30
 
Ответить
Сообщение
Quote (JustXXX)
Всё оказалось проще чем я думал
У меня сейчас аврал на работе, поэтому с ответом запоздал.
Но я бы не стал так извращаться с циклом.
Первое, что пришло на ум, по началу - то же, что и у Вас - разбить адрес на части в элементы массива по слэшам при помощи Split[vba]
Code
sDestFile = Split(GetFileName, "\")
[/vba]
Но следующие шаги, ИМХО, должны быть типа[vba]
Code
sDestFile(UBound(sDestFile))= "[" & sDestFile(UBound(sDestFile) & "]"   
sDestFile = Join (sDestFile, "\")
[/vba](не проверял, писал по памяти, но что-то типа того)

Автор - Alex_ST
Дата добавления - 22.08.2012 в 22:29
KuklP Дата: Четверг, 23.08.2012, 06:50 | Сообщение № 26
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
:-)
[vba]
Code
    sDestFile = Left$(GetFileName, Len(GetFileName) - Len(Dir(GetFileName))) & _
         "[" & Dir(GetFileName) & "]"
[/vba]
или
[vba]
Code
    sDestFile = Left$(GetFileName, InStr(GetFileName, Dir(GetFileName)) - 1) & _
        "[" & Dir(GetFileName) & "]"
[/vba]
или
[vba]
Code
    sDestFile = Left$(GetFileName, InStrRev(GetFileName, "\") - 1) & _
       "[" & Dir(GetFileName) & "]"
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728


Сообщение отредактировал KuklP - Четверг, 23.08.2012, 07:01
 
Ответить
Сообщение:-)
[vba]
Code
    sDestFile = Left$(GetFileName, Len(GetFileName) - Len(Dir(GetFileName))) & _
         "[" & Dir(GetFileName) & "]"
[/vba]
или
[vba]
Code
    sDestFile = Left$(GetFileName, InStr(GetFileName, Dir(GetFileName)) - 1) & _
        "[" & Dir(GetFileName) & "]"
[/vba]
или
[vba]
Code
    sDestFile = Left$(GetFileName, InStrRev(GetFileName, "\") - 1) & _
       "[" & Dir(GetFileName) & "]"
[/vba]

Автор - KuklP
Дата добавления - 23.08.2012 в 06:50
dx84 Дата: Среда, 16.04.2014, 16:42 | Сообщение № 27
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: -8 ±
Замечаний: 80% ±

Excel 2010
Alex_ST, Подскажите пожалуйста как где и что прописать в коде если меня не устраивает выделение области. Мне надо чтоб он работал чуть по другому например копировал заданный диапазон А1:G10» с листа под названием «отчет»
 
Ответить
СообщениеAlex_ST, Подскажите пожалуйста как где и что прописать в коде если меня не устраивает выделение области. Мне надо чтоб он работал чуть по другому например копировал заданный диапазон А1:G10» с листа под названием «отчет»

Автор - dx84
Дата добавления - 16.04.2014 в 16:42
Alex_ST Дата: Среда, 16.04.2014, 17:18 | Сообщение № 28
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Попробуйте вместо[vba]
Код
Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1)
[/vba]написать[vba]
Код
Sheets("отчет").Range("А1:G10").EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1)
[/vba]
(за синтаксис не ручаюсь - пишу прямо сюда, т.к. завал на работе и некогда пробовать в Excel'e)



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеПопробуйте вместо[vba]
Код
Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1)
[/vba]написать[vba]
Код
Sheets("отчет").Range("А1:G10").EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1)
[/vba]
(за синтаксис не ручаюсь - пишу прямо сюда, т.к. завал на работе и некогда пробовать в Excel'e)

Автор - Alex_ST
Дата добавления - 16.04.2014 в 17:18
dx84 Дата: Среда, 16.04.2014, 17:31 | Сообщение № 29
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: -8 ±
Замечаний: 80% ±

Excel 2010
Alex_ST, Спасибо все заработало hands
 
Ответить
СообщениеAlex_ST, Спасибо все заработало hands

Автор - dx84
Дата добавления - 16.04.2014 в 17:31
dx84 Дата: Среда, 16.04.2014, 17:42 | Сообщение № 30
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: -8 ±
Замечаний: 80% ±

Excel 2010
Alex_ST, Еще вопрос при открытие файла накопителя можно сделать та что бы файл сразу отображался с данными?
 
Ответить
СообщениеAlex_ST, Еще вопрос при открытие файла накопителя можно сделать та что бы файл сразу отображался с данными?

Автор - dx84
Дата добавления - 16.04.2014 в 17:42
Alex_ST Дата: Среда, 16.04.2014, 20:55 | Сообщение № 31
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Я же в первом посте писал:
2. Чтобы после работы макроса файл-накопитель не становился невидимым в окнах Excel (как надстройка или Personal.xls), в нём нужно прописать:
[vba]
Код
Private Sub Workbook_Open()
          If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Среда, 16.04.2014, 20:56
 
Ответить
СообщениеЯ же в первом посте писал:
2. Чтобы после работы макроса файл-накопитель не становился невидимым в окнах Excel (как надстройка или Personal.xls), в нём нужно прописать:
[vba]
Код
Private Sub Workbook_Open()
          If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 16.04.2014 в 20:55
dx84 Дата: Четверг, 17.04.2014, 12:42 | Сообщение № 32
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: -8 ±
Замечаний: 80% ±

Excel 2010
Alex_ST, Не получаться вставил выше указанный код но почемуто ругается. Может надо что то лишнее удалить перед тем?
 
Ответить
СообщениеAlex_ST, Не получаться вставил выше указанный код но почемуто ругается. Может надо что то лишнее удалить перед тем?

Автор - dx84
Дата добавления - 17.04.2014 в 12:42
Alex_ST Дата: Четверг, 17.04.2014, 17:48 | Сообщение № 33
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
dx84,
В какой модуль Вы вставляли процедуру? Надо - в модуль ЭтаКнига (ThisWorkbook)
И уж если "ругается", то хоть скажите, какими словами?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщениеdx84,
В какой модуль Вы вставляли процедуру? Надо - в модуль ЭтаКнига (ThisWorkbook)
И уж если "ругается", то хоть скажите, какими словами?

Автор - Alex_ST
Дата добавления - 17.04.2014 в 17:48
dx84 Дата: Пятница, 18.04.2014, 17:36 | Сообщение № 34
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: -8 ±
Замечаний: 80% ±

Excel 2010
Alex_ST, Файл накопитель не читает функции, выдает #знач! Можно как не будь поправить?
 
Ответить
СообщениеAlex_ST, Файл накопитель не читает функции, выдает #знач! Можно как не будь поправить?

Автор - dx84
Дата добавления - 18.04.2014 в 17:36
amiko Дата: Вторник, 22.04.2014, 17:39 | Сообщение № 35
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Приветствую всех, авторам спасибо за функцию hands , очень интересная.
1) Хотел спросить, как можно задать постоянный адрес нахождения файла накопителя (не с листа) как в изначальном варианте, но уже с возможностью пользоваться откуда угодно?
2) И возможно-ли задать адрес файла свой для каждой строчки, чтоб при копировании каждая строчка попадала по прописанному на листе индивидуальному адресу?
Есть мысль формировать динамический адрес (ВПР-ом + СЦЕПИТЬ) нахождения файла в зависимости от данных самой таблицы, и, предварительно создав дерево из файлов накопителей, вести пополняемую базу.


Сообщение отредактировал amiko - Вторник, 22.04.2014, 17:41
 
Ответить
СообщениеПриветствую всех, авторам спасибо за функцию hands , очень интересная.
1) Хотел спросить, как можно задать постоянный адрес нахождения файла накопителя (не с листа) как в изначальном варианте, но уже с возможностью пользоваться откуда угодно?
2) И возможно-ли задать адрес файла свой для каждой строчки, чтоб при копировании каждая строчка попадала по прописанному на листе индивидуальному адресу?
Есть мысль формировать динамический адрес (ВПР-ом + СЦЕПИТЬ) нахождения файла в зависимости от данных самой таблицы, и, предварительно создав дерево из файлов накопителей, вести пополняемую базу.

Автор - amiko
Дата добавления - 22.04.2014 в 17:39
Alex_ST Дата: Вторник, 22.04.2014, 20:46 | Сообщение № 36
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Файл накопитель не читает функции, выдает #знач! Можно как не будь поправить?

dx84, а Вы ПЕРВЫЙ пост топика внимательно читали? Ведь там же написано:
Выбранные строки копируются вместе с форматами и формулами. Естественно, если формула в строке ссылается на значения других строк, то возможны ошибки.
А как формула в ячейках другого листа другой книги по-Вашему может "подцепить" аргументы, оставшиеся в не скопированных ячейках старой книги?
Продолжают работать, естественно, только формулы, ссылающиеся на ячейки-аргументы, копируемые вместе с ними.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение
Файл накопитель не читает функции, выдает #знач! Можно как не будь поправить?

dx84, а Вы ПЕРВЫЙ пост топика внимательно читали? Ведь там же написано:
Выбранные строки копируются вместе с форматами и формулами. Естественно, если формула в строке ссылается на значения других строк, то возможны ошибки.
А как формула в ячейках другого листа другой книги по-Вашему может "подцепить" аргументы, оставшиеся в не скопированных ячейках старой книги?
Продолжают работать, естественно, только формулы, ссылающиеся на ячейки-аргументы, копируемые вместе с ними.

Автор - Alex_ST
Дата добавления - 22.04.2014 в 20:46
Alex_ST Дата: Вторник, 22.04.2014, 20:54 | Сообщение № 37
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
amiko,
Ваш первый вопрос вообще не понял. Что значит:
с возможностью пользоваться откуда угодно?

По второму вопросу - а что мешает Вам использовать не прописанный в коде адрес файла, а адрес, прописанный в определённой ячейке копируемой строки?



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщениеamiko,
Ваш первый вопрос вообще не понял. Что значит:
с возможностью пользоваться откуда угодно?

По второму вопросу - а что мешает Вам использовать не прописанный в коде адрес файла, а адрес, прописанный в определённой ячейке копируемой строки?

Автор - Alex_ST
Дата добавления - 22.04.2014 в 20:54
amiko Дата: Среда, 23.04.2014, 13:32 | Сообщение № 38
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо за оперативный ответ. Особыми знаниями в VBA не обладаю, программировал раньше на других языках, недавно посмотрел что можно сделать с Excel при помощи VBA, очень заинтересовало, и стал по аналогии допиливать интересные проги.
В первом вопросе я имел ввиду, что как можно во втором примере (в котором адрес прописывается в примечаниях) реализовать прописывание адреса накопителя в коде VBA как в первом примере из первого сообщения в теме.
По второму вопросу, мне мешает то, что адрес задается только 1 для всего документа, а не построчно, и мало того, он даже не в ячейке, а в примечаниях.
 
Ответить
СообщениеСпасибо за оперативный ответ. Особыми знаниями в VBA не обладаю, программировал раньше на других языках, недавно посмотрел что можно сделать с Excel при помощи VBA, очень заинтересовало, и стал по аналогии допиливать интересные проги.
В первом вопросе я имел ввиду, что как можно во втором примере (в котором адрес прописывается в примечаниях) реализовать прописывание адреса накопителя в коде VBA как в первом примере из первого сообщения в теме.
По второму вопросу, мне мешает то, что адрес задается только 1 для всего документа, а не построчно, и мало того, он даже не в ячейке, а в примечаниях.

Автор - amiko
Дата добавления - 23.04.2014 в 13:32
Alex_ST Дата: Среда, 23.04.2014, 14:17 | Сообщение № 39
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3213
Репутация: 609 ±
Замечаний: 0% ±

2003
Чтобы адреса файлов-накопителей динамически изменялись, нужно, чтобы в каждой строке эти адреса были где-то прописаны.
Вот так попробуйте:[vba]
Код
Sub Copy_ROWs_to_EXT_FILES()   ' скопировать строки выделенных ячеек во внешние файлы-накопители
'---------------------------------------------------------------------------------------
' Procedure    : Copy_ROWs_to_EXT_FILES
' Author       : KuklP & Alex_ST
' Topic_HEADER : Макрос "Copy_ROWs_to_EXT_FILE"
' Topic_URL    : http://www.excelworld.ru/forum/3-176-91083-16-1398248247
' DateTime     : 23.04.14, 14:17
' Purpose      : скопировать строки выделенных ячеек во внешние файлы-накопители
' Notes1       : основной и резервный (сетевой) пути к файлам-накопителям прописываются в ячейках копируемых строк листа файла-источника
'                в тексте примечания пути к файлу-накопителю прописываются ВО ВТОРОЙ СТРОКЕ (после переноса строки)
' Notes2       : чтобы после работы макроса файлы-накопители не становились невидимым в окнах Excel (как надстройка или Personal.xls), в их модулях ЭтаКнига нужно прописать:
'                 Private Sub Workbook_Open()
'                    If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
'                 End Sub
'---------------------------------------------------------------------------------------
      If Not TypeName(Selection) = "Range" Then Exit Sub
      Dim lr&, wb As Workbook, lb As Workbook
      Const sLocAddrCol$ = "A"   ' столбец, в ячейках которого прописан локальный (основной) путь к файлу-накопителю
      Const sNetAddrCol$ = "B"   ' столбец, в ячейках которого прописан сетевой (резервный) путь к файлу-накопителю
      Dim sLocDestPath$   ' локальный (основной) путь к файлу-накопителю
      Dim sNetDestPath$   ' сетевой (резервный) путь к файлу-накопителю
      sLocDestPath = Range(sLocAddrCol & Selection(1).Row).Value
      sNetDestPath = Range(sNetAddrCol & Selection(1).Row).Value
      With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With
      On Error Resume Next
      Set wb = GetObject(sLocDestPath)   ' локальный файл-накопитель
      If Err Then Err.Clear: Set wb = GetObject(sNetDestPath)   ' сетевой файл-накопитель (если нужно)
      If Err Then MsgBox "Файл-накопитель не доступен!": GoTo eXXit

      Set lb = ThisWorkbook
      lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
      Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1)   ' копирование
      wb.Close (True)   ' закрыть с сохранением
eXXit:    With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With
      Set wb = Nothing: Set lb = Nothing
End Sub
[/vba]



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Среда, 23.04.2014, 14:25
 
Ответить
СообщениеЧтобы адреса файлов-накопителей динамически изменялись, нужно, чтобы в каждой строке эти адреса были где-то прописаны.
Вот так попробуйте:[vba]
Код
Sub Copy_ROWs_to_EXT_FILES()   ' скопировать строки выделенных ячеек во внешние файлы-накопители
'---------------------------------------------------------------------------------------
' Procedure    : Copy_ROWs_to_EXT_FILES
' Author       : KuklP & Alex_ST
' Topic_HEADER : Макрос "Copy_ROWs_to_EXT_FILE"
' Topic_URL    : http://www.excelworld.ru/forum/3-176-91083-16-1398248247
' DateTime     : 23.04.14, 14:17
' Purpose      : скопировать строки выделенных ячеек во внешние файлы-накопители
' Notes1       : основной и резервный (сетевой) пути к файлам-накопителям прописываются в ячейках копируемых строк листа файла-источника
'                в тексте примечания пути к файлу-накопителю прописываются ВО ВТОРОЙ СТРОКЕ (после переноса строки)
' Notes2       : чтобы после работы макроса файлы-накопители не становились невидимым в окнах Excel (как надстройка или Personal.xls), в их модулях ЭтаКнига нужно прописать:
'                 Private Sub Workbook_Open()
'                    If Me.Parent.Caption = Application.Caption Then Windows(Me.Name).Visible = True
'                 End Sub
'---------------------------------------------------------------------------------------
      If Not TypeName(Selection) = "Range" Then Exit Sub
      Dim lr&, wb As Workbook, lb As Workbook
      Const sLocAddrCol$ = "A"   ' столбец, в ячейках которого прописан локальный (основной) путь к файлу-накопителю
      Const sNetAddrCol$ = "B"   ' столбец, в ячейках которого прописан сетевой (резервный) путь к файлу-накопителю
      Dim sLocDestPath$   ' локальный (основной) путь к файлу-накопителю
      Dim sNetDestPath$   ' сетевой (резервный) путь к файлу-накопителю
      sLocDestPath = Range(sLocAddrCol & Selection(1).Row).Value
      sNetDestPath = Range(sNetAddrCol & Selection(1).Row).Value
      With Application: .ScreenUpdating = False: .DisplayAlerts = False: .EnableEvents = False: End With
      On Error Resume Next
      Set wb = GetObject(sLocDestPath)   ' локальный файл-накопитель
      If Err Then Err.Clear: Set wb = GetObject(sNetDestPath)   ' сетевой файл-накопитель (если нужно)
      If Err Then MsgBox "Файл-накопитель не доступен!": GoTo eXXit

      Set lb = ThisWorkbook
      lr = wb.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
      Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1)   ' копирование
      wb.Close (True)   ' закрыть с сохранением
eXXit:    With Application: .EnableEvents = True: .DisplayAlerts = True: .ScreenUpdating = True: End With
      Set wb = Nothing: Set lb = Nothing
End Sub
[/vba]

Автор - Alex_ST
Дата добавления - 23.04.2014 в 14:17
amiko Дата: Среда, 23.04.2014, 14:39 | Сообщение № 40
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Работает! Браво гуру! Единственный момент, он копирует по адресам только построчно, т.е. если выделить 2 строчки с разными адресами, то он скопирует их в один файл, адрес которого указан выше в столбе "А" (или "В" для сетевого доступа). Но чувствую интуитивно, если копировать несколько строчек одним макросом по разным адресам, то придется изменять все намного глубже, т.к. предусмотрена работа (открытие/копирования/сохранение+закрытие) только с одним накопителем.
И еще, по каким источникам проще всего изучить принцип работы, синтаксис и функции VBA?
 
Ответить
СообщениеРаботает! Браво гуру! Единственный момент, он копирует по адресам только построчно, т.е. если выделить 2 строчки с разными адресами, то он скопирует их в один файл, адрес которого указан выше в столбе "А" (или "В" для сетевого доступа). Но чувствую интуитивно, если копировать несколько строчек одним макросом по разным адресам, то придется изменять все намного глубже, т.к. предусмотрена работа (открытие/копирования/сохранение+закрытие) только с одним накопителем.
И еще, по каким источникам проще всего изучить принцип работы, синтаксис и функции VBA?

Автор - amiko
Дата добавления - 23.04.2014 в 14:39
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!