VBA Подскажите пользователю, чтобы выбрать лист Excel. Выбрать лист vba


VBA Подскажите пользователю, чтобы выбрать лист Excel

Я использовал Macro Recorder в Excel для записи ряда задач, которые мне нужно автоматизировать. Эти задачи выполняются между двумя разными таблицами Excel. Я считаю, что макрос выполняет код на текущем листе, но сейчас второй лист жестко закодирован. Как я могу предложить пользователю выбрать лист Excel для ссылки?

Учебное пособие, которое будет иметь макрос является MasterHardwareDB & файл, который должен быть заменен на пользовательский ввод является Computer&DeploymentInfo_06_23_15_v3.xlsx

Я исследовал объект FileDialog, но я не уверен, как интегрировать здесь.

Sub AutomateCompare() ' ' AutomateCompare Macro ' ActiveCell.Select ActiveCell.FormulaR1C1 = _ "=INDEX('Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[scheduleddate],MATCH([ @HostName],'Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[computername],0))" ActiveCell.Offset(1, 0).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveCell.FormulaR1C1 = _ "=INDEX('Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[scheduleddate],MATCH([@HostName],'Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[computername],0))" ActiveCell.Offset(1, 0).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveWindow.SmallScroll ToRight:=-1 ActiveCell.Offset(-2, 1).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveCell.FormulaR1C1 = _ "=INDEX('Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[forecastdate],MATCH([@HostName],'Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[computername],0))" ActiveWindow.SmallScroll ToRight:=1 ActiveCell.Offset(1, 0).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveWindow.SmallScroll ToRight:=-7 ActiveSheet.ListObjects("MasterHardwareDB").Range.AutoFilter Field:=9, _ Criteria1:="FALSE" ActiveWindow.SmallScroll ToRight:=1 ActiveCell.Offset(4169, -4).Range("MasterHardwareDB[[#Headers],[Name]:[EmpID]]") _ .Select ActiveCell.Offset(521, 1).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveWindow.SmallScroll ToRight:=-7 ActiveSheet.ListObjects("MasterHardwareDB").Range.AutoFilter Field:=5, _ Criteria1:="=Scheduled", Operator:=xlOr, Criteria2:="=To Be Scheduled" ActiveCell.Offset(87, -8).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveWindow.SmallScroll ToRight:=8 End Sub

stackoverrun.com

Решение: Выбор листа и занесение его имени в переменную

Всем привет! Есть вот такой макросSub GetIt() FullPath = Application.GetOpenFilename MainBook = ThisWorkbook.Name i = InStrRev(FullPath, "\") Name = Mid(FullPath, i + 1) Folder = Left(FullPath, i - 1)     Application.DisplayAlerts = 0       Workbooks.Open Filename:=FullPath   Workbooks(Name).Worksheets("Имя листа").Range("B1:AT666").Copy   Workbooks(MainBook).Activate   ActiveWorkbook.Worksheets("Лист1").Range("A1").Select ActiveSheet.Paste   Workbooks(Name).Close   End SubОн открывает диалоговое окно, вы выбираете другую электронную таблицу, он из нее копирует данные с листа "Имя листа" с ячеек B1:AT666 в ту книгу, с которой вы запустили макрос, начиная с ячейки A1. Момент заключается в том что имена книг (которую вы пытаетесь открыть и ваша основная) загоняются в переменные MainBook и Name, а вот имя листа которое находится в книге, которую вы пытаетесь открыть записано вручную в строке 11. Я где-то видел что можно открыть диалоговое окно, которое предложит к какому листу обращаться из той книги, которую вы открываете. Вот собственно и вопрос, как открыть это диалоговое окно, выбрать лист и САМОЕ главное занести название выбранного листа в переменную, чтобы в строке номер 11 , вместо "Имя листа" можно было бы написать имя этой переменной?Добавлено через 12 минутЗакомментировал подробно код Sub GetIt() FullPath = Application.GetOpenFilename 'Окно для выбора файла. Путь к файлу загоняется в переменную FullPath MainBook = ThisWorkbook.Name 'Вносим в переменную MainBook название книги в которой вы запустили макрос i = InStrRev(FullPath, "\") 'в переменную i загоняется путь с FullPath с маркировкой ПОСЛЕДНЕГО разделителя Name = Mid(FullPath, i + 1) 'эта маркировка позволяет нам выбрать нужные данные из строки. здесь мы забираем все что лежит после него, то есть имя книги и вносим в переменную Name Folder = Left(FullPath, i - 1) 'тут мы забираем все что находится в строке ДО слэша, то есть путь к папке и заносим в переменную Folder (В этом макросе в дальнейшем эта переменная не используется)    Application.DisplayAlerts = 0  'Не выводить предупреждения   Workbooks.Open Filename:=FullPath 'Открыть книгу по адресу FullPath   Workbooks(Name).Worksheets("Имя листа").Range("B1:AT666").Copy 'В книге по имени Name с листа "Имя листа" с области B1:AT666 скопировать данные   Workbooks(MainBook).Activate 'Выбрать вашу основную книгу (с которой запускался макрос)   ActiveWorkbook.Worksheets("Лист1").Range("A1").Select 'выбрать в основной книге "Лист 1" и выбрать ячейку A1 ActiveSheet.Paste 'Вставить данные   Workbooks(Name).Close 'Закрыть книгу, которую открывали через диалоговое окно   End Sub

studassistent.ru

vba - VBA Подскажите пользователю, чтобы выбрать лист Excel

Я использовал Macro Recorder в Excel для записи ряда задач, которые мне нужно автоматизировать. Эти задачи выполняются между двумя разными таблицами Excel. Я считаю, что макрос выполняет код на текущем листе, но сейчас второй лист жестко закодирован. Как я могу предложить пользователю выбрать лист Excel для ссылки?

В книге, которая будет иметь макрос, находится файл MasterHardwareDB и файл, который необходимо заменить на пользовательский ввод: Computer&DeploymentInfo_06_23_15_v3.xlsx

Я изучал объект filedialog, но я не уверен, как интегрироваться здесь.

Sub AutomateCompare() ' ' AutomateCompare Macro ' ActiveCell.Select ActiveCell.FormulaR1C1 = _ "=INDEX('Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[scheduleddate],MATCH([ @HostName],'Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[computername],0))" ActiveCell.Offset(1, 0).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveCell.FormulaR1C1 = _ "=INDEX('Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[scheduleddate],MATCH([@HostName],'Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[computername],0))" ActiveCell.Offset(1, 0).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveWindow.SmallScroll ToRight:=-1 ActiveCell.Offset(-2, 1).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveCell.FormulaR1C1 = _ "=INDEX('Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[forecastdate],MATCH([@HostName],'Computer&DeploymentInfo_06_23_15_v3.xlsx'!Table1[computername],0))" ActiveWindow.SmallScroll ToRight:=1 ActiveCell.Offset(1, 0).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveWindow.SmallScroll ToRight:=-7 ActiveSheet.ListObjects("MasterHardwareDB").Range.AutoFilter Field:=9, _ Criteria1:="FALSE" ActiveWindow.SmallScroll ToRight:=1 ActiveCell.Offset(4169, -4).Range("MasterHardwareDB[[#Headers],[Name]:[EmpID]]") _ .Select ActiveCell.Offset(521, 1).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveWindow.SmallScroll ToRight:=-7 ActiveSheet.ListObjects("MasterHardwareDB").Range.AutoFilter Field:=5, _ Criteria1:="=Scheduled", Operator:=xlOr, Criteria2:="=To Be Scheduled" ActiveCell.Offset(87, -8).Range("MasterHardwareDB[[#Headers],[Name]]").Select ActiveWindow.SmallScroll ToRight:=8 End Sub

qaru.site

VBA, чтобы выбрать только определенные листы в книге, чтобы затем очистить содержимое от диапазона

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

ActiveWorkbook.Sheets(Array("J2a", "J7", "J10", "J11", "J13", "J17", "J18", "J19")).Select Range("C12:E14, C22:E24, C32:E34, C42:E44, C52:E54, C62:E64, C72:E74,C82:E84, C92:E94, C102:E104, C112:E114, C122:E124, C132:E134, C142:E144, C152:E154").ClearContents ThisWorkbook.Worksheets("Control").Activate

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

ActiveWorkbook.Sheets(Array("J2a", "J2b", "J7", "J10", "J11", "J13 DM", "J13 DS", "J17", "J18", "J19")).Range("C12:E14, C22:E24, C32:E34, C42:E44, C52:E54, C62:E64, C72:E74, C82:E84, C92:E94, C102:E104, C112:E114, C122:E124, C132:E134, C142:E144, C152:E154").ClearContents

Однако теперь я получаю сообщение об ошибке: «Объект не поддерживает это свойство или метод.

Что я делаю не так? две линии, похоже, работают независимо … Также для моего собственного понимания, что является объектом ошибки? ActiveWorkbook?

Solutions Collecting From Web of "VBA, чтобы выбрать только определенные листы в книге, чтобы затем очистить содержимое от диапазона"

Вы можете использовать что-то вроде кода ниже. Это будет проходить через все листы, которые имеют свое имя в массиве sheetNamesArray и очистить каждый диапазон, который вы определили в rangesArray .

Если вы хотите очистить другие листы с другими диапазонами, я предлагаю вам повторить эту операцию с другими значениями.

Примечание. Предположим, что все ваши листы находятся в одной книге.

Dim sheetNamesArray Dim rangesArray 'Array with the names of all of your sheets sheetNamesArray = Array("Sheet1", "Sheet2", "Sheet3") 'Array with all of your ranges rangesArray = Array("A2:B2", "A4:B4", "A6:B6") 'Go through each sheet in the array For Each sheetName In sheetNamesArray 'Go to each range in the sheet For Each rangeName In rangesArray 'Clear the value ThisWorkbook.Sheets(sheetName).Range(rangeName).Clear Next rangeName Next sheetName

excel.bilee.com