我试图将VBA程序转换为VbScript,以便从cmd运行它。 我在VBA中创建了一个程序,该程序可以获取excel工作簿和um-marged单元格,同时将其内容保留在所有新形成的未标记单元格中。 说明: 秃顶的零在一个合并的单元格中,一个在一个非合并的单元格中
[[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组件无法创建对象:“范围”
我知道范围存在,因为我使用了TypeName(ws.UsedRange)并且对象是范围类型。
谢谢您的帮助
答案 0 :(得分:1)
您正在使用后期绑定。正确的格式应该是Dim cell
,并将其设置为Range对象。如果您尝试使用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