2014-02-03 1 views
0

У меня есть небольшой проект для получения данных из Access с использованием SQL-запросов и записи данных в excel. Подготовившись к этому, я попытался сделать следующее. Полученный результат - «Hello» в (6,5) и «Hello Again» в (6,6). «Мир» теряется. Я не уверен, как правильно перемещаться. Большинство других переменных, которые вы видите ниже, объявлены глобальными.Проблема с сотовой навигацией в Excel из Access VBA

Sub enterDataInCell() 

Dim Cell As Object 

Set xlApp = CreateObject("Excel.Application") 
xlApp.DisplayAlerts = False 

Set wb = xlApp.Workbooks.Open("H:\Documents\Misc-Work\BU\test.xlsx") 

Set ws = wb.Sheets(1) 

irow = 6 
icol = 5 

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol) 

Cell.Value = "Hello" 

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol).offset(0, 1) 

Cell.Value = "World" 

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol).offset(0, 1) 

Cell.Value = "Hello Again" 

wb.Save 
wb.Close 
xlApp.DisplayAlerts = True 

Set wb = Nothing 
Set xlApp = Nothing 
Set Cell = Nothing 

End Sub 
+0

Это потому, что вы переписали «Мир» с «Привет снова». Сначала вы пишете в (6,6) = «Мир», а затем (6,6) = «Привет снова» –

+0

не смещает ли смещение над 1 столбцом? Если нет, что мне нужно сделать, чтобы увидеть 3 слова? – rajeev

+0

Вам нужно '.Offset (0,2)' для второго оператора смещения ... –

ответ

0

Поскольку значение iCol не изменилась (и не изменится, независимо от того, сколько раз вы используете метод .Offset, вы должны изменить аргумент, передаваемый методу .Offset.

Try :

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol) 

Cell.Value = "Hello" 

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol).offset(0, 1) 

Cell.Value = "World" 

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol).offset(0, 2) 

Cell.Value = "Hello Again" 

Или вы можете явно сослаться на позиции строки/столбца и избежать .Offset в целом:

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol) 

Cell.Value = "Hello" 

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol + 1) 

Cell.Value = "World" 

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol + 2) 

Cell.Value = "Hello Again" 

В качестве альтернативы вы можете определить объект Cell, а затем установить его как новую ячейку, используя метод Offset.

Set Cell = xlApp.Workbooks(1).Activesheet.cells(irow, icol) 

Cell.Value = "Hello" 

Set Cell = Cell.offset(0, 1) 

Cell.Value = "World" 

Set Cell = Cell.offset(0, 1) 

Cell.Value = "Hello Again" 
+0

Спасибо .. что работал – rajeev

+0

Вместо этой сложной конструкции '= xlApp.Workbooks (1) .ActiveSheet ...' попробуйте использовать только вашу переменную рабочего листа, которая, по-видимому, не вызывала ошибку: 'Set cell = ws.Cells (iRow, iCol)' –

Смежные вопросы