Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: жонглирование файлами xls Добавлено: 12.10.06 23:22  

Автор вопроса:  Сергей
Sheets("лист").Copy Before:=Sheets(1)
копируем лист с автоподстановкой имени,
а как скопировать книгу с автоподстановкой имени?
например:
в Папке1 есть Книга1,
ее нужно переместить в Папку2
под именем например Книга2,
а на старом месте удалить.
(имена Книг бывают разные)

Ответить

  Ответы Всего ответов: 14  

Номер ответа: 1
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Профиль | | #1 Добавлено: 12.10.06 23:25
нашел как добавить!!!

1 ChDir "C:\ляляля"
2 Workbooks.Add

просто? только без первой строки ниче не полуцца!

так, переместить данные не проблема...
а как вот теперь удалить энту книгу1 с любым именем (она открыта)???

Ответить

Номер ответа: 2
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #2
Добавлено: 13.10.06 00:09
Сохранить, закрыть и удалить:

ChDir "C:\ляляля"
Set myWb = Workbooks.Add
...
myWb.SaveAs FileName:="ля-ля-файл.xls"
myWb.Close
Kill "ля-ля-файл.xls"

Ответить

Номер ответа: 3
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Профиль | | #3 Добавлено: 13.10.06 10:35
myWb. выдает ошибку
заменил Это на ActiveWorkbook. работает, но...

мы открыли книгу1.xls
сохранили ее как файл.xls
убили файл.xls...

смысл:
из почты все xls валятся в папку1 под разными именами, оператор их по очереди открывает и обрабатывает, только некоторые пропускает...
(блондинка 20 лет, на уме сам знаешь что)
надо открыть книгу1.xls, забрать че надо и убить эту же книгу1.xls

Ответить

Номер ответа: 4
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #4
Добавлено: 13.10.06 10:49
Тогда вопрос должен был звучать иначе, как мне кажется.

открыть
обработать
закрыть
убить:

fPath = "C:\папка1"
nextFile = "книга.xls"

Workbooks.Open FileName:=fPath & "\" & nextFile
... обработать, что нужно ...
Workbooks(nextFile).Close
Kill fPath & "\" & nextFile


Чтобы обработать все файлы в папке по циклу, см. Хелп по FoundFiles и Execute и примеры к ним.

Ответить

Номер ответа: 5
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Профиль | | #5 Добавлено: 13.10.06 22:56
§Ё§Ц§Я§с,
- §п§д§а §У§г§Ц §д§а§Ш§Ц §г§С§Ю§а§Ц, §е §Ю§Ц§Я§с §Я§Ц§д §Ъ§Ю§Ц§Я§Ъ §ж§С§Ы§Э§С(!)
   §Ъ §б§в§а§б§Ъ§г§С§д§о nextFile = "§Ь§Я§Ъ§Ф§С.xls" §с §Я§Ц §Ю§а§Ф§е §д.§Ь.
   §п§д§а §Ю§а§Ш§Ц§д §Т§н§д§о §Ъ "§Ь§Я§Ъ§Ф§С3.xls" §Ъ "§Я§С§Ь§Э§С§Х§Я§С§с777.xls"
- §б§в§а §з§Ц§Э§б§С §і§б§С§г§Ъ§Т§а(!) - §Щ§С 5 §г§Ц§Ь §Я§С§к§Ц§Э §з§а§в§а§к§Ъ§Ы
   §б§в§Ъ§Ю§Ц§в §а§Т§в§С§Т§а§д§Ь§Ъ §ж§С§Ы§Э§а§У §У §б§С§б§Ь§Ц §б§а §и§Ъ§Ь§Э§е

§Ј§а§д §г§Ь§С§Ш§Ъ, §С §б§а§й§Ц§Ю§е §Я§Ц §б§а§Э§е§й§С§Ц§д§г§с

Sub §Щ§С§Ю§а§й§Ъ§д§о_§д§Ц§Ь§е§л§Ъ§Ы_§ж§С§Ы§Э()
'
Ё¤ = ActiveWorkbook.Name
ActiveWindow.Close
Kill Ё¤
End Sub

§У§н§Х§С§Ц§д §а§к§Ъ§Т§Ь§е §Я§С §г§д§в§а§Ь§Ц §е§Т§Ъ§д§о???

Ответить

Номер ответа: 6
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Профиль | | #6 Добавлено: 13.10.06 22:58
ну вот писал, писал...
а как это теперь стереть?
(

Ответить

Номер ответа: 7
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Профиль | | #7 Добавлено: 13.10.06 23:04
1 совет: не катит - я не знаю имени файла (любое)
2 совет: Спасибо! нашел хорошие решения.
 
вопрос:

'а = ActiveWorkbook.Name
'ActiveWindow.Close
'Kill а

почему выдает ошибку на
последней строке?

Ответить

Номер ответа: 8
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #8
Добавлено: 14.10.06 00:00
Нужно указать полный путь к файлу.

Попробуйте так:

Kill ActiveWorkbook.Path & "\" & ActiveWorkbook.Name


Но это сработает, если только файл книги до этого сохранялся в этом сеансе. Если же не сохранялся, то и Kill не нужен. Просто Close. А чтобы не задавался вопрос "Сохранить?" перед закрытием (если не нужно сохранять), можно сделать так:

ActiveWorkbook.Saved = True
ActiveWorkbook.Close

Ответить

Номер ответа: 9
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #9
Добавлено: 14.10.06 10:11
... слишком сонный был уже, когда писал предыдущее...

На самом деле должно сработать так:

a = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
ActiveWorkbook.Close 'или как у Вас ActiveWindow.Close
Kill a


И про "текущий сеанс" - это не принципиально. Главное правильно указать путь и имя к существующему файлу на диске, не важно, сохранялся ли он именно в этом сеансе.

Ответить

Номер ответа: 10
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Профиль | | #10 Добавлено: 16.10.06 15:14
Спасибо дорогой друг! :)

Ответить

Номер ответа: 11
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Профиль | | #11 Добавлено: 17.10.06 18:33
блин,
при перезагрузке экселя она начинает
создавать книги с "книга1"!!!
а там уже есть такая...
пробовал и 'Workbooks.Add и
 'Set myWb = Workbooks.Add
все равно книга1 получается...
теоретически ChDir должна же
была проверить директорию

' Sub новая_книга()
' ChDir "C:\Новая папка"
' Set myWb = Workbooks.Add
' ActiveWorkbook.Save
' ActiveWindow.Close
' End Sub

Ответить

Номер ответа: 12
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #12
Добавлено: 17.10.06 21:58
при перезагрузке экселя она начинает
создавать книги с "книга1"!!!
а там уже есть такая...
пробовал и 'Workbooks.Add и
 'Set myWb = Workbooks.Add
все равно книга1 получается...
теоретически ChDir должна же
была проверить директорию


Я дико извиняюсь, если покажусь занудой... но вопрос-то в чем собственно?

ChDir - не должна проверять директрорию... "у этой функции нет этой функций". Она только делает указанную в ее аргументе директорию текущей. Если такой директории нет, то указанная директория не создается, но в таком случае, в обычных обстоятельствах, VBA выдает сообщение об ошибке.

Действительно, при перезапуске Excel заново начинает счетчик новых создаваемых книг, начиная с Книга1.xls.

Ничто не мешает перед сохранением очередной новой книги попытаться удалить файл с диска с таким же именем, как у новой, если он уже существует (с помощью того же Kill) и если он уже не нужен.

Если нужно предварительно проверить, существует ли директория, куда планируется сохранять файлы, то можно воспользоваться функцией Dir.

Можно также проверять, существует ли уже тот или иной файл на диске.

Можно запросить генерацию случайного имени, под которым можно будет сохранить новый файл (типа генерации имен для временных файлов).

Собственно говоря, можно сделать все, что хочется с файлами на компьютере через VBA... Только нужно точно и конкретно определиться, что именно хочется сделать.

Ответить

Номер ответа: 13
Автор ответа:
 Сергей



Вопросов: 1
Ответов: 8
 Профиль | | #13 Добавлено: 18.10.06 09:55
прости, торможу, ну конечно Dir делает директорию текущей...
в папке есть несколько файлов, нужно сохранять последующие книги с присвоением очередного имени
например книга1, книга2,...,книга21802,книга21803
и т.д. старые нельзя удалять или затирать, они должны
сохраниться.

Ответить

Номер ответа: 14
Автор ответа:
 GenyaA



Вопросов: 0
Ответов: 185
 Web-сайт: www.genyaa.nm.ru
 Профиль | | #14
Добавлено: 18.10.06 11:04
Если книге нужно присваивать имя с очередным номером (с увеличением на единицу от максимального номера среди существующих в данной директории), то можно сделать так:

Sub новая_книга()
    Dim cDir As String, fNext As Long
    Dim myWb As Workbook, fPref As String
    
    fPref = "Книга" 'префикс каждой новой книги
' (префикс можно задать другой, тогда файлы не будут "безликими",
' например, можно задать префикс, как "ВыпискаЛС" и будет понятно, что в файлах с
' таким именем находятся именно Выписки Лицевых Счетов)
    
    cDir = "C:\temp" '"C:\Новая папка"
    ChDir cDir
    
    With Application.FileSearch
        .LookIn = cDir
        .Filename = fPref & "*.xls"
        If .Execute(msoSortByFileName, msoSortOrderDescending) > 0 Then
            fNext = CStr(CLng(Replace(Replace(.FoundFiles(1), cDir & "\" & fPref, "";), ".xls", "";)) + 1)
        Else
            fNext = "1"
        End If
    End With
    
    Set myWb = Workbooks.Add
    myWb.SaveAs cDir & "\" & fPref & fNext & ".xls"
    MsgBox "Сохранен очередной по порядку файл:" & vbCrLf & myWb.FullName
    myWb.Close
 End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам