2013-12-13 6 views
0

Я создаю много таблиц в своем макросе. Поэтому я пытаюсь создать модуль table_mod, который генерирует таблицы и помещает его в три строки ниже существующей последней строки, и я планирую вызывать table_mod всякий раз, когда мне нужно создавать таблицы. Но я сталкиваюсь с тем, что мне нужно, чтобы мои переменные зависели от имени таблицы, которое дает пользователь. Например:Переменные переменные Excel VBA

Sub Main() 


' Below are all the data that my macro will generate in its number crunching 

var_12_count = "Jordan" 
var_13_count = "Kobe" 

var_21_count ="Rings" 

var_22_count = 6 
var_23_count = 5 

var_title_count = "This table lists the number of rings won by Jordan and Kobe" 


var_12_transpose = "Rings" 

var_21_transpose = "Jordan" 
var_31_transpose = "Kobe" 

var_22_transpose = 6 
var_32_transpose = 5 

var_title_transpose = "This is the transpose of the previous table" 


' My intention is to call table commands like this to spit out the earlier generated data in nicely formatted tables.  

table_mod(2,3,"count") 
table_mod(3,2,"transpose") 



End Sub 

Sub table_mod(row As Long, column As Long, name As String) 


Set wb As ActiveWorkbook 
Set ws As wb.ActiveSheet 

With ws 

lr = .Range("A" & .Rows.Count).End(xlUp).Row 


.Cells(lr+3,1).Value = var_title_&name 


For i = 1 To row 
     For j = 1 To column 

       .Cells(lr+6+i,j).Value = var_&CStr(i)&CStr(j)&_&name 

     Next j 
Next i 

End With 

End Sub 

Вывод должен выглядеть

This table lists the number of rings won by Jordan and Kobe 


     Jordan Kobe 
Rings 6  5  




This is the transpose of the previous table 


     Rings 
    Jordan 6 
    Kobe  5 

Но я не знаю, как объединить значения переменных со строками, так VBA будет знать, чтобы прочитать значения из правильных переменных.

Я открыт для любых предложений по созданию отформатированных/стандартизированных таблиц каким-то другим способом. Я намерен, чтобы все мои таблицы имели одинаковое форматирование в терминах строк, шрифтов, цветов и т. Д., Но я не включил все эти аспекты кода. Прямо сейчас я получаю красные цветные линии и неожиданные конечные сообщения на линиях. Спасибо

Если я получу это для работы, я надеюсь сделать это с каждой повторяющейся процедурой, и действительно каждой процедурой в моем макросе. Я думаю, что все так или иначе все делают.

+0

Всегда ли это стол 3 и 2 колонки? –

+0

@SiddharthRout Нет, я намерен для них быть любого размера. На сегодняшний день моя самая большая таблица - 10 строк и 4 столбца, но это может измениться в будущем. – Amatya

+0

Как вы получаете вход для вклада? Рассматривали ли вы использование массивов, а затем передавали их функции? –

ответ

1

Предложение Follwing Siddharth Rout, я сделал это, и он работает !!!!

Dim tabArray As Variant 

    'I defined the array of tables values outside everything because otherwise the other Sub was not able to access it. 

Sub Main() 




    ReDim tabArray(0 To 10, 0 To 10, 0 To 0) 

    ' Apparently, you can only ReDim the last dimension, so I picked some large number for the first two dimensions, which are my rows and columns and then the last dimension will be my table title. I will keep incrementing it as I add more tables. 

    tabArray(0, 0, 0) = "This table lists the number of rings won by Jordan and Kobe" 

    tabArray(1, 2, 0) = "Jordan" 
    tabArray(1, 3, 0) = "Kobe" 

    tabArray(2, 1, 0) = "Rings" 

    tabArray(2, 2, 0) = 6 
    tabArray(2, 3, 0) = 5 







     ReDim Preserve tabArray(0 To 10, 0 To 10, 0 To 1) 


     tabArray(0, 0, 1) = "This is the transpose of the previous table" 

    tabArray(2, 1, 1) = "Jordan" 
    tabArray(3, 1, 1) = "Kobe" 

    tabArray(1, 2, 1) = "Rings" 

    tabArray(2, 2, 1) = 6 
    tabArray(3, 2, 1) = 5 





    Call table_mod(2, 3, 0) 
    Call table_mod(3, 2, 1) 



    End Sub 

    Sub table_mod(row As Long, column As Long, number As Integer) 





    lr = Range("A" & Rows.Count).End(xlUp).row 




    Cells(lr + 3, 1).Value = tabArray(0, 0, number) 


    For i = 1 To row 
      For j = 1 To column 

        Cells(lr + 6 + i, j).Value = tabArray(i, j, number) 

      Next j 
    Next i 



    End Sub 

Это прекрасно работает, но кажется, что пустая трата пространства начинается с гигантского массива. Если есть способ сохранить строки и биты переменных также гибкими, например, возможно, иметь «массив массивов», где один массив является двумерным массивом данных таблицы, а основной массив содержит его и содержит имя таблицы. Это возможно?

Еще раз спасибо Siddharth Rout за предложение массивов.

Смежные вопросы