Как затемнить и установить переменную имя книги в VBA? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть рабочая книга, которая создается каждую неделю и имеет структуру имен переменных.Структура имени выглядит следующим образом: Week of Year & Invoice & date.Таким образом, образец файла может называться 1_Invoice_01052018.xlsm

. Я должен обновлять отчет каждую неделю.Я хочу объявить имя переменной книги как переменную в VBA.У меня есть другая рабочая книга, которая содержит выходные данные отчета, созданного с помощью VBA.В этой другой книге я хочу, чтобы я мог вызывать электронную таблицу Invoice, но, поскольку у нее есть имя переменной, у меня возникают проблемы с ее поиском.Итак, я собрал VBA ниже.

Sub Test()

Dim wb As Workbook
Dim ws As Worksheet

Set wb = "*Invoice*" & ".xlsm"
Set ws = Sheets("Sheet1")

wb.Activate
ws.Select

End Sub

Однако это приводит к ошибке «Несоответствие типов».

Я также попробовал следующее:

Sub Test2()

Windows("*Invoice*" & ".xlsm").Activate

End Sub

Это также привело к ошибке.

Есть какие-нибудь идеи о том, как установить переменную имя книги в качестве переменной в VBA?За один раз я бы открывал только одну из этих книг, поэтому не столкнулся бы ни с какими проблемами

Ответы [ 3 ]

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

Для создания новой книги вы должны использовать Workbooks.Add .Чтобы открыть существующий, вы должны использовать Workbooks.Open и затем ссылаться на лист в этой книге.
Чтобы изменить имя файла, вы сохраните его под новым именем, используя SaveAs метод.

Sub Test()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim FileName As String

    Set wb = Workbooks.Add 'Creates a new workbook with default name.
    'Set wb = Workbooks.Open("<path to folder>\" & FileName & ".xlsm") 'Open an existing file.

    Set ws = wb.Worksheets("Sheet1")

    wb.SaveAs "<path to folder>\" & FileName & ".xlsm" 'Save and rename here.

    With ws
        .Range("A1") = "Adding some text to this cell"
    End With

End Sub  

В качестве дополнительного примера приведенный ниже код создаст две рабочие книги перед копированием листа из первой рабочей книги в конец второй рабочей книги.

Sub Test1()

    Dim wb As Workbook, wb1 As Workbook
    Dim ws As Worksheet

    'Create first workbook so it contains only 1 sheet (xlWBATWorksheet)
    ', reference Sheet1 and add some data to it.
    Set wb = Workbooks.Add(xlWBATWorksheet)
    Set ws = wb.Worksheets("Sheet1")
    ws.Range("A1") = "This cell populated in first workbook."

    'Create second workbook with default number of sheets
    'and copy Sheet1 from first book to the end of this one.
    Set wb1 = Workbooks.Add
    ws.Copy After:=wb1.Sheets(wb1.Sheets.Count)

End Sub  

Снова отредактируйте:

Чтобы определить имя книги на основе WeekNumber_Invoice_Date, вы можете использовать:

Sub Test2()

    Dim wb As Workbook
    Dim sPath As String
    Dim dDate As Date

    dDate = Date 'Todays date
    sPath = "C:\MyFolder\"
    sPath = sPath & _
        WorksheetFunction.WeekNum(dDate, 2) & "_Invoice_" & Format(dDate, "ddmmyyyy") & ".xlsm"

    'Open if already exists.
    'Set wb = Workbooks.Open(sPath)

    'Create and SaveAs new name.
    Set wb = Workbooks.Add
    wb.SaveAs sPath

End Sub

Это будетукажите путь к файлу C:\MyFolder\43_Invoice_22102018.xlsm на основе текущей даты 22 октября '18 .

Примечание. Функция WEEKNUM считает неделю, содержащую 1 января, первой неделей в году.

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

Мне удалось получить то, что мне нужно, по следующей ссылке:
excel-vba-extract-text-Между-2-символами

Я рассмотрел ссылку выше исобрать VBA ниже.

Sub test2()

Dim str As String
Dim openPos As Integer
Dim closePos As Integer
Dim midBit As String

str = Range("b1").Value
openPos = InStr(str, "[")
closePos = InStr(str, "]")
midBit = Mid(str, openPos + 1, closePos - openPos - 1)

'MsgBox (midBit)
Windows(midBit).Activate

End Sub

Я закончил тем, что создал динамический путь к файлу в ячейке B1, который содержал объединенную строку пути к файлу, которая содержала поиски для извлечения Week of Year и Dateна основании Current Date.Поскольку этот путь является динамическим, он всегда будет указывать на правильный путь, если я открою Invoice на правильной неделе.Я вытащил имя файла из пути и открытия на основе имени файла, который является динамическим.

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

Вы должны правильно установить рабочую книгу:

Sub Test()

  Dim wb As Workbook
  Dim ws As Worksheet

  Dim FilePath As Sring
  FilePath = "C:\" & AnotherVariable & ".xlsx"

  Set wb = Workbooks(FilePath)
  Set ws = Sheets("Sheet1")

  wb.Activate
  ws.Select

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...