Как использовать результат ввода в качестве имени листа в коде VBA - PullRequest
0 голосов
/ 29 апреля 2020

Я действительно новичок в VBA и узнал то, что я знаю далеко от целых rnet поисков, но я не могу найти решение своей проблемы.

У меня есть две книги, одна с информацией о все текущие проекты моей компании, а другой только активные проекты. В книге «Активные проекты» хранятся все документы, которые необходимо проверить для каждого проекта. У каждого проекта есть свой рабочий лист.

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

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

'Копировать диапазон в выбранную строку в буфер обмена. ("All Project.xlsx"). Рабочие листы ("Все открыто"). Диапазон ("B" & (ActiveCell.Row)). Копировать

'PasteSpecial для вставки значений, формул, форматов и т. Д. c. Рабочие книги ("Active Projects.xlsm"). Рабочие таблицы ( InputBoxValue ). Диапазон ("A2"). PasteSpecial Paste: = xlPasteValues ​​

Я решил использовать поле ввода для запроса Имя листа, куда будут вставлены скопированные данные, но после нескольких часов исследований я не могу найти, использовать ли поле ввода для имени листа.

Спасибо за продолжение обучения в VBA

Ответы [ 3 ]

0 голосов
/ 30 апреля 2020
Dim InputBoxValue As String
InputBoxValue = InputBox("Enter sheet name")

'PasteSpecial to paste values, formulas, formats, etc. 
Workbooks("Active Projects.xlsm").Worksheets(InputBoxValue).Range("A2").PasteSpecial Paste:=xlPasteValues
0 голосов
/ 30 апреля 2020

Ниже код переименует активный лист:

Sub Rename_Worksheet()

Dim Str As String
Dim Ws As Worksheet
Set Ws = ActiveSheet

Str = InputBox("Please provide new name for Worksheet : " & Ws.Name)

Ws.Name = Str

MsgBox "Worksheet renamed successfully to " & Str

End Sub
0 голосов
/ 29 апреля 2020

К вашему сведению - существует высокий риск того, что кто-то введет неправильное имя листа, учитывая характер текста произвольной формы. Это то, с чем вам нужно справиться на своем конце, поэтому я предлагаю вам посмотреть:

  1. Как проверить, существует ли лист с указанным именем в книге
  2. Как l oop a InputBox до тех пор, пока не будет получен приемлемый ввод

Dim Sheet_Name As String

'Get Input
Sheet_Name = Application.InputBox("Enter Sheet Name", Type:=2)

'Use Input
MsgBox ThisWorkbook.Sheets(Sheet_Name).Name
...