Как передать две переменные даты в виде объединенной строки для destName в copyByName (srcName, destName, index) в LibreOfficeCalc (4.2 .8.2) [закрыто]

заранее спасибо. Заголовок резюмирует это довольно кратко, но для наглядности вот то, что я пытаюсь сделать:

Sub Main
dim doc as Object, sheet as Object
doc=ThisComponent
numSheets=doc.Sheets.count()
sheet=doc.Sheets(numSheets-1)
sheetName=sheet.Name
currentDay=Date()
lastDay=sheet.getCellRangeByName("B1").value
mon=Month(lastDay)

Select case mon:
    case 1:
        monMod=31
    case 2:
        monMod=28
    case 3:
        monMod=31
    case 4:
        monMod=30
    case 5:
        monMod=31
    case 6:
        monMod=30
    case 7:
        monMod=31
    case 8:
        monMod=31
    case 9:
        monMod=30
    case 10:
        monMod=31
    case 11:
        monMod=30
    case 12:
        monMod=31
End Select
nextMonEnd=CDate(lastDay+monMod)
If currentDay > lastDay Then
    newName$=CDate(lastDay+1) & "-" & CDate(nextMonEnd)
    doc.Sheets.copyByName(sheetName, newName$, numSheets) '<--
    newSheet=doc.sheets(numSheets)               'this part here is the 
    newPrevious=newSheet.getCellRangeByName("A1")'snag.Throws a Runtime 
    newPrevious.string=CDate(lastDay+1)         'Exception, Message: .
    newEnd=newSheet.getCellRangeByName("B1")    'I think it's passing a 
    newEnd.string=CDate(nextMonEnd)             'null, but I don't know
End If                                          'why. Any help would be  
End Sub                                         'greatly appreciated

Если я жестко запрограммирую аргумент destName, он работает чисто. Я пробовал несколько разных подходов, но любая переменная, которую я передаю в качестве destName, выдает ошибку. Еще раз спасибо, ребята и девчонки.

Изменено: С некоторой помощью (см. Комментарии) я придумал эту рабочую версию своего макроса, все остальное осталось прежним. Публикуем его для актуальности.

nextMonEnd=CDate(lastDay+monMod)
newFirst=CDate(lastDay+1)
newName=CStr(Format(newFirst, "mm-dd-yyyy")) & " " & _
CStr(Format(nextMonEnd, "mm-dd-yyyy"))
If currentDay > lastDay Then

    doc.Sheets.copyByName(sheetName, newName, numSheets)
    newSheet=doc.sheets(numSheets)
    newCurrent=newSheet.getCellRangeByName("A1")
    newCurrent.value=lastDay+1
    newEnd=newSheet.getCellRangeByName("B1")
    newEnd.value=nextMonEnd
    print "New Monthly sheet added."
End If
1
задан 26 April 2016 в 21:56

1 ответ

Проблема состоит в том, что получающееся имя листа содержит запрещенные символы. В OpenOffice. Calc,

можно только использовать буквы, числа, пробелы и символ подчеркивания на имя листа.

( OO Calc FAQ)

имя листа, которое Вы создали, содержит наклонные черты /, приводя к недопустимому имени листа.

1
ответ дан 27 April 2016 в 07:56
  • 1
    I' ve, сделанный, это так много раз, которое это повреждает - доверяет мне, это работает точно так же, как ^ – oemb1905 8 December 2017 в 15:12

Другие вопросы по тегам:

Похожие вопросы: