2015-09-17 20 views
-1

Я пытаюсь запустить приведенный ниже код. Но он показывает ошибку подстроки вне диапазона. Когда я попытался отладить его, он отображает ошибку в строке 5: Range («A1»). Выберите Во время отладки, когда я сделал лист 1 4-й строки как Sheet2, он не будет на Sheet2. Пожалуйста, помогите мне правильно запустить код.«Мой код не работает»

Sub excelmacro() 
Application.ScreenUpdating = False 

Sheets(“Sheet1”).Select 
Range(“A1”).Select 

Sheets(“Sheet2”).Select 
Range(“A2”).Select 

For i = 1 To 3 
Sheets(“Sheet1”).Select 
If Len(ActiveCell.Value) > 1 Then 

Sheets(“Sheet1”).Select 
Xname = Right(ActiveCell.Value, Len(ActiveCell.Value) - 6) 
Xdesig = Right(ActiveCell.Offset(1, 0).Value, Len(ActiveCell.Offset(1, 0).Value) - 13) 
Xsalary = Right(ActiveCell.Offset(2, 0).Value, Len(ActiveCell.Offset(2, 0).Value) - 8) 


Sheets(“Sheet2”).Select 
ActiveCell.Value = Xname 
ActiveCell.Offset(0, 1).Value = Xdesig 
ActiveCell.Offset(0, 2).Value = Xsalary 
ActiveCell.Offset(1, 0).Select 
Sheets(“Sheet1”).Select 
ActiveCell.Offset(3, 0).Select 

Else 
i = 10 
End If 
i = i - 1 
Next 
Application.ScreenUpdating = True 
End Sub 
+1

Я думаю, что ваша проблема - это кавычки, которые вы используете. Похоже, что они из текстового документа или какого-то другого редактора расширенного текстового формата. Используйте обычный текстовый редактор, например «Блокнот», чтобы заменить все кавычки на стандартные. Также вам следует избегать выбора листов и ячеек и просто ссылаться на них напрямую. Я могу изложить эту проблему дальше, если вы захотите проверить ситуацию с котировками. –

+0

Спасибо, что это сработало. Ошибка была только в котировальных знаках. – Komal

+0

Но теперь я получаю сообщение об ошибке «Определенная пользователем или объектно-зависимая ошибка в строке» Для i = от 1 до 3 » – Komal

ответ

0

Кавычки чудак и создать ошибку, но даже после перехода к «нормальным» quoates есть Подстрочный из ошибок диапазона:

Вместо использования Sheets, попробуйте Worksheets:

Worksheets("Sheet1").Select 
+0

Он отлично работает с кавычками. Но теперь я получаю сообщение об ошибке «Определенная пользователем или объектная ошибка в строке» Для i = 1 до 3 » – Komal

0

Суммируя мои комментарии:

двойные кавычки в исходном коде странно отформатирована. Используйте Блокнот или среду VBA, чтобы заменить их соответствующими двойными кавычками обычного текста.

Обязательно объявите свои переменные перед их использованием, если включен Option Explicit. Также просто хорошая практика следовать, даже если она не была включена.

(Обновляется, когда у меня больше времени этим вечером) Избегайте выбора и использования /ActiveSheet ссылок.

С небольшими изменениями в вашем коде должно выглядеть следующим образом:

Sub excelmacro() 
Dim i As Double, _ 
    Xname As String, _ 
    Xdesig As String, _ 
    Xsalary As String 

Application.ScreenUpdating = False 

Sheets("Sheet1").Select 
Range("A1").Select 

Sheets("Sheet2").Select 
Range("A2").Select 

For i = 1 To 3 
Sheets("Sheet1").Select 
If Len(ActiveCell.Value) > 1 Then 

Sheets("Sheet1").Select 
Xname = Right(ActiveCell.Value, Len(ActiveCell.Value) - 6) 
Xdesig = Right(ActiveCell.Offset(1, 0).Value, Len(ActiveCell.Offset(1, 0).Value) - 13) 
Xsalary = Right(ActiveCell.Offset(2, 0).Value, Len(ActiveCell.Offset(2, 0).Value) - 8) 


Sheets("Sheet2").Select 
ActiveCell.Value = Xname 
ActiveCell.Offset(0, 1).Value = Xdesig 
ActiveCell.Offset(0, 2).Value = Xsalary 
ActiveCell.Offset(1, 0).Select 
Sheets("Sheet1").Select 
ActiveCell.Offset(3, 0).Select 

Else 
i = 10 
End If 
i = i - 1 
Next 
Application.ScreenUpdating = True 
End Sub 
+0

Спасибо, но что такое« _ »после« Двойной »и после« Xname as String », " – Komal

+0

После выполнения кода я все равно получаю ту же ошибку« Определенная пользователем или Object-defined error ».!:( – Komal

+0

В инструкции 'Dim' есть небольшая опечатка.' Xsalar' должен быть 'xsalary'. @Komal Исправить это, и он должен работать. –

0

Я думаю, что это то, что вы пытаетесь сделать:

Sub excelmacro() 

    Dim lastrowinSheet1 As Long 
    Dim cellinSheet2 As Range 
    Dim rCell As Range 
    Dim x As Long 

    With ThisWorkbook 
     'Set a reference to cell A1 on Sheet2. 
     Set cellinSheet2 = .Worksheets("Sheet2").Range("A1") 

     With .Worksheets("Sheet1") 
      'This will return the last row number containing data in column A. 
      lastrowinSheet1 = .Cells(Rows.Count, 1).End(xlUp).Row 

      'Now loop through each cell in column A of sheet1. 
      For x = 1 To lastrowinSheet1 
       If Len(.Cells(x, 1)) > 1 Then 
        cellinSheet2.Value = Right(.Cells(x, 1).Value, Len(.Cells(x, 1).Value) - 6) 
        cellinSheet2.Offset(, 1) = Right(.Cells(x, 1).Offset(1).Value, Len(.Cells(x, 1).Offset(1).Value) - 13) 
        cellinSheet2.Offset(, 2) = Right(.Cells(x, 1).Offset(2).Value, Len(.Cells(x, 1).Offset(2).Value) - 8) 
        Set cellinSheet2 = cellinSheet2.Offset(1) 
        x = x + 2 
       End If 
      Next x 

     End With 
    End With 

End Sub 

Я попытался разбирал код - я думаю, что это он делает:

Sub excelmacro1() 

    'Stop the screen flicker. 
    Application.ScreenUpdating = False 

    'Select cell A1 on Sheet1. 
    Sheets(“Sheet1”).Select 
    Range(“A1”).Select 

    'Select cell A2 on sheet 2. 
    Sheets(“Sheet2”).Select 
    Range(“A2”).Select 

    For i = 1 To 3 

     'Select Sheet1 again. 
     Sheets(“Sheet1”).Select 

     'If the length of text in the ActiveCell is greater than 1 character then 
     'execute the lines up to ELSE. 
     If Len(ActiveCell.Value) > 1 Then 

      'Select Sheet1 yet again. 
      Sheets(“Sheet1”).Select 

      'Hope the value in the ActiveCell isn't longer than 6 digits, or it will error out. 
      'Take all characters from the ActiveCell except the last 6. 
      Xname = Right(ActiveCell.Value, Len(ActiveCell.Value) - 6) 
      'Take all characters from the ActiveCell except the last 13. 
      Xdesig = Right(ActiveCell.Offset(1, 0).Value, Len(ActiveCell.Offset(1, 0).Value) - 13) 
      'Take all characters from the ActiveCell except the last 8. 
      Xsalary = Right(ActiveCell.Offset(2, 0).Value, Len(ActiveCell.Offset(2, 0).Value) - 8) 

      'Select Sheet2. 
      Sheets(“Sheet2”).Select 
      'Place the values in ActiveCell and the two columns to the right. 
      ActiveCell.Value = Xname 
      ActiveCell.Offset(0, 1).Value = Xdesig 
      ActiveCell.Offset(0, 2).Value = Xsalary 
      'Select the next row down. 
      ActiveCell.Offset(1, 0).Select 
      'Active Sheet1 again. 
      Sheets(“Sheet1”).Select 
      'Select the cell 3 rows down from the previous row. 
      ActiveCell.Offset(3, 0).Select 
     Else 
     'If the lengh of text in the ActiveCell is 1 character or less then set the value of i to 10. 
     i = 10 
     End If 
     'Remove 1 from i. 
     i = i - 1 
    Next 
    Application.ScreenUpdating = True 
End Sub 
Смежные вопросы