Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Копирование данных / 21 сообщений из 21, страница 1 из 1
24.06.2011, 14:51
    #37323731
Копирование данных
Приветствую, уважаемые!

Excel 2003

На данный момент, у меня копирование данных происходит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub CopyArhiv()
SetRow = ActiveCell.Row
    Лист2.Range("F2") = SetRow
With ActiveCell.EntireRow
    .Copy (Sheets("arhiv").Cells(Sheets("arhiv").Rows.Count, "A").End(xlUp).Offset( 1 ))
End With
End Sub

Но начальник требует, чтобы данные хранились в отдельной книге .xls.
Так вот у меня возникают вопросы:
1. Как сделать копирование данных (строки с активной ячейкой), в другую книгу?
2. Должна ли эта книга быть открыта или необязательно, данные сами попадут
на нужный лист, в конец списка, этой другой книги и сохранятся?
3. Или какие есть аргументы, чтобы скопированные данные, не хранить в другой книге?

Извиняюсь, что много вопросов.
Спасибо.
...
Рейтинг: 0 / 0
24.06.2011, 15:15
    #37323802
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
1. thisworkbook.worksheet.cells(1,1) = workbook("111").worksheet.cells(1,1)
2. да, должна быть (указанным в п.1 методом), если не использовать ADO. workbook.open workbook.close true
3. вопрос в том, на.. это надо?
...
Рейтинг: 0 / 0
24.06.2011, 23:57
    #37324462
Ser Artur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
На счет второго
Книга может быть закрытой и при воспроизведения макроса в "базу" (в закрытую книгу) данные можно впихнуть
...
Рейтинг: 0 / 0
25.06.2011, 00:04
    #37324463
Ser Artur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
посмотри код

Base -закрытая книга
Wor_book - рабочая книга
Worksheets(1).Range("A1:F10").Value - лист 1, диапазон от A1 до F10

авторSub Save_Base ()
iFileName$ = "C:\Base.xls"

If Dir(iFileName$) <> "" Then
With Application
.ScreenUpdating = False
With .Workbooks.Open(Filename:=iFileName$)
.Worksheets(1).Range("A1:F10").Value = Workbooks("[color=redWork_book.xls").Worksheets(1).Range("A1:F10").Value

.Close saveChanges:=True
End With
.ScreenUpdating = True
End With
Else
MsgBox "Спасибо что вы воспользовались услугами Аэрофлота", , _
"Русские авиалинии !!!"
End If

End Sub

:)
...
Рейтинг: 0 / 0
25.06.2011, 00:05
    #37324464
Ser Artur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
упс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub Save_Base ()
iFileName$ = "C:\Base.xls"

If Dir(iFileName$) <> "" Then
With Application
.ScreenUpdating = False
With .Workbooks.Open(Filename:=iFileName$)
.Worksheets( 1 ).Range("A1:F10").Value = Workbooks("Work_book.xls").Worksheets( 1 ).Range("A1:F10").Value

.Close saveChanges:=True
End With
.ScreenUpdating = True
End With
Else
MsgBox "Спасибо что вы воспользовались услугами Аэрофлота", , _
"Русские авиалинии !!!"
End If

End Sub 
...
Рейтинг: 0 / 0
25.06.2011, 00:07
    #37324466
Ser Artur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
о зараннее создай на C:\ книгу с именем Base.xls
...
Рейтинг: 0 / 0
25.06.2011, 00:11
    #37324470
Ser Artur
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
лучше на диск D. На С под Виндовс 7 не сработал
...
Рейтинг: 0 / 0
25.06.2011, 12:25
    #37324640
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
Лучше использовать GetObject. Меньше вопросов, если книга уже открыта.
...
Рейтинг: 0 / 0
25.06.2011, 15:31
    #37324721
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
Сергей, а как определить, открыта книга уже или нет перед использованием GetObject? Перебором и проверкой всех книг, или есть путь проще?
...
Рейтинг: 0 / 0
25.06.2011, 17:10
    #37324772
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
Hugo121,

Код: plaintext
1.
2.
3.
on error resume next
set x=workbooks("MyBook.xls")
on error goto  0 
if x is nothing then ...
...
Рейтинг: 0 / 0
25.06.2011, 17:18
    #37324775
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
Не уверен в нужности GetObject:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
dim x as workbook
dim strfull$
dim strshort$
strfull$="C:\Base.xls"
strshort$=dir(strfull$)
if strshort$="" then exit sub
on error resume next
set x=workbooks(strshort$)
on error goto  0 
if x is nothing then set x=workbooks.open(strfull$)
...
Рейтинг: 0 / 0
25.06.2011, 17:24
    #37324778
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
KL (XL),
а если "MyBook.xls" не та "MyBook.xls"?
Хотя в таком случае ту тоже открыть не удастся...
...
Рейтинг: 0 / 0
25.06.2011, 17:34
    #37324783
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
В этом случае тоже при открытом файле D:\Base.xls код этого не поймёт...

Тогда может так, хоть известить? Закрыть нельзя...
If x Is Nothing Then
Set x = Workbooks.Open(strfull$)
Else
If x.FullName <> strfull$ Then MsgBox "Close duplicate!!!"
End If
...
Рейтинг: 0 / 0
25.06.2011, 23:26
    #37324933
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
Hugo121Сергей, а как определить, открыта книга уже или нет перед использованием GetObject? Перебором и проверкой всех книг, или есть путь проще?
Function WorkbooklsOpen(wbname) As Boolean
'Возвращает ИСТИНА, если рабочая книга открыта
Dim x As Workbook
On Error Resume Next
Set x = Workbooks(wbname)
WorkbooklsOpen = (Err = 0)
End Function
...
Рейтинг: 0 / 0
26.06.2011, 00:06
    #37324952
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
kuklp,
Это я знаю... Но так
1 не быстро
2 опять тоже самое - это может быть не та книга...
...
Рейтинг: 0 / 0
26.06.2011, 00:09
    #37324954
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
Хотя я не прав - довольно быстро...
...
Рейтинг: 0 / 0
26.06.2011, 07:37
    #37324991
kuklp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
Hugo121Сергей, а как определить, открыта книга уже или нет перед использованием GetObject? Перебором и проверкой всех книг, или есть путь проще?Вообще, зачем определять открыта ли она?
Getobject получит ее в любом случае. Другое дело опрекделить есть ли такая книга по заданному пути:
Function FileExists(FName) As Boolean
' Возвращает ИСТИНА, если файл существует
FileExists = (Dir(FName) <> "")
End Function
И никаких других проверок не надо, Экс сам ругнется если книга с таким именем уже открыта.
...
Рейтинг: 0 / 0
26.06.2011, 17:54
    #37325201
Копирование данных
Ser Arturупс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub Save_Base ()
iFileName$ = "D:\Base.xls"

If Dir(iFileName$) <> "" Then
With Application
.ScreenUpdating = False
With .Workbooks.Open(Filename:=iFileName$)
.Worksheets( 1 ).Range("A1:F10").Value = Workbooks("Work_book.xls").Worksheets( 1 ).Range("A1:F10").Value

.Close saveChanges:=True
End With
.ScreenUpdating = True
End With
Else
MsgBox "Спасибо что вы воспользовались услугами Аэрофлота", , _
"Русские авиалинии !!!"
End If

End Sub 

ругается здесь.
да и еще, мне надо, чтобы копирповалась именно та строка в которой активная ячейка.
Спасибо
...
Рейтинг: 0 / 0
26.06.2011, 18:36
    #37325215
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных
НеПрофессионал,

Какими словами ругается? Матерными? :)
Скорее всего у вас в шапке модуля стоит Option Explicit, а значит переменную нужно эксплицитно декларировать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub Save_Base ()
Dim iFileName$
iFileName$ = "D:\Base.xls"

If Dir(iFileName$) <> "" Then
With Application
.ScreenUpdating = False
With .Workbooks.Open(Filename:=iFileName$)
.Worksheets( 1 ).Range("A1:F10").Value = Workbooks("Work_book.xls").Worksheets( 1 ).Range("A1:F10").Value

.Close saveChanges:=True
End With
.ScreenUpdating = True
End With
Else
MsgBox "Спасибо что вы воспользовались услугами Аэрофлота", , _
"Русские авиалинии !!!"
End If
End Sub
...
Рейтинг: 0 / 0
26.06.2011, 18:49
    #37325218
Копирование данных
KL (XL), неа, не стоит :)
А как сделать чтобы добавилась (скопировалась) вся строка с активной ячейкой.
...
Рейтинг: 0 / 0
26.06.2011, 18:51
    #37325219
Копирование данных
KL (XL)НеПрофессионал,

Какими словами ругается? Матерными? :)
[/src]
а ругается именно так как я показал и ни чего более (открывается модуль и сё)
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Копирование данных / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]