VBA 和连接函数
VBA and concatenate function
实际上我正在寻找优化我用来配置一堆控制器(网络)的现有连接公式
我有 Sheet1,我在其中输入了从 A2 到 E2 所需的所有详细信息
我有 Sheet2 生成整体连接,其中包括来自 Sheet1.A2 的值并包含一些命令,这里是连接公式:
=CONCATENATE("ap ",Imported_Data!B2,CHAR(10),"ip enable",CHAR(10),"ip mode static",CHAR(10),"ip地址",Imported_Data!A2,"",Imported_Data!L$2,"网关",Imported_Data!L$3,CHAR(10),"ip 名称服务器",Imported_Data!L$4," ",Imported_Data!L$5,CHAR(10),"开发名称",Imported_Data!C2,CHAR(10),"描述",CHAR(147), Imported_Data!D2,CHAR(147),CHAR(10),"位置",CHAR(147),Imported_Data!E2,CHAR(147),CHAR(10),"结束")
结果如下:
"ap 00:00:00:00:00:00
ip enable
ip mode static
ip addr 1.1.1.1 255.255.0.0 gateway 172.27.1.1
ip name-server 4.2.2.1 4.2.2.2
devname name
description “Description“
location “location“
end"
为了让它在控制器上被接受是操纵结果,将连接结果复制到记事本++,删除从连接公式添加的“”,并将CHAR(147)替换为“”(即我发现让它工作的唯一方法)
我想在 VBA 中添加一个过滤器,它将:
1) 去掉concatenate块首尾的“”
2) 在描述和位置
将 `` 替换为 ""
最终结果应该是:
ap 00:00:00:00:00:00
ip enable
ip mode static
ip addr 1.1.1.1 255.255.0.0 gateway 172.27.1.1
ip name-server 4.2.2.1 4.2.2.2
devname name
description "Description"
location "location"
end
任何suggestion/advise?
这是您应该检查的一种方法,它是否适合您的目的。
首先编辑公式,将 CHAR(147) 替换为 CHAR(34),如下所示:
=CONCATENATE("ap ",Imported_Data!B2,CHAR(10)," ip enable ",CHAR(10)," ip mode static ",CHAR(10)," ip addr ",Imported_Data!A2," ",Imported_Data!L," gateway ",Imported_Data!L,CHAR(10)," ip name-server ",Imported_Data!L," ",Imported_Data!L,CHAR(10)," devname ",Imported_Data!C2,CHAR(10)," description ",CHAR(34),Imported_Data!D2,CHAR(34),CHAR(10)," location ",CHAR(34),Imported_Data!E2,CHAR(34),CHAR(10)," end")
然后将下面的代码粘贴到 VBE 中。确保更新单元格引用以适应。
Public Sub CopyConcatToNotepad()
Dim objDataObj As Object
Dim strFormula
strFormula = Split(Sheets(2).Range("A1").Value, vbCrLf) 'Write correct cell reference for CONCATENATE formula cell!
Dim strOut As String
strOut = Join(strFormula, vbCrLf)
'This is ClsID of MSFORMS Data Object
Set objDataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObj.SetText strOut, 1
objDataObj.PutInClipboard
Set objDataObj = Nothing
End Sub
然后 运行 此代码根据需要将文本复制到剪贴板。如果您将在 Notepad++ 中执行 CTRL+V,那么它将给出所需的结果!
编辑: 修改代码以纳入要求。
Public Sub CopyConcatToNotepadSelCells()
Dim objDataObj As Object
Dim rG As Range
Dim strFormula
Dim strOut As String
'Loop through all selected cells and build concat string
For Each rG In Selection
strFormula = Split(rG.Value, vbCrLf)
If Len(strOut) = 0 Then
strOut = Join(strFormula, vbCrLf)
Else
strOut = strOut & vbCrLf & Join(strFormula, vbCrLf)
End If
Next rG
'This is ClsID of MSFORMS Data Object
Set objDataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObj.SetText strOut, 1
objDataObj.PutInClipboard
Set objDataObj = Nothing
End Sub
实际上我正在寻找优化我用来配置一堆控制器(网络)的现有连接公式
我有 Sheet1,我在其中输入了从 A2 到 E2 所需的所有详细信息 我有 Sheet2 生成整体连接,其中包括来自 Sheet1.A2 的值并包含一些命令,这里是连接公式:
=CONCATENATE("ap ",Imported_Data!B2,CHAR(10),"ip enable",CHAR(10),"ip mode static",CHAR(10),"ip地址",Imported_Data!A2,"",Imported_Data!L$2,"网关",Imported_Data!L$3,CHAR(10),"ip 名称服务器",Imported_Data!L$4," ",Imported_Data!L$5,CHAR(10),"开发名称",Imported_Data!C2,CHAR(10),"描述",CHAR(147), Imported_Data!D2,CHAR(147),CHAR(10),"位置",CHAR(147),Imported_Data!E2,CHAR(147),CHAR(10),"结束")
结果如下:
"ap 00:00:00:00:00:00
ip enable
ip mode static
ip addr 1.1.1.1 255.255.0.0 gateway 172.27.1.1
ip name-server 4.2.2.1 4.2.2.2
devname name
description “Description“
location “location“
end"
为了让它在控制器上被接受是操纵结果,将连接结果复制到记事本++,删除从连接公式添加的“”,并将CHAR(147)替换为“”(即我发现让它工作的唯一方法)
我想在 VBA 中添加一个过滤器,它将:
1) 去掉concatenate块首尾的“” 2) 在描述和位置
将 `` 替换为 ""最终结果应该是:
ap 00:00:00:00:00:00
ip enable
ip mode static
ip addr 1.1.1.1 255.255.0.0 gateway 172.27.1.1
ip name-server 4.2.2.1 4.2.2.2
devname name
description "Description"
location "location"
end
任何suggestion/advise?
这是您应该检查的一种方法,它是否适合您的目的。
首先编辑公式,将 CHAR(147) 替换为 CHAR(34),如下所示:
=CONCATENATE("ap ",Imported_Data!B2,CHAR(10)," ip enable ",CHAR(10)," ip mode static ",CHAR(10)," ip addr ",Imported_Data!A2," ",Imported_Data!L," gateway ",Imported_Data!L,CHAR(10)," ip name-server ",Imported_Data!L," ",Imported_Data!L,CHAR(10)," devname ",Imported_Data!C2,CHAR(10)," description ",CHAR(34),Imported_Data!D2,CHAR(34),CHAR(10)," location ",CHAR(34),Imported_Data!E2,CHAR(34),CHAR(10)," end")
然后将下面的代码粘贴到 VBE 中。确保更新单元格引用以适应。
Public Sub CopyConcatToNotepad()
Dim objDataObj As Object
Dim strFormula
strFormula = Split(Sheets(2).Range("A1").Value, vbCrLf) 'Write correct cell reference for CONCATENATE formula cell!
Dim strOut As String
strOut = Join(strFormula, vbCrLf)
'This is ClsID of MSFORMS Data Object
Set objDataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObj.SetText strOut, 1
objDataObj.PutInClipboard
Set objDataObj = Nothing
End Sub
然后 运行 此代码根据需要将文本复制到剪贴板。如果您将在 Notepad++ 中执行 CTRL+V,那么它将给出所需的结果!
编辑: 修改代码以纳入要求。
Public Sub CopyConcatToNotepadSelCells()
Dim objDataObj As Object
Dim rG As Range
Dim strFormula
Dim strOut As String
'Loop through all selected cells and build concat string
For Each rG In Selection
strFormula = Split(rG.Value, vbCrLf)
If Len(strOut) = 0 Then
strOut = Join(strFormula, vbCrLf)
Else
strOut = strOut & vbCrLf & Join(strFormula, vbCrLf)
End If
Next rG
'This is ClsID of MSFORMS Data Object
Set objDataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
objDataObj.SetText strOut, 1
objDataObj.PutInClipboard
Set objDataObj = Nothing
End Sub