VBA / Excel: выбор статистики не может извлечь имя переменной - PullRequest
0 голосов
/ 23 октября 2018

Я очень новичок в VBA, поэтому держитесь за меня:)

Я пытаюсь создать макрос, который идентифицирует имя пользователя из диапазона, а затем возвращает имя FilePerUser , как показано нижено каждый раз, когда я запускаю код, имя открытого файла идентифицирует только переменную FileDir (\ network \ test folder \ destination), не включая FilePerUser из оператора select!

некоторая помощь здесь.

Sub datapull_manual()

Dim FilePerUser As String
Dim User As Variant
User = Worksheets("prp").Range("v2")

Dim FileDir As String
FileDir = "\\network\test folder\destination\"

'user names to automatically open file as per every user

Select Case FilePerUser
Case User = "Mo"
FilePerUser = "k111"
Case User = "To"
FilePerUser = "k222"
Case User = "Vo"
FilePerUser = "k333"
End Select

    Workbooks.Open Filename:=(FileDir & FilePerUser)
    Columns("A:S").Copy
    Windows("Test.xlsb").Activate
    Sheets("test123").Select
    Cells.Select
    Range("A2").Activate
    ActiveSheet.Paste
end sub

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Как заметил @FunThomas - вы используете неправильный синтаксис в операторе Select Case.Вы также не добавляете расширение файла к имени файла.В настоящее время вы ищете файл с именем "k111", а не "k111.xlsx".

Этот код должен работать:

Sub datapull_manual()

    Dim FilePerUser As String
    Dim User As Variant
    User = Worksheets("prp").Range("v2")

    Dim FileDir As String
    FileDir = "\\network\test folder\destination\"

    'user names to automatically open file as per every user

    'Change Case to look at 'User' variable.
    'Case "Mo", not 'Case User = "Mo"'
    Select Case User
        Case "Mo"
            FilePerUser = "K111.xlsx"
        Case "To"
            FilePerUser = "k222.xlsx"
        Case "Vo"
            FilePerUser = "k333.xlsx"
    End Select

    Workbooks.Open Filename:=(FileDir & FilePerUser)
    Columns("A:S").Copy
    Windows("Test.xlsb").Activate
    Sheets("test123").Select
    Cells.Select
    Range("A2").Activate
    ActiveSheet.Paste

End Sub  

Нижняя часть вашего кода может быть улучшена путем ссылки на рабочие книги с переменными:

Sub datapull_manual()

    Dim FilePerUser As String
    Dim User As Variant
    Dim WB As Workbook
    Dim WB1 As Workbook

    User = Worksheets("prp").Range("v2")

    Dim FileDir As String
    FileDir = "\\network\test folder\destination\"

    'user names to automatically open file as per every user

    'Change Case to look at 'User' variable.
    'Case "Mo", not 'Case User = "Mo"'
    Select Case User
        Case "Mo"
            FilePerUser = "k111.xlsx"
        Case "To"
            FilePerUser = "k222.xlsx"
        Case "Vo"
            FilePerUser = "k333.xslx"
    End Select

    'Open & set reference to the workbook.
    Set WB = Workbooks.Open(Filename:=FileDir & FilePerUser)
    Set WB1 = Workbooks("Test.xlsb") 'Set reference to Test workbook.
    'Set WB1 = ThisWorkbook 'If Test.xlsb is the workbook containing this code.

    'Use references to copy data - no need to activate or select anything.
    WB.Worksheets("Sheet1").Columns("A:S").Copy _
        Destination:=WB1.Worksheets("Test123").Range("A2")

End Sub
0 голосов
/ 23 октября 2018

Измените Select -стать:

Select Case user
    Case "Mo"
        filePerUser = "k111"
    Case "To"
        filePerUser = "k222"
    Case "Vo"
        filePerUser = "k333"
    Case else
        MsgBox "User not found"
        exit sub
End Select
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...