Рабочий лист может возразить быть объявленным глобально в Excel VBA?

Вы можете попробовать этот метод, который объединяет несколько массивов:

public static <T> T[] concatMultipleArrays(T[]... arrays)
{
   int length = 0;
   for (T[] array : arrays)
   {
      length += array.length;
   }
   T[] result = (T[]) Array.newInstance(arrays.getClass().getComponentType(), length) ;

   length = 0;
   for (int i = 0; i < arrays.length; i++)
   {
      System.arraycopy(arrays[i], 0, result, length, arrays[i].length);
      length += arrays[i].length;
   }

   return result;
}
7
задан Alistair Knock 24 July 2009 в 10:00
поделиться

3 ответа

'1. Вставьте модуль

'2. Объявите общедоступную переменную рабочего листа в модуле следующим образом

Public xlwkGSModel As Worksheet

'3. Создайте экземпляр этой общедоступной переменной в событии загрузки приложения

Sub Workbook_Open()

   Set xlwkGSModel = ActiveWorkbook.Worksheets("gs_model")

End Sub

'Теперь вы можете ссылаться на рабочий лист gs_model с помощью переменной xlwkGSModel

' Например

dim x as string

x = xlwkGSModel.Cells(1,1)
11
ответ дан 6 December 2019 в 07:27
поделиться

Можно, но действительно ли вам нужно больше глобальных переменных? Почему бы не создать (в стандартном модуле) общедоступное свойство ModelWorksheet, например:

Public Property Get ModelWorksheet As Worksheet
    Const ModelWorksheetName As String = "gs_model"
    Set ModelWorksheet = ActiveWorkbook.Worksheets(ModelWorksheetName)
End Property

... тогда ваш код может:

With ModelWorksheet
    .Cells(1,1).Value = "foo"
    .Font.Bold = True
End With

Обратите внимание, что вы можете ссылаться на любой из листов в текущей книге напрямую, поэтому, если есть лист с именем Sheet1, вы можете сделать:

With Sheet1
    .Cells(1,1).Value = "foo"
    .Font.Bold = True
End With
4
ответ дан 6 December 2019 в 07:27
поделиться

Изменить: Комментарий Алистера Нока верен, я должен был внимательно прочитать вопрос - конечно, мой ответ недействителен для объектов, только для таких типов, как строка или целое число. Для объектов вам нужна функция или подпрограмма, которая создает экземпляр.


Да, вы можете, я недавно сделал это. Если вы определяете свои определения как Public , вы можете использовать их непосредственно в других ваших модулях (в той же книге, конечно).

Возможно, лучший подход - иметь отдельный модуль Globals и положите их туда.

0
ответ дан 6 December 2019 в 07:27
поделиться
Другие вопросы по тегам:

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