Excel VBA Создание/перезапись новой книги и использование кнопки отмены. Excel vba создать новую книгу
Создание макроса VBA, который создает новую консолидированную рабочую книгу из столбцов другого набора данных excel
Активация и выбор являются распространенными проблемами в коде. Вот отличная рекомендация о том, как избежать их использования.
Вот пример того, как добавить новую книгу и установить ее в переменную, чтобы вы могли легко получить ссылку на нее позже в коде:
Sub CreateWBandCopy() ' Link variable to source workbook Dim wbSource As Workbook Set wbSource = Workbooks("book1") ' Copy Column L from source book wbSource.Sheets(1).Range("L:L").Copy ' Create new workbook and assign to variable Dim wb As Workbook Set wb = Workbooks.Add ' Link sheet1 to variable -can also use name like this: Sheets("Sheet1") Dim ws As Worksheet Set ws = wb.Sheets(1) ' Link Specific range to variable Dim rng As Range Set rng = ws.Columns("A:A") ' Paste source col L to new book col A rng.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False End SubЯ не совсем уверен в логике вашего кода, но вот мое лучшее предположение о том, как исправить ваши ссылки. Обратите внимание, что я использовал пару различных методов для ссылок и диапазонов настроек. Я не пытался путать код, но показывал разные способы сделать то же самое.
Кроме того, я использовал несколько активных операторов, потому что я не уверен, что такое имя вашей исходной книги.
Sub Compfinder() ' ' Compfinder Macro ' ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 10 Dim wbSource As Workbook Set wbSource = ActiveWorkbook Dim wsSource As Worksheet Set wsSource = wbSource.ActiveSheet Dim rngQ As Range Set rngQ = wsSource.Columns("Q:Q") rngQ.Copy ''''''''''''''''''''''''' Dim wbNew As Workbook Set wbNew = Workbooks.Add Dim wsNew As Worksheet Set wsNew = wbNew.Sheets(1) Dim rng As Range Set rng = wsNew.Columns("A:A") rng.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ''''''''''''''''''''''''' Application.CutCopyMode = False wsNew.Range("A1").FormulaR1C1 = "Geo Location" wsSource.Columns("K:K").Copy wsNew.Columns("B:B").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False wsSource.Columns("L:L").Copy wsNew.Columns("C:C").PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False wbNew.Activate ActiveWorkbook.SaveAs Filename:="C:\Users\raysharm\Documents\Compfinder columns.csv", FileFormat:=xlCSV, CreateBackup:=False End Subexcel.bilee.com
Кнопка VBA создает новые листы для новой книги MS Excel онлайн
вы можете настроить свой код следующим образом:
Set newWB = GetOrCreateWB("NewWb", "C:\Users\....\MyFolder") '<--| try getting the already open "NewWb" workbook or opening it from given folder ore create it in given folder thisWB.Sheets("TEMPLATE").Copy after:=newWB.Sheets(1) With ActiveSheet '<--| the just pasted worksheet becomes the active one .Name = AddEmployeeUF.txtFirstname.Text + AddEmployeeUF.txtMiddleinitial.Text + AddEmployeeUF.txtLastname.Text + "Template" '<--| Name it ws.Hyperlinks.Add Anchor:=ws.Range("F" & LastRow), Address:="", SubAddress:=.Name & "!A1", TextToDisplay:="View" '<--| hyperlink to new sheet End With Next iВ обычном модуле кода (не в модуле кода UserForm) выполните это вне любой процедуры, расположенной в верхней части модуля :
Public newWB as WorkbookЗатем, ваш код пользовательской формы, как это (вам нужно будет изменить с помощью вашего дополнительного кода, так как у меня нет вашей структуры и доступных данных):
При первом запуске этого кода Module1.newWB ничего, ему не назначено какое-либо значение объекта. Таким образом, новая рабочая книга создается с использованием метода Workbooks.Add , назначенного переменной Module1.newWB , и эта переменная сохраняется до тех пор, пока вы не закроете файл или не потеряете состояние в среде выполнения VBA (т. Е. Необработанное исключение, которое вы прерывание или завершение времени выполнения и т. д.).
vba - Excel 2013 VBA Создание кнопок для новой рабочей книги
Долгое время, первый постер!
Я работаю на шезлонге Campus Food Shelf, и я недавно очень активно участвовал в рационализации их отчетности и ввода данных. Задача, которую я сейчас выполняю, заключается в создании программы, которая создала единый лист 1, так что программы отчетности, которые я создал до сих пор, могут быть легко экспортированы в новые книги, вскоре после окончания учебы. Я знаком (но отнюдь не экспертом) с C/C++, Python и совсем недавно VBA.
Я запускаю ошибку при создании кнопок для Листа 1. Ошибка: "Идентификатор под курсором не распознается". Результат, который я ищу с помощью этого кода, состоит в том, чтобы создать 5 отдельных кнопок, связанных с 5 отдельными Sub-программами, которые уже определены. Я хотел бы разместить их в определенных местах с определенными размерами. Этот код:
Sub DONOTUSEbuttonMaker() Dim Report1, Report2, Report3, Unique, NewWork As Object Dim Targeter As Range Dim i As Integer For i = 1 To 5 Select Case i: Case 1: Set Targeter = Worksheets(1).Range(Cells(3, 7), Cells(3, 7)) Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) With Report1 .OnAction = "WeeklyReportsP1" .Caption = "Weekly Reports P1" .Name = "Weekly Reports P1" End With Case 2: Set Targeter = Worksheets(1).Range(Cells(5, 7), Cells(5, 7)) Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) With Report2 .OnAction = "WeeklyReportsP2" .Caption = "Weekly Reports P2" .Name = "Weekly Reports P2" End With Case 3: Set Targeter = Worksheets(1).Range(Cells(7, 7), Cells(7, 7)) Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) With Report3 .OnAction = "WeeklyReportsP3" .Caption = "Weekly Reports P3" .Name = "Weekly Reports P3" End With Case 4: Set Targeter = Worksheets(1).Range(Cells(9, 7), Cells(9, 7)) Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) With Unique .OnAction = "CalculateUnique" .Caption = "Calculate Unique" .Name = "Calculate Unique" End With Case 5: Set Targeter = Worksheets(1).Range(Cells(11, 7), Cells(11, 7)) Set Report1 = Worksheets(1).Buttons.Add(Targeter.Left, Targeter.Top, Width:=2, Height:=0.33) With NewWork .OnAction = "NewWeekWorkSheet" .Caption = "Create New Worksheet" .Name = "Create New Worksheet" End With End Select Next i End Subqaru.site
vba - Excel VBA Создание/перезапись новой книги и использование кнопки отмены
У меня есть макрос, написанный с диапазоном из одной книги и копией в новую рабочую книгу, которая затем сохраняет недавно созданную книгу (и дает ей имя) в тот же путь к папке. Когда эта рабочая книга уже существует (переписывая книгу), появляется диалоговое окно по умолчанию Windows, спрашивающее, хотите ли вы перезаписать, с отменой выбора кнопок "да". Когда кнопка отмены нажата, создается новая книга. Как отредактировать этот код, чтобы при нажатии на отмену не было создано новой рабочей книги? Я вставил макрос ниже:
Sub ExportNewBook() Application.ScreenUpdating = False Dim ThisWB As Workbook Set ThisWB = ActiveWorkbook Set NewBook = Workbooks.Add On Error Resume Next ThisWorkbook.Worksheets("Summary").Range("A1:I100").Copy NewBook.Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteValues) NewBook.Worksheets("Sheet1").Range("A1").PasteSpecial (xlPasteFormats) NewBook.Worksheets("Sheet1").Range("A:J").Columns.AutoFit NewBook.SaveAs Filename:=ThisWB.Path & "\" & NewBook.Worksheets("Sheet1").Range("A4").Value & "_Summary" NewBook.ActiveSheet.Range("A1").Select Application.ScreenUpdating = True End Subqaru.site