我正在尝试将VBA程序转换为VbScript,以便从命令运行它。我在VBA中创建了一个程序,它获得一个excel工作簿和带标记的单元格,同时将其内容保留在所有新形成的未标记的单元格中。说明:光头的0在一个合并的单元格中,而1在非合并的单元中
[0][0]]__11
在函数之后,我希望结果如下所示:
11
一个单元格中的每个值
我写了一个VBA脚本来做这件事
此函数接受一个工作表,并取消所有单元格的边界,同时保留所有新形成的单元格的值
Sub UnMergeFill(ByVal ws As Worksheet)
Dim cell As Range, joinedCells As Range
For Each cell In ws.UsedRange
If cell.MergeCells Then
Set joinedCells = cell.MergeArea
cell.MergeCells = False
joinedCells.Value = cell.Value
End If
Next
End Sub
此函数接受第一个函数,并将其应用于工作簿中的所有工作表
sub UnMergeFillAllSheets()
Dim ws As Worksheet
for Each ws In Worksheets
UnMergeFill ws
Next
End Sub
当我将它转换成VBScript时,它看起来像这样:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Dim myworkbook, worksheetcount,cell
Set myworkbook = objExcel.Workbooks.Open("C:\Users\sm\Documents\work\try\try.xlsx")
worksheetcount = myworkbook.Worksheets.Count
Msgbox ("there are:"&worksheetcount&" sheets")'testing
set cell = CreateObject("Range")
For i= 1 To worksheetcount
set ws = objExcel.Worksheets(i)
ws.Activate
for each cell in ws.UsedRange
**take all merge cells and un-merge them**
Next
Next
我的问题是,我需要引用一个合并的单元格的范围,当我试图创建一个范围对象时,我得到了一个错误:
activeX组件无法创建对象:‘Range’
我知道Range的存在是因为我使用了TypeName(ws.UsedRange),并且对象是range类型。
谢谢你的帮助
发布于 2019-05-30 22:13:17
您正在使用后期绑定。正确的形式应该是只使用Dim cell
,并将其设置为Range objects。如果你尝试用它做一些Range对象不能做的事情,你将不会得到任何调试帮助,就像你不会得到IntelliSense一样。
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Dim myworkbook, worksheetcount, cell
Set myworkbook = objExcel.Workbooks.Open("C:\Users\sm\Documents\work\try\try.xlsx")
worksheetcount = myworkbook.Worksheets.Count
Msgbox ("there are:"&worksheetcount&" sheets")'testing
For Each ws In objExcel.Worksheets
ws.Activate
For each cell in ws.UsedRange.Cells 'Loop through Cells, not Rows or Columns
**take all merge cells and un-merge them**
Next cell
Next ws
https://stackoverflow.com/questions/56378961
复制相似问题