2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Старый Excel-файл со старым макросом [Excel 2003]
Сообщение07.08.2018, 23:36 
Есть старый файл типа: "Лист Microsoft Office Excel 97-2003 (.xls)" Для того чтобы его запустить я скачал Excel 2003 (некую портативную сбору), но макрос в этом файле отказался работать. Пишет:

Compile error:
Syntax error

Сам макрос такой:

код: [ скачать ] [ спрятать ]
Используется синтаксис Visual Basic
Sub Макрос2()
    i = 0
    For i = 1 To 20
    Sheets(i).Activate
    Range("H1").Select
    x = Selection.Value
    If x = 1 Then GoTo nd
    Range("C5:D105").Select
    Selection.ClearContents
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Sheets(i).Select
    Range("H5:H105").Select
    Selection.Copy
    Range("C5").Select
    Selection.PasteSpecial Paste:=xlValues; Operation:=xlNone; _
        SkipBlanks:=False; Transpose:=False
    Range("H5:H105").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A3").Select
nd:
    Range("A3").Select
    Next i
       
      Sheets("Лист1").Select
End Sub


Проблема видимо в этих строках, они выделены красным

Используется синтаксис Visual Basic
Selection.PasteSpecial Paste:=xlValues; Operation:=xlNone; _
        SkipBlanks:=False; Transpose:=False


Макрос должен работать по нажатию клавиши с названием "Новый день"

Что не так с этим макросом? На другом компьютере, он уже почти 19 лет работает. Про другой компьютер, если я правильно понял то на этом другом компьютере установлена операционная система Windows 95 и Microsoft Office 95. Как адаптировать этот файл под более современную операционную систему?

 
 
 
 Re: Старый Excel-файл со старым макросом
Сообщение07.08.2018, 23:52 
Возможно, дело в объявлении переменных. Эксель вообще-то должен показывать, в какой строке ошибка. Можно попробовать вставить первой строкой в начале функции

Используется синтаксис Visual Basic
Dim i as Long

А вообще, сказать, что код ужасен - это ничего не сказать. Все это можно нужно выкинуть и заменить на

Используется синтаксис Visual Basic
Sub Макрос2()
    Dim i as Long
    i = 0
    For i = 1 To 20
      if Range("H1").Value <> 1 then
         Sheets(i).Range("H5:H105").Copy Destination := Sheets(i).Range("C5")
         Sheets(i).Range("D5:D105").ClearContents
       end if
    Next i
    Sheets("Лист1").Select
End Sub

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

 
 
 
 Re: Старый Excel-файл со старым макросом
Сообщение08.08.2018, 00:04 
Скорее всего нужно заменить разделители элементов списка
Используется синтаксис Visual Basic
 Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False


-- Tue 07.08.2018 23:13:29 --

Если этого будет недостаточно, то посмотрите имена констант в своей версии. Возможно будет нужно изменить имена констант
Используется синтаксис Visual Basic
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=False

 
 
 
 Re: Старый Excel-файл со старым макросом
Сообщение08.08.2018, 00:31 
rockclimber, GAA спасибо за помощь, заработало

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group