Как выполнить однокнопочное действие для нескольких листов (вкладок) Excel, используя скрипт VB? - PullRequest
0 голосов
/ 15 ноября 2018

Я новичок в скрипте VB, и у меня есть лист Excel с несколькими вкладками.Я создал одну кнопку внутри одного листа Excel.Еще листы, имеющие какой-то стол.Я хочу сгенерировать некоторый код внутри файла с этими таблицами Excel, используя простую кнопку.

Например:

Эта книга Excel имеет одну вкладку под названием Generate.Внутри Generate я создал одну кнопку.

enter image description here

У меня есть еще одна вкладка с именем страны, которая содержит таблицу для списка стран

enter image description here

У меня есть еще одна вкладка с именем car, которая содержит таблицу для списка автомобилей

enter image description here

Теперь я хочу создать файл ".txt ", который должен быть создан с некоторым кодом из обеих вкладок (страна и транспортное средство) при нажатии кнопки" Создать код ".

My output.txt формат:

*from sheet1 Country*/

VAR const US[] =
{
   0x0,/*binary 00000*/
   0xB,/*binary 01011*/
   0x3,/*binary 00011*/
   0x3,/*binary 00011*/
   0xB,/*binary 01011*/
   1xB /*binary 11011*/
};

//need to crate hexa array for Uk,france,brazil and india   

VAR DefaultCountry[] =
{
  invalid,
  UK,
  Brazil,
  Brazil,
  UK,
  India
};

/* from sheet2 car */

VAR const polo[] =
{

};

//need to crate hexa array for BMW,i20,Swift and wagnor   

VAR DefaultCAR[] =
{
  invalid,
  BMW,
  Swift,
  Swift,
  BMW,
  Wagnor
}   

excelsheet.txt формат:

const exceldetails[Maxindex] = 
       {
         /* index 0 */
         /* index 1 */
        { 
         { UK, India, brazil,eMaxNoOfcountry, eMaxNoOfcountry},
          {BMW, Wagnor, Swift,eMaxNoOfcar,eMaxNoOfcar },
          index1,
        },
         /*index 2*/
         etc..
    };
  1. Если столбец имеет «-», он должен принимать значение 0, а если он является целым числом, он должен принимать значение 1 и печатать значение hexa и двоичное значение как

    например: для индекса страны 0: - - - - - => двоичный: 00000 => гекса: 0x0 индекс 1: - 1 - 3 2 => двоичный: 01011 => гекса: 0xB

    Имя массива: VAR const US [], Франция и т. Д. VAR const polo [], swift и т. Д.

  2. Если столбец содержит 1, это значение по умолчанию и вывод значения по умолчаниюИмя столбца для каждого индекса в массиве

    имя массива: VAR DefaultCountry [], VAR DefaultCAR [])

  3. Создать другой файл "exceldetails.TXT "и напишите порядок каждой страны и детали автомобиля в массиве.Если "-" присутствует как eMaxNoOf.

    имя массива: exceldetails [Maxindex])

Как это сделать?Любая помощь ?Любая ссылка также будет полезна.Как использовать одну кнопку для получения значений таблицы из нескольких вкладок?

1 Ответ

0 голосов
/ 15 ноября 2018

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

Sub test()

'binary code and hex code
With Application.WorksheetFunction ' with this row you can use the functions Dec2Bin, Dec2Hex 

    'convert decimal in binary
    Cells(1, 1) = .Dec2Bin(Cells(1, 2)) ' input 3 -> out: 11

    'convert binary in hex
    Cells(2, 1) = .Dec2Hex(Cells(2, 2)) ' input 11 -> out B

End With
End Sub

это фрагмент кода, где вы можете создать и записать в файл TXT

Sub test()
'create and write into file txt
'when you execute again the macro the file is overwritten
Dim fso As Object

Set fso = CreateObject("Scripting.FileSystemObject")

    Dim Fileout As Object
    Set Fileout = fso.CreateTextFile("yourPath\MyFile.txt", True, True)
    Fileout.Write "your string goes here"
    Fileout.Close
End Sub

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

надеюсь, что это поможет

РЕДАКТИРОВАТЬ, чтобы ответить на ваш комментарий. Если вы хотите работать с таблицей ниже, есть пример

Sub test()

Dim sh1, sh2 As Worksheet
Dim i, r, numRows, numColumns As Long

'set sh1 and the works it
Set sh1 = Sheets("Country") ' sheet name

'count how many rows there are into sheet1
'numRows = sh1.Range("A:A").Cells.SpecialCells(xlCellTypeContants).Count
numRows = sh1.Cells(Rows.Count, 1).End(xlUp).Row
'MsgBox numRows

'count how many columns there are into sheet1
numColumns = sh1.Cells(1, Columns.Count).End(xlToLeft).Column
'MsgBox numColumns

With sh1
For j = 2 To numColumns
   For i = 2 To numRows - 1
        If .Cells(i, j) = "-" Then

            'msgbox "the item into cell is empity: "
            'you code..
        Else
            'msgbox "the item into cells is: " & .cells(i,j)
            'your code...

        End If
    Next i
Next j
End With

'----repeat operation for the sheet2
'set sh2 and the works it
Set sh2 = Sheets("car") ' sheet name

'count how many rows there are into sheet2
numRows = sh2.Cells(Rows.Count, 1).End(xlUp).Row
'MsgBox numRows

'count how many columns there are into sheet2
numColumns = sh2.Cells(1, Columns.Count).End(xlToLeft).Column
'MsgBox numColumns

With sh2
For j = 2 To numColumns
    For i = 2 To numRows - 1
        If .Cells(i, j) = "-" Then

            'msgbox "the item into cell is empity: "
            'you code..
        Else
            'msgbox "the item into cells is: " & .cells(i,j)
            'your code...

        End If
    Next i
Next j
End With

End Sub

Есть два цикла for, потому что один использует столбцы, а другой - строки ...

...