将宏公式应用于Excel公式

时间:2017-12-13 14:34:11

标签: excel vba excel-vba excel-formula

感谢您抽出宝贵时间阅读我的查询。

将公式应用于我的Excel工作表时遇到问题。我目前正在使用宏将几张纸合并为一张。它非常粗糙,但它确实起作用。

Sub Combine()
    Application.DisplayAlerts = False
    Sheets("Combined").Delete
    Application.DisplayAlerts = True

    Dim J As Integer

    On Error Resume Next

    Sheets(1).Select
    Worksheets.Add
    Sheets(1).Name = "Combined"
    Sheets(2).Activate
    Range("A1").EntireRow.Select
    Selection.Copy Destination:=Sheets(1).Range("A1")

    For J = 3 To 6
        Sheets(J).Activate
        Range("A1").Select
        Selection.CurrentRegion.Select
        Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select
        Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2)
        Sheets("Combined").Visible = False
    Next
End Sub

这给了我一个特定的页面,我需要从中绘制信息。我将它绑定到按钮,以便将来轻松访问。我目前正在努力应用一个公式,该公式从前面提到的' Combined'片。删除代码开头的工作表后,我使用的公式将丢失。

=IF(ISNUMBER(SEARCH("_",Combined!A2)),LEFT(Combined!A2,(FIND("_",Combined!A2,1)-1)))

所以我尝试将它应用于宏。但正如你可以看到那里有一个下划线,VBA对它有一个非常具体的解释。有解决方法吗?

Sub Place_formula()
'trying to place the formulae once again
Range("F2").Formula = 
"=IF(ISNUMBER(SEARCH("_",Combined!A2)),LEFT(Combined!A2,
(FIND("_",Combined!A2,1)-1)))"
End Sub 

如果我设法做到这一点,我将很容易找到一种方法将其复制到需要的地方。

1 个答案:

答案 0 :(得分:1)

您必须在VBA中加倍报价

Range("F2").Formula = "=IF(ISNUMBER(SEARCH(""_"",Combined!A2)),LEFT(Combined!A2,(FIND(""_"",Combined!A2,1)-1)))"

还建议修改主代码以避免选择,并使用一些工作表变量来更容易地引用相关表格。

Sub Combine()

Application.DisplayAlerts = False
workSheets("Combined").Delete
Application.DisplayAlerts = True

Dim ws1 As Worksheet, ws2 As Worksheet
Dim J As Long

Set ws1 = Sheets(1)
Set ws2 = Worksheets.Add(before:=ws1)
ws2.Name = "Combined"
ws1.Range("A1").EntireRow.Copy Destination:=ws2.Range("A1")

For J = 3 To 6
    With workSheets(J).Range("A1").CurrentRegion
        .Offset(1, 0).Resize(.Rows.Count - 1).Copy Destination:=ws2.Range("A" & Rows.Count).End(xlUp)(2)
    End With
Next
ws2.visible = False

End Sub