Как передать число в качестве строкового аргумента в объект книги (excel)

Я использую цикл for для обработки данных 300 SKU, причем некоторые из них имеют чисто числовой код SKU. Необработанные данные для каждого SKU находятся в отдельном файле с именем рабочей книги и листа, совпадающими с кодом SKU. Ошибка, с которой я сталкиваюсь, - это индекс вне диапазона, как в:

Workbooks(wbnamex).Sheets(wbnamex).Cells(k, 2)

wbnamex содержит код SKU, а цифры в виде цифр приводят к ошибке. Рабочая книга объекта принимает его как серийный номер, а не как имя.

Как передать чисто числовой код SKU в виде строки?


person Sagar Sachdeva    schedule 22.08.2017    source источник
comment
Вы пытались использовать такую ​​строку: dim s как строку, а затем s=wbnamex, Workbooks(s).Sheets(s).Cells(k, 2)   -  person Tony M    schedule 22.08.2017
comment
Возможный дубликат Как преобразовать Целое число в строку в Excel VBA?   -  person Thomas Jager    schedule 22.08.2017
comment
Использовать CStr в диапазоне рабочей книги?   -  person Dave    schedule 22.08.2017
comment
Я считаю, что вы должны добавить расширение файла к имени файла книги. Попробуйте ?thisworkbook.name в окне Immediate VBE.   -  person    schedule 22.08.2017
comment
Открыты ли рабочие тетради? Вы должны сделать Workbooks.Open(xxx) перед использованием Workbook(xxx).   -  person LS_ᴅᴇᴠ    schedule 22.08.2017
comment
@TonyM wbnamex был объявлен как строковая переменная. Артикул с такими кодами, как S12345, не выдает ошибку. Только что-то вроде 12345 выдает ошибку.   -  person Sagar Sachdeva    schedule 22.08.2017
comment
@ThomasJager Да, это решило проблему. Спасибо   -  person Sagar Sachdeva    schedule 22.08.2017
comment
@Dave Да, это решило проблему. Спасибо.   -  person Sagar Sachdeva    schedule 22.08.2017
comment
@LS_ᴅᴇᴠ В цикле одновременно открываются два файла, думаю, это не сработает. Во всяком случае Cstr() решил мою проблему   -  person Sagar Sachdeva    schedule 22.08.2017
comment
@jeeped Нет, не требуется, когда файл открыт   -  person Sagar Sachdeva    schedule 23.08.2017


Ответы (1)


Это то, что сделает эту работу:

Option Explicit

Public Sub TestMe()

    Dim strName     As String
    Dim wb          As Workbook
    Dim wsAny       As Worksheet
    Dim ws          As Worksheet

    strName = "Text"

    Set wb = Workbooks.Open(ThisWorkbook.Path & "\" & strName & ".xlsm")

    For Each wsAny In wb.Worksheets
        If wsAny.Name = strName Then
            Set ws = wsAny
        End If
    Next wsAny

    Debug.Print ws.Cells(1, 1)

End Sub

Вам нужен файл Excel с именем Text.xlsm, а также рабочий лист с именем Text. Затем он покажет вам значение ячейки A1 этого листа этой книги.

Есть и другие способы сделать это, но этот работает. Файл Text должен находиться в той же папке, что и файл, в котором присутствует этот код. Файл Excel Text также должен быть закрыт.

Вы можете отредактировать код дальше, чтобы он работал для других папок и с уже открытым файлом.

person Vityata    schedule 22.08.2017
comment
Этот код поможет в другой моей проблеме. Но для исходного вопроса передача аргумента в Cstr() решит цель. Например: Workbook(Cstr(wbname)).Sheets(Cstr(wbname)).cells (k, 10). В любом случае спасибо - person Sagar Sachdeva; 23.08.2017