【问题标题】:excel vba - copy formula and generate new sheetsexcel vba - 复制公式并生成新工作表
【发布时间】:2015-02-24 03:06:34
【问题描述】:

如果我有一张名为“值”的表格,其中只有 1 列,其中包含以下单元格:

ColumnA
---------
emp_id
emp_name
dept_id

然后是第二张名为“sql”的工作表,其中包含 2 列单元格,例如:

ColumnA
--------
="select count(*) from tablex where "&a1&" is null;"
="select count(*) from tablex where length("&a1&") > 10;"

ColumnB
--------
Sheet for null
Sheet for length

什么 VBA 宏代码(注意我在 vba 中需要它,因为我只想单击一个按钮来生成表格)我需要生成以下两个输出表格(每张表格只有一列):

    Sheet for null
-------------------
select count(*) from tablex where emp_id is null;
select count(*) from tablex where emp_name is null;
select count(*) from tablex where dept_id is null;


    Sheet for length
-------------------
select count(*) from tablex where length(emp_id) > 10;
select count(*) from tablex where length(emp_name) > 10;
select count(*) from tablex where length(dept_id) > 10;

【问题讨论】:

  • 您连接到哪个数据库? (tablex 在哪里)。你已经尝试过什么?
  • 甲骨文。只是为了让这个简单的示例工作 tablex 是硬编码的,但将来我会将表名放在每个字段名旁边的单元格中。我试过手动复制单元格,但我真的很想用 vba 节省时间。

标签: vba excel scripting


【解决方案1】:

我认为这会满足您的要求。

我所做的一个更改是在“sql”表上,我将单元格内容更改为如下所示:

="select count(*) from tablex where variable is null;"

所以我使用了“variable”而不是像你原来那样使用“&a1&”,然后在代码中用正确的 emp_id、emp_name 值替换了这个词等。

    Sub GenerateSheets()
    Dim formulaRange As Range
    Dim formula As String
    Dim r As Range
    Dim destloc As Range
    Dim VariableRange As Range

    Set formulaRange = Worksheets("sql").Cells(1, 1)
    ' get each formula
    Do Until formulaRange.Value = ""
        For Each r In formulaRange.Rows
            ' for each formula found, create a new sheet and move it to end
            Worksheets.Add
            ActiveSheet.Name = r.Offset(0, 1).Value
            ActiveSheet.Move after:=Sheets(ActiveWorkbook.Sheets.Count)

            Set destloc = ActiveSheet.Cells(1, 1)
            Set VariableRange = Worksheets("values").Cells(1.1)
            ' Loop through all the variables
            Do Until VariableRange.Value = ""
                destloc.Value = Replace(formulaRange.Value, "variable", VariableRange.Value)

                Set VariableRange = VariableRange.Offset(1, 0)
                Set destloc = destloc.Offset(1, 0)
            Loop
        Next

        Set formulaRange = formulaRange.Offset(1, 0)
    Loop 
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多