Макрос переноса данных из одного файла в другой

Автор Alexandrin, 28.01.2011, 12:12

« назад - далее »

IKor

Как вариант: задайте пользователю вопрос при открытии файла: ссылка на файл-источник.

Alexandrin

А как должна выглядеть строчка кода, определяющая имя компьютера?

kuklp

#32
Цитата: Alexandrin от 08.02.2011, 15:38
Тогда я не смогу работать с макросом на локальном компьютере, а мне требуется, чтобы макрос работал и так и так. Я думаю, что нужно сделать условие в макросе, что если исходный файл запущен на том же компьютере, где лежит итоговый файл, то путь такой "Set wb = GetObject("c:\test.xls")", а если на другом, то прописывается сетевой путь. Только как это все прописать? Про это и был вопрос в предыдущем посте.
Да не надо Вам имя.
on error resume next
Set wb = GetObject("c:\test.xls")   ' здесь нужно прописать полный путь к файлу-накопителю"
if err<>0 then ' или if wb is nothing
"Set wb = GetObject("Тут сетевой путь.xls")   ' здесь нужно прописать полный путь к файлу-накопителю"
end if
Но если уж так хочется имя то пробуйте:
Public Sub www()
MsgBox CreateObject("WScript.Network").UserName
MsgBox Application.UserName
End Sub
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Alex_ST

#33
А разве если я на своём компе укажу сетевой путь к файлу, расположенному на нём же, то файл не откроется?
Кажется, он не откроется только если я в сеть не войду...
Я сейчас дома. Завтра на работе если будет время, проверю.
Но вообще-то Сергей предложил абсолютно безотказный вариант:     On Error Resume Next
    Set wb = GetObject("c:\test.xls")   ' полный путь к файлу-накопителю
    If Err Then Set wb = GetObject("Сетевой путь\test.xls")     ' полный сетевой путь к файлу-накопителю
    If Err Then MsgBox "Файл test.xls не доступен!": Exit Sub
С уважением, Алексей

Alexandrin

ЦитироватьА разве если я на своём компе укажу сетевой путь к файлу, расположенному на нём же, то файл не откроется?
Не откроется, пробовал.
On Error Resume Next
    Set wb = GetObject("c:\test.xls")   ' полный путь к файлу-накопителю
    If Err Then Set wb = GetObject("Сетевой путь\test.xls")     ' полный сетевой путь к файлу-накопителю
    If Err Then MsgBox "Файл test.xls не доступен!": Exit Sub

А вот этот вариант попробую, спасибо!

Alexandrin

If Err Then MsgBox "Файл test.xls не доступен!": Exit Sub
С этой строчкой по сети не работает, каждый раз вылезает сообщение. Если ее убрать, то все работает нормально (при наличии сети, конечно  :) )

Alex_ST

ну, естественно...
Ведь предыдущую ошибку я сбросить забыл  :-[
Конечно, должно быть так: On Error Resume Next
    Set wb = GetObject("c:\test.xls")   ' полный путь к файлу-накопителю
    If Err Then Err.Clear: Set wb = GetObject("Сетевой путь\test.xls")     ' полный сетевой путь к файлу-накопителю
    If Err Then MsgBox "Файл test.xls не доступен!": Exit Sub
С уважением, Алексей

Alexandrin


Alexandrin

Если по сети добавляю строчки из программы Excel2007, то форматирование строчки в итоговом файле сохраняется, а если из Excel2003, то не сохраняется, вместо даты - число, выравнивания в ячейках нет и т. д.  :o Все файлы в формате .xls. Как устранить все это безобразие?  :-\

Alex_ST

Я работаю только на 2003-ем офисе, поэтому проверить не смогу, но попробуйте после копирования сделать ещё и формат по образцу:   Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) ' копирование
   wb.Sheets(1).Cells(lr + 1, 1).PasteSpecial Paste:=xlPasteFormats ' формат по образцу

это, конечно, "масло масляное", т.к. и так формат должен копироваться, но ведь и "кашу маслом не испортишь" :)
С уважением, Алексей

Alexandrin

Мне не надо, чтоб копировался. Надо чтобы сохранялся в итоговом файле.

Alex_ST

Цитата: Alexandrin от 18.02.2011, 12:19
Мне не надо, чтоб копировался. Надо чтобы сохранялся в итоговом файле.
вы сами-то поняли, что написали? я теперь вообще не понимаю, чего вы хотите...  :D
Но в любом случае, ИМХО при совместной работе с одним файлом 2003 и 2007 глюков где-нибудь не избежать.
С уважением, Алексей

Alexandrin

Я то понял. Поясняю для непонятливых: надо чтобы формат ячеек сохранялся в итоговом файле такой, какой в нем было задан изначально, а не менялся при добавлении новой строки.  >:( Но скорее всего
Цитироватьпри совместной работе с одним файлом 2003 и 2007 глюков где-нибудь не избежать

kuklp

Это еще кто непонятливый. И Алексей Вас понял с точностью до наоборот. Попробуйте:
  Selection.EntireRow.Copy wb.Sheets(1).Cells(lr + 1, 1) ' копирование
   wb.Sheets(1).Cells(lr + 1, 1).PasteSpecial Paste:=xlPasteValues ' вставляем только значения, формат не трогаем
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

Alex_ST

Во, блин! В 8:30 написал ответ, а он куда-то пропал...
В общем суть такова: может быть мешает разное количество столбцов в 2003 и 2007. Чтобы не глюкало, можно попробовать копировать не целиком строку (EntireRow), а диапазон с 1 по 256 ячейку по горизонтали.
С уважением, Алексей