Используйте поле ввода для ссылки на другую книгу в подпункте - PullRequest
1 голос
/ 01 февраля 2020

Я собрал сабвуфер, который позволяет вам вводить имя файла, на который вы хотите сослаться, вместо того, чтобы кодировать отдельный файл. Однако за пределами поля ввода я получаю сообщение об ошибке «индекс вне диапазона». Я попытался ввести имя файла с и без "" и расширение файла .xls

Sub tester()

Dim wbName As String
wbName = Application.InputBox("What is the workbook name?")
If Right(wbName, 4) <> ".xls" Then wbName = wbName + ".xls"
Set mainWB = Workbooks(wbName)

Dim copyThis As Range, pasteThis As Range

Set copyThis = mainWB.Worksheets(2).Columns("F")
Set pasteThis = Workbooks("VBA Workbook.xlsm").Worksheeets(1).Columns("A")

copyThis.Copy Destination:=pasteThis

End Sub

1 Ответ

1 голос
/ 01 февраля 2020

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

enter image description here

Код

Option Explicit

Private Sub UserForm_Initialize()
    Dim wkb As Workbook
    Me.Label1.Caption = "Please select the relevant workbook"
    With Me.ComboBox1
        '~~> Loop thorugh all open workbooks and add
        '~~> their name to the Combobox
        For Each wkb In Application.Workbooks
            .AddItem wkb.Name
        Next wkb
    End With
End Sub

Private Sub CommandButton1_Click()
    If ComboBox1.ListIndex = -1 Then
        MsgBox "Please select a wotkbook name and try again"
        Exit Sub
    End If

    Dim wb As Workbook

    Set wb = Workbooks(ComboBox1.List(ComboBox1.ListIndex))

    With wb
        MsgBox .FullName

        '~~> Do what you want
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...