2015-04-17 1 views
0

Я написал следующий код:Excel, Target Column, Target Offset, можно извлечь из другого листа?

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 
    If Target.Column = 6 Then 
    Call Current30(Target.Offset(0, -4).Text, Target.Offset(0, 10).Text, Target.Offset(0, 11).Text) 
    ElseIf Target.Column = 7 Then 
    Call Current(Target.Offset(0, -4).Text, Target.Offset(0, 9).Text, Target.Offset(0, 10).Text) 
    End If 
End Sub 

Что это делает, если вы не понимаете, это занимает ячейку, щелкните, использует строку он находится в данный момент, а затем выбирает 3 ячейки на той же строке на основе смещения выбранной ячейки. У меня есть еще одна часть, которая выплевывает это, поэтому я могу использовать ее в чем-то другом.

Я планирую перемещать информацию, хранящуюся в этих 3-х ячейках, на другой лист. Тем не менее, я не уверен, как я могу выполнить ту же задачу, но вытащить из другого листа, может ли кто-нибудь помочь мне в этом?

РЕДАКТИРОВАТЬ

Чтобы уточнить это немного, клетка я был бы выбор был бы в одном листе, и информации, мне нужно вытащили из 3-х клеток в той же строке будет во втором листе ,

+0

Я уверен, что это легко .. Но я также еще нуб в VBA :) – Jonathan

+0

Привет Джонатан, если вы положили четыре пробела в начале каждой строки кода он будет форматировать все это как один кодовый блок для вас, проще, чем возиться со всеми этими одинарными кавычками, и он будет выглядеть слишком аккуратно :) – CactusCake

+0

Ха-ха, хорошо, спасибо :) – Jonathan

ответ

0

я смог получить работу с помощью следующей VBA:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) 
    If Target.Column = 9 Then 
     Call Email(ThisWorkbook.Sheets("Sheet2").Range("B" & Target.Row).Text, _ 
      ThisWorkbook.Sheets("Sheet2").Range("C" & Target.Row).Text, _ 
      ThisWorkbook.Sheets("Sheet2").Range("D" & Target.Row).Text, _ 
      ThisWorkbook.Sheets("Sheet2").Range("E" & Target.Row).Text, _ 
      ThisWorkbook.Sheets("Sheet2").Range("F" & Target.Row).Text) 
    End If 
    Cancel = True 
End Sub 

Private Sub Email(ByVal VV As String, ByVal WW As String, ByVal XX As String, ByVal YY As String, ByVal ZZ As String) 
    Dim dblShellRetn As Double 
     dblShellRetn = Shell("C:\Program Files (x86)\AutoHotkey\AutoHotkeyU32.exe" & _ 
     Chr(32) & Chr(34) & "C:\Scripts\Script.ahk" & Chr(34) & _ 
     Chr(32) & Chr(34) & VV & Chr(34) & _ 
     Chr(32) & Chr(34) & WW & Chr(34) & _ 
     Chr(32) & Chr(34) & XX & Chr(34) & _ 
     Chr(32) & Chr(34) & YY & Chr(34) & _ 
     Chr(32) & Chr(34) & ZZ & Chr(34), vbNormalFocus) 
End Sub 
1

Переместите существующий код на другой рабочий лист. Пока в ваших Current30() или Current() процедурах, которые имеют жесткие ссылки на текущий лист (указав его по имени или номеру), вы будете золотыми.

Если эти do ссылаются на него явно, измените их, чтобы выполнить всю их работу относительно 3-х ячеек, которые вы проходите, или измените вызов подпрограммы для передачи на текущем листе и используйте это.

UPDATE На основе разъяснений в вашем OP:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) 
Dim OtherSheet as worksheet 

    Set OtherSheet = Workbooks("Sheet2") 'change the sheet name to suit 
    If Target.Column = 6 Then 
    Call Current30(OtherSheet.Cells(Target.Row, Target.Col-4).text, _ 
        OtherSheet.Cells(Target.Row, Target.Col+10).text, _ 
        OtherSheet.Cells(Target.Row, Target.Col+11).text) 
    ElseIf Target.Column = 7 Then 
    Call Current(OtherSheet.Cells(Target.Row, Target.Col-4).text, _ 
       OtherSheet.Cells(Target.Row, Target.Col+9).text, _ 
       OtherSheet.Cells(Target.Row, Target.Col+10).text) 
    End If 
End Sub 

Если сделать это для вас.

+0

Я немного запутался в том, что вы имеете в виду, я все еще довольно новичок в VBA и в основном нахожу свой код из Интернета и изменяю его в соответствии со своими потребностями lol .. Вы хотите переместить эту часть (Target.Offset (0, 0) .Text, Target.Offset (0, -4) .Text, Target.Offset (0, 10) .Text, Target.Offset (0 , 11) .Text) или всю часть Current() на новый лист? – Jonathan

+0

Переместить весь 'Private Sub Worksheet_SelectionChange (ByVal Target As Excel.Range)' на другой рабочий лист. Вам может потребоваться также перемещать 'Current30()' и 'Current()' или квалифицировать ссылки на них, если вы хотите/должны оставить их там, где они есть. Например: 'Sheet1.Current30()' – FreeMan

+0

Изменение его на Sheet2, похоже, не работает. Мне определенно нужно оставить событие изменения выбора в Sheet1, но перемещение Current() в Sheet2 тоже не сработает. Я мог бы просто сделать что-то неправильно lol .. – Jonathan