VBA: Когда * можно использовать?

Я пытаюсь понять, когда я могу и не могу использовать * обобщать при кодировании.

Пример того, что я имею в виду xfile.* если расширение не имеет значения. Другой будет *.xls если я хочу сослаться на любые файлы Excel.

Я не просто интересуюсь файлами, хотя. Я хочу использовать что-то вроде Washington* а также Oregon* если я хочу все листы в книге независимо от того, что будет дальше, будь то This Month, This Year, так далее.

Другим уровнем будут значения в ячейках электронной таблицы.

Я прошу каждого из них конкретно, потому что * Кажется, к каждому сценарию относятся по-разному.

Спасибо за помощь.


РЕДАКТИРОВАТЬ:

Хорошим примером проблемы, с которой я только что столкнулся, является следующий код:

If ActiveSheet.Name <> "City*" Then
    code
End If

Варианты имен рабочих листов: City MTD, City YTD, Country MTD, а также Country YTD (Месяц к дате и год к дате, к вашему сведению)

Лист, на котором я нахожусь City MTD но моя программа все еще входит в If-Statement. Это заставляет меня верить, что * не рассматривается как подстановочный знак, а как буквальная звездочка в строке.

2 ответа

Вот как бы вы использовали * чтобы получить доступ ко всем листам, имена которых соответствуют определенному шаблону:

Sub test()
    Dim ws As Worksheet
    Dim count As Long

    For Each ws In ActiveWorkbook.Sheets
        If LCase(ws.Name) Like "*data*" Then count = count + 1
    Next ws
    Debug.Print "There are " & count & " sheets with 'data' in their name"

End Sub

Когда я запускаю это в книге, в которой есть 1 лист с именем "Необработанные данные" и другой "Обработанные данные" (и некоторые другие листы, которые нигде не содержат "данных"), я получаю:

There are 2 sheets with 'data' in their name

* полезен для многих целей, но несколько ограничен. Для более сложных задач рекомендуется использовать объект регулярного выражения VBScript, который также можно использовать в VBA (если вы добавите правильную ссылку на проект).

Список методов, найденных для * подстановочного знака

,

Range .Replace Method: UsedRange.Replace "test*", "NewValue"

Range .AutoFilter: Range("A:A").AutoFilter Field:=1, Criteria1:="test*"

Like Operator (compares strings): If Range("A1") Like "test*" Then

Files and Folders Methods:
    Copy
    CopyFile
    CopyFolder
    MoveFile
    MoveFolder
    DeleteFolder
    DeleteFile
    Dir Function (searches for files or folders)
    ChDir Statement (changes current folder)
    Kill Statement (deletes files from disk)

Application Methods
    .GetSaveAsFilename (used for file extension only)
    .GetOpenFilename (used for file extension only)
    .Match "test*", Range("A:A"), 0 '(If match_type is 0 and lookup_value is text)

WorksheetFunction Methods:
    .AverageIf and .AverageIfs
    .CountIf and .CountIfs
    .Find and .FindB (Range("A1").Find "*")
    .Match
    .Search and .SearchB (locate one text string within a 2nd string)
    .SumIf and .SumIfs
    .VLookup and .HLookup

FileDialog Object - .InitialFileName Property

VBScript.RegExp (or reference to "Microsoft VBScript Regular Expressions *")

Scripting.FileSystemObject CopyFile and DeleteFile Methods ("Microsoft Scripting Runtime")

,

Его можно экранировать с помощью символа тильды (~): Range("A1").Find "~*" находит * (.Find "~~" находит ~)

,

Другие вопросы по тегам