как определить объект диапазона в VBscript - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь преобразовать программу VBA в VbScript, чтобы запустить ее из cmd.Я создал программу на VBA, которая получает книгу Excel и ячейки с пометкой um, сохраняя ее содержимое во всех вновь созданных ячейках без пометок.объяснение: объединенные нули находятся в одной объединенной ячейке, а один - в не объединенной ячейке

[[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), а объект - rangeТип.

Спасибо за васr help

1 Ответ

1 голос
/ 30 мая 2019

Вы используете Позднее связывание.Правильная форма будет просто 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...