Я протестировал код, который компилируется и работает нормально. Если вы заинтересованы в улучшении кода UserForm
, вы можете найти эту статью о UserForm1.Show полезной.
В этом решении будет использоваться UserForm
с ComboBox
и CommandButton
, все из которых имеют имена по умолчанию.
Вам потребуется открыть книгу Excel, в которой вы сохраняете этот код (и не забудьте сохранить в формате с поддержкой макросов). Вы можете открыть книгу с дополнительным кодом, который вы можете добавить, если хотите.
Когда форма загрузится, ComboBox
заполнит список всех открытых имен книг Excel. Примечание: Я не тестировал этот код, но если память мне правильно служит, он не найдет книги, открытые в отдельном экземпляре Excel - это означает, что ваша книга может не появляется в списке.
Когда пользователь делает свой выбор, форма скрывается и затем вызывает ваш код, который вы написали, с добавлением передачи Workbook name
, выбранного в пользовательской форме. При этом ваш код будет специально нацелен на указанную книгу без написания кода.
В модуле кода ThisWorkbook
:
Private Sub Workbook_Open()
UserForm1.Show
End Sub
В модуле кода UserForm1
:
Option Explicit
___________________________________________________________________________________
Private Sub CommandButton1_Click()
Dim ComboBoxSelection As String
ComboBoxSelection = Me.ComboBox1.Value
Me.Hide
AutoFitCommentBox (ComboBoxSelection)
End Sub
___________________________________________________________________________________
Private Sub UserForm_Initialize()
Dim WorkbookNameArray As Variant
Dim ArrayElementCounter As Long
WorkbookNameArray = FindOpenWorkbooks
For ArrayElementCounter = LBound(WorkbookNameArray) To UBound(WorkbookNameArray)
Me.ComboBox1.AddItem WorkbookNameArray(ArrayElementCounter)
Next ArrayElementCounter
End Sub
В модуле кода Module1
:
Public Sub AutoFitCommentBox(ByVal TargetWorkbookName As String)
Dim TargetWorkbook As Workbook
Dim myRange As Range
Set TargetWorkbook = Workbooks(TargetWorkbookName)
With TargetWorkbook
Set myRange = Application.Selection
Set myRange = Application.InputBox("Select one Range that contain comment boxes:", "AutoFitCommentBox", myRange.Address, Type:=8)
Dim oneCell As Variant
For Each oneCell In myRange
If Not oneCell.Comment Is Nothing Then
oneCell.Comment.Shape.TextFrame.AutoSize = True
End If
Next
End With
End Sub
_________________________________________________________________________________
Public Function FindOpenWorkbooks() As Variant
Dim myWorkbook As Workbook
Dim WorkbookArray As Variant
Dim ArrayElementCounter As Long
ReDim WorkbookArray(1 To Application.Workbooks.Count)
i = LBound(WorkbookArray)
For Each myWorkbook In Application.Workbooks
WorkbookArray(i) = myWorkbook.Name
i = i + 1
Next myWorkbook
FindOpenWorkbooks = WorkbookArray
End Function
Для справки вот скриншот созданного мной UserForm
:
