Копирование листов Excel с указанным именем из нескольких рабочих книг в новую рабочую книгу

То, что вы пытаетесь использовать, - alloca. Объект va_list не может хранить переменные, вызов функции хранит их, и вы можете обращаться к нему только через va_list. Эти переменные действительны только во время вызова, и после этого они получают ovverwriten.

ЭТО НЕ РАБОТАЕТ:

va_list func(int dummy, ...)
{
   va_list result;
   va_start(result, dummy);
   return result;
}

Чтобы выделить память в стеке, без необходимости писать переменную функции используют alloca. Он работает более или менее как malloc, но вам не нужно вызывать free, он автоматически освобождается, когда вы покидаете область действия.

int * local = (int *) alloca(3 * sizeof(int));
local[0] = 10;
local[1] = 20;
local[2] = 30;

Это принципиально то же самое, что писать

int local[3];
local[0] = 10;
local[1] = 20;
local[2] = 30;

Но с alloca 3 не обязательно должна быть константа. Опять же, вы можете использовать его только внутри области приложения, поэтому не возвращайте его из функции.

, если вы хотите из va_list, это несколько типов в одном списке, подумайте о том, как написать такой союз:

union variant
{
    int          i;
    unsigned int u;
    float        f;
    double       d;
    const char * s;
    void *       v;
};
0
задан Jake 12 March 2019 в 01:35
поделиться

1 ответ

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

   Do While strExtension <> ""

        Set wbOpen = Workbooks.Open(strPath & strExtension)

        Dim checkSheet as Worksheet
        For each checkSheet in wbOpen.Worksheets
            If UCase$(checkSheet.Name) Like "*CLS*" Then
                checkSheet.Copy After:=wbNew.Sheets(wbNew.Sheets.Count)
                wbNew.Sheets(wbNew.Sheets.Count).Name = wbNew.Sheets(wbNew.Sheets.Count).Cells(1, 1)
            End If
        Next

        wbOpen.Close SaveChanges:=False

        strExtension = Dir

    Loop
0
ответ дан chris neilsen 12 March 2019 в 01:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: