Основная цель — выбрать лист из моей книги, например, у меня есть листы с 1 по 10, пользователю будет предложено выбрать только 1 лист. Ниже приведен найденный мной образец кода, в котором открывается окно, позволяющее пользователю выбрать ячейку рабочего листа вместо рабочего листа. Я не уверен, как я могу добавить фотографии для показа, но я постараюсь объяснить. Пример: появляется окно. Чтобы оно заработало, мне нужно ввести =Sheet1!$E$4, а не просто вводить =Sheet1. Любая помощь приветствуется.
On Error Resume Next
Set ws2 = Application.InputBox(Prompt: = "Select a worksheet", Title: = "Select Worksheet", Type:=8).Parent
On Error GoTo 0
If ws2 Is Nothing Then
MsgBox "User cancelled...", vbInformation
Else
Чтобы получить наилучший результат, вам нужно создать UserForm с элементом управления ComboBox и заполнить его именами листов:
Dim ws As Worksheet
For Each ws In Worksheets
ComboBox1.AddItem ws.Name
Next
Введите имя листа как String
и проверьте, является ли это допустимым объектом.
ws2_name = Application.InputBox(prompt: = "Select a worksheet", Title: = "Select Worksheet")
On Error Resume Next
Set ws2 = Worksheets(ws2_name)
On Error GoTo 0
If IsEmpty(ws2) Then
MsgBox "User cancelled (or name error)...", vbInformation
Exit Sub
End If
'here is code process
ws2.Select
Мод на комментарий
sh_list = "Select a sheet:"
For i = 1 To Worksheets.Count
sh_list = sh_list & Chr(10) & Worksheets(i).Name
Next i
ws2_name = Application.InputBox(prompt:=sh_list, Title: = "Select Worksheet")
On Error Resume Next
Set ws2 = Worksheets(ws2_name)
On Error GoTo 0
If IsEmpty(ws2) Then
MsgBox "User cancelled (or name error)...", vbInformation
Exit Sub
End If
ws2.Select
В поле ввода будут перечислены доступные имена листов.
Более совершенным обходным решением может быть ListBox
в Userform
.
Следующее работает, но требует правильной проверки ошибок. Это должно дать вам возможность сделать то, что вы просили:
Dim InputStr As String
InputStr = Application.InputBox("Enter Name of Worksheet to Go To", "Go To Worksheet")
Worksheets(InputStr).Activate
Вы находитесь в 1 шаге от получения объекта рабочего листа в ws2
Вам нужно изменить только одно слово:
Sub asda()
Dim ws2 As Worksheet, wsname As String
On Error Resume Next
Set ws2 = Application.InputBox(Prompt: = "Select a worksheet", _
Title: = "Select Worksheet", Type:=8).Worksheet ' here!
On Error GoTo 0
If ws2 Is Nothing Then
MsgBox "User cancelled...", vbInformation
Else
wsname = ws2.Name
MsgBox wsname
End If
End Sub
Пользователю не придется вводить ссылку вручную, можно выбрать ячейку.
Предложите пользователю выбрать любую ячейку на целевом листе: Prompt:="Выберите любую необходимую ячейку на листе"
Если я правильно понимаю ваше требование, вам нужно всплывающее окно для выбора листа из вашей книги. Вы можете включить этот код в свой код VBA.введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь
Если вам это нужно, вы можете заменить сообщение в поле ввода более конкретным приглашением.
Как это работает: Как это работает: Выбор листа: пользователю предлагается ввести имя листа.
Проверка листа: программа проверяет, существует ли введенное имя листа в книге. Если этого не происходит, отображается сообщение об ошибке.
Подсчет ячеек со значениями. Это всего лишь фиктивный набор инструкций для проверки работы кода. Функция Application.WorksheetFunction.CountA используется для подсчета количества непустых ячеек в UsedRange выбранного листа. Свойство UsedRange относится к диапазону ячеек, которые использовались на листе.
Отображение результата: результат отображается в окне сообщения, показывая количество ячеек со значениями на выбранном листе.
Sub SelectSheetAndCountCellsWithValues()
' Display the input box for selecting a worksheet
Dim sheetName As String
sheetName = Application.InputBox("Please enter the name of the worksheet", Type:=2)
' Check if a sheet name was entered (InputBox will return an empty string if cancelled)
If sheetName = "" Then
MsgBox "No worksheet selected. Exiting the program.", vbExclamation
Exit Sub
End If
' Check if the entered sheet name exists in the workbook
On Error Resume Next
Dim selectedSheet As Worksheet
Set selectedSheet = ThisWorkbook.Sheets(sheetName)
On Error GoTo 0
If selectedSheet Is Nothing Then
MsgBox "The worksheet '" & sheetName & "' does not exist.", vbExclamation
Exit Sub
End If
' This is just a dummy program to test the execution of the code by Counting the cells with values in the selected sheet
Dim cellCount As Long
cellCount = Application.WorksheetFunction.CountA(selectedSheet.UsedRange)
' Display the result to the user
MsgBox "The worksheet '" & selectedSheet.Name & "' contains " & cellCount & " cells with values.", vbInformation
End Sub
Sub Test()
' Previously referenced (set) objects.
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim ws1 As Worksheet: Set ws1 = wb.Sheets("Sheet1")
' Define constants (usually on the top of the code).
Const WORKSHEET_SELECTION_TITLE As String = "Worksheet Selection"
' Let the user enter the worksheet name.
' Use a Variant variable to distinguish between 'False' and "False".
Dim InputValue As Variant: InputValue = Application.InputBox( _
Prompt: = "Please enter a worksheet name:", _
Title: = "WORKSHEET_SELECTION_TITLE", Type:=2) ' 2 means string
' Exit if the user cancelled the input box.
If VarType(InputValue) = vbBoolean Then
' 'If InputValue = False Then' will not allow a sheet named "False".
MsgBox "User cancelled!", vbExclamation, WORKSHEET_SELECTION_TITLE
Exit Sub
End If
' Store the entered sheet name in a String variable.
Dim Sheet2Name As String: Sheet2Name = InputValue
' Attempt to reference the sheet.
' Use an Object variable because it may not be a worksheet but a chart.
Dim sh2 As Object
On Error Resume Next
Set sh2 = wb.Sheets(Sheet2Name)
On Error GoTo 0
' Exit if the sheet doesn't exist.
If sh2 Is Nothing Then
MsgBox "There is no sheet named """ & Sheet2Name & """ in workbook """ _
& wb.Name & """!", vbExclamation, WORKSHEET_SELECTION_TITLE
Exit Sub
End If
' Exit if the sheet is not a worksheet.
If Not TypeOf sh2 Is Worksheet Then
MsgBox "Sheet """ & Sheet2Name & """ is not a worksheet!", _
vbExclamation, WORKSHEET_SELECTION_TITLE
Exit Sub
End If
' Reference the 2nd worksheet
Dim ws2 As Worksheet: Set ws2 = sh2
Set sh2 = Nothing
' Exit if the 'chosen' 2nd worksheet is the same as the first worksheet.
If ws2 Is ws1 Then
MsgBox "The first sheet is named """ & ws1.Name & """!", _
vbExclamation, WORKSHEET_SELECTION_TITLE
Exit Sub
End If
' Continue with the code using
' the 'wb', 'ws1', 'ws2' and 'Sheet2Name' variables.
MsgBox "Created a reference to worksheet """ & ws2.Name & """ (""" _
& Sheet2Name & """) in workbook """ & wb.Name & """!", _
vbExclamation, WORKSHEET_SELECTION_TITLE
End Sub