【发布时间】:2019-10-16 03:38:29
【问题描述】:
我正在尝试将 VBA 程序转换为 VbScript 以便从 cmd 运行它。 我在 VBA 中创建了一个程序,它获取一个 Excel 工作簿和未标记单元格,同时将其内容保留在所有新形成的未标记单元格中。 解释: 秃头的零在一个合并的单元格中,一个在非合并的单元格中
[[0][0]][0][0]][1][1][1]
在函数之后,我希望结果如下所示:
[0][0][0][0][1][1][1]
一个单元格中的每个值
我写了一个 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) 并且对象是范围类型。
感谢您的帮助
【问题讨论】:
-
Set objExcel = CreateObject("Excel.Application")应该是您对CreateObject()的唯一用途。除此之外,让 Excel 对象模型创建必要的对象。 -
for each cell in ws.UsedRange根本不需要cell成为先前定义的对象。该循环将遍历该范围。您应该简单地删除您尝试将cell定义为Range对象的行。