День добрый! по указанному пути переносит/копирует (если есть возможность сделать выбор) весь Лист (активный) с данными в др книгу. Такое ведь можно делать? В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
|
vikttur Пользователь Сообщений: 47199 |
Сначала записать макрорекодером… |
Nordheim Пользователь Сообщений: 3154 |
#3 05.09.2018 15:02:40
конечно можно. Только не понятно где будет
но Если кнопка на листе, а лист весь перенесется то , ту два варианта, либо макрос перенесется вместе с листом, либо на перенесенном листе кнопка работать не будет «Все гениальное просто, а все простое гениально!!!» |
||||
StoTisteg Пользователь Сообщений: 441 |
#4 05.09.2018 15:07:44
… либо и то, и другое — если макросы в модуле листа есть, но кнопочка вызывает не их. |
||
Александр Пользователь Сообщений: 1021 |
#5 05.09.2018 15:08:04 vikttur, А как? если только при открытой книге
Это уже не важно. Главное что бы срабатывал на активный лист (а то в каждой книге постоянно дополняются новыми листами, а их сейчас уже по 100) В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
||
vikttur Пользователь Сообщений: 47199 |
#6 05.09.2018 15:09:41
Записать -> посмотреть -> попытаться разобраться -> попытаться изменить. |
||
Nordheim Пользователь Сообщений: 3154 |
#7 05.09.2018 15:14:55
Так если кнопка на одном листе только это т лист и можно будет перенести, в чем смысл гонять один? «Все гениальное просто, а все простое гениально!!!» |
||
StoTisteg Пользователь Сообщений: 441 |
… или выбирать переносимые листы в ListBox’е… |
Александр Пользователь Сообщений: 1021 |
#9 05.09.2018 15:23:08 vikttur, Остановился только на «думал» тк
У меня шаблон по которому создаются эти все листы с данными. Я эту кнопку «впаяю» в этот шаблон и все дела. А по уже созданным — в ручную.
Книги активно заполняются/исправляются каждый день разными пользователями. Стараюсь сделать работу более комфортной В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
||||
Они по факту идентичные (книги), но из-за того, что на офисе 13 не возможно реализовать общее редактирование, разнес на каждого пользователя по книге Изменено: Александр — 05.09.2018 15:26:31 В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
|
Nordheim Пользователь Сообщений: 3154 |
#11 05.09.2018 15:37:31
А ссылку на код переноса тоже впаяете? «Все гениальное просто, а все простое гениально!!!» |
||
Александр Пользователь Сообщений: 1021 |
#12 05.09.2018 15:47:18 Nordheim, Вы серьезно? я не селен в ВБФ, но у меня уже работает на этом принципе
Изменено: Александр — 05.09.2018 15:50:15 В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
||
Nordheim Пользователь Сообщений: 3154 |
#13 05.09.2018 15:56:09
На каком принципе, у вас каждый раз генерируется кнопка на листе с уже действующей ссылкой на ранее созданный код? «Все гениальное просто, а все простое гениально!!!» |
||
Александр Пользователь Сообщений: 1021 |
#14 05.09.2018 16:00:38
так да. У меня шаблон в котором «эта кнопка» — которая занимается поиском значений и выводом на этот лист(активный)
именно
Изменено: Александр — 05.09.2018 16:01:02 В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
||||||
Nordheim Пользователь Сообщений: 3154 |
Когда у Вас будет создана кнопка, код с переносом листа для нее вы сами пропишите или тоже макросом? «Все гениальное просто, а все простое гениально!!!» |
Александр Пользователь Сообщений: 1021 |
#16 05.09.2018 16:11:55 Не совсем понимаю Вашего вопроса.
В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
||
Nordheim Пользователь Сообщений: 3154 |
Вы перенесли лист в «некую книгу» вместе с кнопкой. В книге источнике откуда появится лист с еще одной кнопкой? Ведь Вы просите кнопку на листе, а лист перенесли в «некую книгу» вместе с кнопкой. Далее Вы в книге Источнике формируете лист с кнопкой , но кнопка не ссылается ни на какой код. И что дальше вы намерены делать? «Все гениальное просто, а все простое гениально!!!» |
vikttur Пользователь Сообщений: 47199 |
#18 05.09.2018 16:23:41 О кнопке не понял… Код для копирования активного листа в другую книгу
|
||
Nordheim, А Вы про это. Еще раз В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
|
Nordheim Пользователь Сообщений: 3154 |
#20 05.09.2018 16:28:27
А вы уверены, что что-то произойдет? «Все гениальное просто, а все простое гениально!!!» |
||
В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
|
Nordheim Пользователь Сообщений: 3154 |
Ну смотрите я предупредил, ваша вновь созданная кнопка будет просто муляжом. Жаль что Вы так и не поняли суть темы обсуждения. Изменено: Nordheim — 05.09.2018 16:37:48 «Все гениальное просто, а все простое гениально!!!» |
Александр Пользователь Сообщений: 1021 |
#23 06.09.2018 08:38:50
К сожалею, да. В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
||
Nordheim Пользователь Сообщений: 3154 |
А Вы попробуйте сделать кнопку, и понажимать , что будет происходить? «Все гениальное просто, а все простое гениально!!!» |
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
#25 06.09.2018 12:47:50 Александр, Может это поможет?
|
||
vikttur Пользователь Сообщений: 47199 |
#26 06.09.2018 17:16:41 Код в сообщеии №18 — для марсиан? От автора темы — ни пол-слова…
|
||
vikttur, Оо, честное слово не увидел Вашего кода (сообщения). В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
|
Юрий М Модератор Сообщений: 60585 Контакты см. в профиле |
Александр, а моё сообщение видели? ) |
Юрий М, Видел, все проверю:) В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
|
Александр Пользователь Сообщений: 1021 |
#30 07.09.2018 09:34:52 vikttur, Что то не так. Как я понял — не работает Указывал путь и в кавычках и без Прикрепленные файлы
В жизни нет ничего невозможного! Есть только недостаток знаний и умений. |
So, what I want to do, generally, is make a copy of a workbook. However, the source workbook is running my macros, and I want it to make an identical copy of itself, but without the macros. I feel like there should be a simple way to do this with VBA, but have yet to find it. I am considering copying the sheets one by one to the new workbook, which I will create. How would I do this? Is there a better way?
asked Jul 28, 2011 at 18:34
1
I would like to slightly rewrite keytarhero’s response:
Sub CopyWorkbook()
Dim sh as Worksheet, wb as workbook
Set wb = workbooks("Target workbook")
For Each sh in workbooks("source workbook").Worksheets
sh.Copy After:=wb.Sheets(wb.sheets.count)
Next sh
End Sub
Edit: You can also build an array of sheet names and copy that at once.
Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _
After:=wb.Sheets(wb.sheets.count)
Note: copying a sheet from an XLS? to an XLS will result into an error. The opposite works fine (XLS to XLSX)
answered Jul 28, 2011 at 21:05
iDevlopiDevlop
24.6k11 gold badges89 silver badges147 bronze badges
3
Someone over at Ozgrid answered a similar question. Basically, you just copy each sheet one at a time from Workbook1 to Workbook2.
Sub CopyWorkbook()
Dim currentSheet as Worksheet
Dim sheetIndex as Integer
sheetIndex = 1
For Each currentSheet in Worksheets
Windows("SOURCE WORKBOOK").Activate
currentSheet.Select
currentSheet.Copy Before:=Workbooks("TARGET WORKBOOK").Sheets(sheetIndex)
sheetIndex = sheetIndex + 1
Next currentSheet
End Sub
Disclaimer: I haven’t tried this code out and instead just adopted the linked example to your problem. If nothing else, it should lead you towards your intended solution.
answered Jul 28, 2011 at 19:05
Chris FlynnChris Flynn
9536 silver badges11 bronze badges
2
You could saveAs xlsx. Then you will loose the macros and generate a new workbook with a little less work.
ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
answered Jul 28, 2011 at 20:55
BradBrad
11.9k4 gold badges44 silver badges70 bronze badges
2
I was able to copy all the sheets in a workbook that had a vba app running, to a new workbook w/o the app macros, with:
ActiveWorkbook.Sheets.Copy
answered Feb 28, 2014 at 17:50
Assuming all your macros are in modules, maybe this link will help. After copying the workbook, just iterate over each module and delete it
answered Jul 28, 2011 at 18:59
ravenraven
4376 silver badges17 bronze badges
Try this instead.
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Copy
Next
ZygD
21k39 gold badges77 silver badges98 bronze badges
answered Jan 17, 2013 at 21:28
You can simply write
Worksheets.Copy
in lieu of running a cycle.
By default the worksheet collection is reproduced in a new workbook.
It is proven to function in 2010 version of XL.
iDevlop
24.6k11 gold badges89 silver badges147 bronze badges
answered Feb 17, 2015 at 14:25
Hors2forceHors2force
1011 silver badge2 bronze badges
Workbooks.Open Filename:="Path(Ex: C:ReportsClientWiseReport.xls)"ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Next Sheet
answered Feb 22, 2013 at 11:39
Here is one you might like it uses the Windows FileDialog(msoFileDialogFilePicker) to browse to a closed workbook on your desktop, then copies all of the worksheets to your open workbook:
Sub CopyWorkBookFullv2()
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim x As Integer
Dim closedBook As Workbook
Dim cell As Range
Dim numSheets As Integer
Dim LString As String
Dim LArray() As String
Dim dashpos As Long
Dim FileName As String
numSheets = 0
For Each ws In Application.ActiveWorkbook.Worksheets
If ws.Name <> "Sheet1" Then
Sheets.Add.Name = "Sheet1"
End If
Next
Dim fileExplorer As FileDialog
Set fileExplorer = Application.FileDialog(msoFileDialogFilePicker)
Dim MyString As String
fileExplorer.AllowMultiSelect = False
With fileExplorer
If .Show = -1 Then 'Any file is selected
MyString = .SelectedItems.Item(1)
Else ' else dialog is cancelled
MsgBox "You have cancelled the dialogue"
[filePath] = "" ' when cancelled set blank as file path.
End If
End With
LString = Range("A1").Value
dashpos = InStr(1, LString, "") + 1
LArray = Split(LString, "")
'MsgBox LArray(dashpos - 1)
FileName = LArray(dashpos)
strFileName = CreateObject("WScript.Shell").specialfolders("Desktop") & "" & FileName
Set closedBook = Workbooks.Open(strFileName)
closedBook.Application.ScreenUpdating = False
numSheets = closedBook.Sheets.Count
For x = 1 To numSheets
closedBook.Sheets(x).Copy After:=ThisWorkbook.Sheets(1)
x = x + 1
If x = numSheets Then
GoTo 1000
End If
Next
1000
closedBook.Application.ScreenUpdating = True
closedBook.Close
Application.ScreenUpdating = True
End Sub
answered Apr 5, 2020 at 22:26
try this one
Sub Get_Data_From_File()
'Note: In the Regional Project that's coming up we learn how to import data from multiple Excel workbooks
' Also see BONUS sub procedure below (Bonus_Get_Data_From_File_InputBox()) that expands on this by inlcuding an input box
Dim FileToOpen As Variant
Dim OpenBook As Workbook
Application.ScreenUpdating = False
FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", FileFilter:="Excel Files (*.xls*),*xls*")
If FileToOpen <> False Then
Set OpenBook = Application.Workbooks.Open(FileToOpen)
'copy data from A1 to E20 from first sheet
OpenBook.Sheets(1).Range("A1:E20").Copy
ThisWorkbook.Worksheets("SelectFile").Range("A10").PasteSpecial xlPasteValues
OpenBook.Close False
End If
Application.ScreenUpdating = True
End Sub
or this one:
Get_Data_From_File_InputBox()
Dim FileToOpen As Variant
Dim OpenBook As Workbook
Dim ShName As String
Dim Sh As Worksheet
On Error GoTo Handle:
FileToOpen = Application.GetOpenFilename(Title:="Browse for your File & Import Range", FileFilter:="Excel Files (*.xls*),*.xls*")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If FileToOpen <> False Then
Set OpenBook = Application.Workbooks.Open(FileToOpen)
ShName = Application.InputBox("Enter the sheet name to copy", "Enter the sheet name to copy")
For Each Sh In OpenBook.Worksheets
If UCase(Sh.Name) Like "*" & UCase(ShName) & "*" Then
ShName = Sh.Name
End If
Next Sh
'copy data from the specified sheet to this workbook - updae range as you see fit
OpenBook.Sheets(ShName).Range("A1:CF1100").Copy
ThisWorkbook.ActiveSheet.Range("A10").PasteSpecial xlPasteValues
OpenBook.Close False
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
Handle:
If Err.Number = 9 Then
MsgBox «The sheet name does not exist. Please check spelling»
Else
MsgBox «An error has occurred.»
End If
OpenBook.Close False
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
both work as
answered Jul 6, 2020 at 4:26
Перенос листов из одной книги в другую с условием переноса |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Задача состоит в том, чтобы скопировать определенный диапазон текущего листа, открыть другую книгу, и вставить эти скопированные данные в определенную ячейку, сохранить этот файл и закрыть. Ниже приведен код VBA.
Sub Название_Макроса() 'Выделить диапазон который необходимо скопировать Range("A1:F52").Select 'Скопировать то, что выделено Selection.Copy ChDir "путь к папке где лежит файл в который необходимо скопировать" Workbooks.Open Filename:= "Название файла, который находится в папке, путь к которой указан выше" 'Выделить начальную ячейку в которую необходимо вставить скопированные данные Range("A6").Select 'Вставить данные ActiveSheet.Paste 'сохранить текущую книгу ActiveWorkbook.Save 'Закрыть книгу ActiveWorkbook.Close End Sub
Вариант 2: В открывшейся книге запускаем макрос, чтобы он открыл нужную нам книгу, скопировал от туда нужные нам данные и вставил в нашу открытую книгу, закрыв файл из которого эти данные были скопированы
Sub Название_Макроса2() 'Открываем файл с которого нужно скопировать данные Workbooks.Open Filename:="C:Данные.xlsx" 'Скопировать нужный диапазон в открывшейся книге на листе 1 Workbooks("Данные.xlsx").Worksheets("Лист1").Range("A16:E16").Copy 'Активируем нужную нам книгу Workbooks("Книга1.xlsm").Activate 'Выделяем и вставляем скопированные данные в ячейку А1 ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste 'Закрываем книгу откуда мы скопировали данные Workbooks("Данные.xlsx").Close End Sub
Еще пример — Скопировать диапазоны данных из активной открытой книги Excel нескольких листов (в нашем примере 3-х листов) в другую книгу, которая хранится в определенном месте. Данные будут вставлены как значения, плюс будут перенесены форматы ячеек.
Sub Копируем_листы_в_другую_книгу() Dim bookconst As Workbook Dim abook As Workbook Set abook = ActiveWorkbook 'присваиваем перменную активной книге Set bookconst = Workbooks.Open("C:UsersUserDesktop1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные 'переходим в активную книгу откуда необходимо скопировать данные abook.Worksheets("Лист1").Activate Range("A1:I23").Copy 'копируем определенный диапазон листа, укажите свой диапазон bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные Range("A1:I23").Select 'встаем на ячейку А1 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'второй лист abook.Worksheets("Лист2").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист2").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'третий лист abook.Worksheets("Лист3").Activate Range("A1:I23").Copy bookconst.Worksheets("Лист3").Activate Range("A1:I23").Select 'выделяем диапазон Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 'вставляем только форматы ячеек Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'сохранить текущую книгу bookconst.Save 'Закрыть книгу bookconst.Close abook.Activate End Sub
Если статья была вам полезна, то буду благодарен, если вы поделитесь ей со своими друзьями с помощью кнопок расположенных ниже.
Спасибо за внимание.
You can easily copy sheets in Excel manually with a few simple mouse clicks. On the other hand, you need a macro if you want to automate this process. In this guide, we’re going to show you how to copy sheets in Excel with VBA.
Download Workbook
Before you start
If you are new to VBA and macro concept, VBA is a programming language for Office products. Microsoft allows users to automate tasks or modify properties of Office software. A macro, on the other hand, is a set of VBA code which you tell the machine what needs to be done.
Macros, or codes, should be written in modules, which are text areas in VBA’s dedicated user interface. Also, the file should be saved as Excel Macro Enabled Workbook in XLSM format to keep the codes.
You can find detailed instructions in our How to create a macro in Excel guide.
New Workbook
Copy active sheet to a new workbook
The first code is the simplest and shortest one which performs the action the title suggests:
Public Sub CopyActiveSheetToNewWorkbook() ActiveSheet.Copy End Sub
As you can figure out ActiveSheet selector indicates the active sheet in the user window. Once the code run successfully, you will see the copy in a new workbook.
Copy a specific sheet to a new workbook
The following code copies “SUMIFS” sheet into a new workbook, regardless of sheet’s active status.
Public Sub CopySpecificSheetToNewWorkbook() Sheets("SUMIFS").Copy End Sub
Copy selected sheets to a new workbook
If you need to copy selected sheets into a new workbook, use ActiveWindow.SelectedSheets selector.
Public Sub CopyActiveSheetsToNewWorkbook() ActiveWindow.SelectedSheets.Copy End Sub
Copy active sheet to a specific position in the same workbook
If you specify a position in the code, VBA duplicates the sheet in a specific position of in the workbook. To do this placement, you can use Before and After arguments with Copy command. With these arguments, you can place the new sheet before or after an existing worksheet.
You can use either sheet names or their indexes to indicate the existing sheet. Here are a few samples:
Public Sub CopyActiveSheetAfterSheet_Name() 'Copies the active sheet after "Types" sheet ActiveSheet.Copy After:=Sheets("Types") End Sub Public Sub CopyActiveSheetAfterSheet_Index() 'Copies after 2nd sheet ActiveSheet.Copy After:=Sheets(2) End Sub Public Sub CopyActiveSheetAfterLastSheet() 'Copies the active sheet after the last sheet 'Sheets.Count command returns the number of the sheets in the workbook ActiveSheet.Copy After:=Sheets(Sheets.Count) End Sub Public Sub CopyActiveSheetBeforeSheet_Name() 'Copies the active sheet before "Types" sheet ActiveSheet.Copy Before:=Sheets("Types") End Sub Public Sub CopyActiveSheetBeforeSheet_Index() 'Copies the active sheet before 2nd sheet ActiveSheet.Copy Before:=Sheets(2) End Sub Public Sub CopyActiveSheetBeforeFirstSheet() 'Copies the active sheet before the first sheet ActiveSheet.Copy Before:=Sheets(1) End Sub
Copy active sheet to an existing workbook
To copy anything to an existing workbook, there are 2 perquisites:
- Target workbook should be open as well
- You need to specify the target workbooks by name
Sub CopySpecificSheetToExistingWorkbook() ' define a workbook variable and assign target workbook ' thus, we can use variable multiple times instead of workbook reference Dim targetSheet As Workbook Set targetSheet = Workbooks("Target Workbook.xlsx") 'copies "Names" sheet to the last position in the target workbook Sheets("Names").Copy After:=targetSheet.Sheets(targetSheet.Worksheets.Count) End Sub
Note: To copy to a closed workbook is possible. However, the target workbook should be opened and preferably closed after copying via VBA as well.