Страницы: 1
RSS
Ошибка runtime error 9 subscript out of range при работе с другой книгой
 
Добрый вечер знатоки. Простой макрос стал прерываться ошибка runtime error 9 subscript out of range, долго искал причину.. а оказалось дело в следующем. При открытии другой Книги, или работая в другой книге в момент когда запускаются макросы (2 шт.каждые 60сек) в Книге1 и вылетает error
Изменено: tgg - 16.03.2018 10:48:28
 
А где собственно вопрос?
С уважением,
Федор/Все_просто
 
На строке With Worksheets("Лист1") всё и происходит!
Что надо изменить в коде (?) для работы одновременно в разных Книгах EXCEL
Код
Sub ShowWatch()     
ThisWorkbook.Sheets(1).Range("F1").Value = Now - Date     
Application.OnTime Now + TimeSerial(0, 0, 60), "ShowWatch"     
Application.OnTime Now + TimeSerial(0, 0, 60), "Proverka" 
End Sub 

Private Sub "Proverka"() 
With Worksheets("Лист1")             
If [I2] = "a" Then                 
Exit Sub             
 End If             
If [J2] <> "Ok" Then                 
Exit Sub             
 End If 
OtpravkaPisma     
[I2] = "a"     
[G2] = [D139]     
[G2].Value = [G2].Value         
End With End Sub
Изменено: tgg - 31.03.2015 22:50:24
 
Начало второй процедуры:
Код
Private Sub Proverka()
With ThisWorkbook.Worksheets("Лист1")
  If .Range("I2") = "a" Then
Аналогично переделайте все квадратные скобки.
 
Вот в чём вопрос??
Пол часа полёт нормальный!
Спасибо огромное, все работает.
Но мучает вопрос, в чем косяк случился?
Изменено: tgg - 31.03.2015 22:50:35
 
1. Worksheets("Лист1")  - без указания принадлежности к книге, относится к активной в момент запуска макроса книге. Видимо, в ней нет листа Лист1.
2. Оператор With фактически не работает, т.к. нигде нет обращения к свойству или методу, начинающегося с точки.
3. [I2], т.е. Range("I2") - без указания листа, относится к активному в момент запуска макроса листу.
 
Еще раз огромное спасибо!!
 
tgg, два момента:
1. Свои коды оформляйте соответствующим тегом - посмотрите, как выглядит код у Казанского.
2. Не нужно цитировать всё подряд.
 
Доброго времени суток! Не прошло и полгода …. Я к Вам с поклоном и вопросом.
Макрос в модуле листа из этой темы (http://www.planetaexcel.ru/forum/?FID=8&PAGE_NAME=read&TID=30902), с той лишь разностью, что работает с диапазоном - If Not Intersect(ActiveCell, Range("E18:E27")) Is Nothing Then. Вот собственно сам макрос:
Код
Option Explicit 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Not Intersect(ActiveCell, Range("E18:E27")) Is Nothing Then 
        Call Module1.Spravka 
    End If 
End Sub 

Но старая песня, опять при открытии другой книги excel этот макрос зачем-то срабатывает и встаёт на 2 строке.
Подскажите пожалуйста, как его поправить!?!
Спасибо!
 
Когда открывается книга, то она становится активной, и поэтому Ваш диапазон Range("E18:E27") относится уже к ОТКРЫТОЙ книге.
There is no knowledge that is not power
 
Пробовались разные варианты, это первый вариант макроса, с указанием листа и принадлежности к книге. Но результат всегда был один и тот же.
 
Цитата
tgg написал: Пробовались разные варианты
Ну так покажите эти "разные" варианты.
There is no knowledge that is not power
 
Так они ведь не работают как надо!
 
Добрый день!
В макросах новичок, второй день разбираюсь.
Подскажите  пожалуйста.
Есть макрос который из одного файла переносит информацию в другой файл.
Другой файл называется "Система прогнозирования свободных остатков_пробный.xlsm"
Если этот файл открыт, то  данные переносятся, если файл закрыт, то данные не переносятся и выходит ошибка subscript out of range
Ниже макрос
Код
Dim sbor As Range

Sub PerenosSbor()
   Dim lStart As Long, lEnd As Long, lLastRow As Long

   Application.ScreenUpdating = False
   Application.EnableEvents = False

  Workbooks("Система прогнозирования свободных остатков_пробный.xlsm").Save

   Application.Wait (Now + TimeValue("0:00:3"))

   '1. Определение первой ячейки с данными в столбце "A".
   'After:=Cells(Rows.Count, "A") указывает, с какой ячейки начать поиск.
   'Если не указывать, то поиск ведётся с ячейки "A1" и первой просматриватся
   'ячейка "A2". Если данные уже есть в ячейке "A1", то результат
   'будет неправильным. Поэтому нужно указать ячейку, с которой начинается поиск.

   lStart = Columns("A").Find(What:="?", After:=Cells(1, "A"), _
       LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, _
       SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Row

   '2. Определение последней ячейки с данными в столбце "A".

   lEnd = Columns("A").Find(What:="?", LookIn:=xlValues, LookAt:=xlPart, _
       SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, _
       MatchCase:=False, SearchFormat:=False).Row

   '3. Выделение диапазона с данными в столбце "A".

  Set sbor = Range("A" & lStart & ":G" & lEnd)

With Workbooks("Система прогнозирования свободных остатков_пробный.xlsm").Worksheets("1.СБОР")
lLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
On Error Resume Next
.ShowAllData
sbor.Copy
.Range("A" & lLastRow).PasteSpecial xlPasteValuesAndNumberFormats
End With

Workbooks("Система прогнозирования свободных остатков_пробный.xlsm").Save
   Application.ScreenUpdating = True
   Application.EnableEvents = True
End Sub
 
В чем ошибка???
На сколько я знаю  историю создания макроса, данный макрос так же  писал не профи)
 
Ведь естественно - если файл закрыт, то при попытке его сохранения должна быть ошибка.
 
Цитата
Rjn написал: В чем ошибка?
Вы же выше сами написали, что
Цитата
Rjn написал: Если этот файл открыт, то  данные переносятся, если файл закрыт, то данные не переносятся
Макрос написан именно так, что файл должен быть предварительно открыт
Согласие есть продукт при полном непротивлении сторон
 
А где и как исправить макрос, что бы он работал при закрытом  файле?
 
1. Код в сообщении  следует оформлять кнопкой <...>
2. Не нужно форматировать шрифт мелким. Стандартный нормально смотрится.
 
Цитата
tgg написал:
Так они ведь не работают как надо!
У меня не были прописаны ПОЛНЫЕ ИМЕНА ФАЙЛОВ! - только название, без расширения:
Workbooks("Авторизация").Worksheets("Лист8")
НА моем компе макросы работали как надо! НО при установке у клиента ... как там - ..."runtime error 9 subscript out of range". Главное у них и по сети на 1 компе все прекрасно работало!!!
Пока додумался до: Workbooks("Авторизация.xlsm").Worksheets("Лист8") -  больше часа убил и вспотел! :)
 
Добрый день!
Подскажите, как исправить ошибку, мозгов не хватает понять и разобраться?!
Код
Sub GetCoordinates()
    Dim fso As Object
    Dim objShell As Object
    Dim objFolder As Object
    Dim objFile As Object
    Dim strPath As String
    Dim arrDetails As Variant
    Dim latRef As String, lonRef As String
    Dim latDeg As Double, latMin As Double, latSec As Double, lonDeg As Double, lonMin As Double, lonSec As Double, alt As Double
    Dim i As Integer
    
    'Путь к файлу
    strPath = "C:\Users\MininDO\Desktop\ExifTool\0-5\4_[10].JPG"
    
    'Создание объектов
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(fso.GetParentFolderName(strPath))
    Set objFile = objFolder.ParseName(fso.GetFileName(strPath))
    
    'Получение деталей файла
    arrDetails = Split(objFolder.GetDetailsOf(objFile, 27), ";")
    
    'Извлечение координат
    For i = 0 To UBound(arrDetails)
        If InStr(arrDetails(i), "GPS Latitude Ref") > 0 Then
            latRef = arrDetails(i + 1)
        ElseIf InStr(arrDetails(i), "GPS Latitude") > 0 Then
            latDeg = CDbl(Split(arrDetails(i + 1), "°")(0))
            latMin = CDbl(Split(arrDetails(i + 1), "°")(1))
            latSec = CDbl(Split(Split(arrDetails(i + 1), "°")(2), ".")(0))
        ElseIf InStr(arrDetails(i), "GPS Longitude Ref") > 0 Then
            lonRef = arrDetails(i + 1)
        ElseIf InStr(arrDetails(i), "GPS Longitude") > 0 Then
            lonDeg = CDbl(Split(arrDetails(i + 1), "°")(0))
            lonMin = CDbl(Split(arrDetails(i + 1), "°")(1))
            lonSec = CDbl(Split(Split(arrDetails(i + 1), "°")(2), ".")(0))
        ElseIf InStr(arrDetails(i), "GPS Altitude") > 0 Then
            alt = CDbl(Replace(arrDetails(i + 1), " m", ""))
        End If
    Next i
    
    'Преобразование координат в десятичные градусы
    If latRef = "S" Then
        latDeg = -latDeg
    End If
    If lonRef = "W" Then
        lonDeg = -lonDeg
    End If
    latDeg = latDeg + (latMin / 60) + (latSec / 3600)
    lonDeg = lonDeg + (lonMin / 60) + (lonSec / 3600)
    
    'Вывод координат в ячейки Excel
    Sheets("Sheet1").Range("A1").Value = latDeg
    Sheets("Sheet1").Range("B1").Value = lonDeg
    Sheets("Sheet1").Range("C1").Value = alt
    
    'Очистка объектов
    Set fso = Nothing
    Set objShell = Nothing
    Set objFolder = Nothing
    Set objFile = Nothing
End Sub
 
Существует ли лист "Sheet1" в активной книге?
 
Цитата
написал:
Существует ли лист "Sheet1" в активной книге?
Понял ошибку и уже исправил.
Страницы: 1
Наверх