Как перемещать значения в столбце в excel vba? [Дубликат]

Вы можете заставить его работать со следующим Binding:

  Binding = "{Binding Path =.}  

Но это не решит вашу проблему, потому что строки являются типичными, которые неизменяемы, то есть вы не можете изменить ссылку на строку, привязанную к вашему пользовательскому интерфейсу.

Итак, ваши мысли верны, вам нужно будет обернуть эти строки в объекты, использовать путь свойство привязки и передать эти объекты в ваш DataGrid.

  public class StringWrapper {public string Значение {get; set;}}  
11
задан Charles 21 December 2012 в 09:17
поделиться

3 ответа

Да, давайте используем Select в качестве примера примерного кода

: Columns("A").select

Как перемещаться по столбцам:

Метод 1: ( Вы можете использовать индекс для замены адреса Excel)

For i = 1 to 100
    Columns(i).Select
next i

Способ 2: (Использование адреса)

For i = 1 To 100
 Columns(Columns(i).Address).Select
Next i

РЕДАКТИРОВАТЬ: Разделить столбец для OP

columnString = Replace(Split(Columns(27).Address, ":")(0), "$", "")

, например вы хотите получить 27-ю колонку -> AA, вы можете получить ее таким образом

23
ответ дан Larry 16 August 2018 в 03:36
поделиться
  • 1
    + 1 для предоставления обоих методов ... :) Хотя второй становится бесполезным, если у вас есть метод 1. – Siddharth Rout 21 December 2012 в 09:41
  • 2
    знаете ли вы, как мы можем получить индекс столбца с циклом в виде строки? такие как «A», «B», ..., «AA», «AB», ... и т. д., поэтому я могу применить его к моей петле следующим образом: Range(colIndex & i & ":" & colIndex & i).Select & quot; colIndex & Quot; является индексом столбца переменной для цикла в excel – wahyueka31 21 December 2012 в 12:14
  • 3
    @Rebel просмотреть править – Larry 21 December 2012 в 12:53
  • 4
    @Larry лучше спросить, почему ему нужно название колонки :) Мне любопытно – bonCodigo 21 December 2012 в 12:56
  • 5
    @Rebel вообще никогда не нужно использовать буквы столбцов; это именно то, как разработан пользовательский интерфейс Excel, но под капотом столбцы индексируются как любая другая коллекция ... с использованием чисел . Поэтому, если действительно необходимо использовать номера. – whytheq 21 December 2012 в 18:23

Другой способ опробовать. Кроме того, select можно заменить, когда вы устанавливаете начальный столбец в объект Range.

Dim rng as Range

Set rng = WorkSheets(1).Range("A1") '-- you may change the sheet name according to yours.

'-- here is your loop
i = 1
Do
   '-- do something: e.g. show the address of the column that you are currently in
   Msgbox rng.offset(0,i).Address 
   i = i + 1
Loop Until i > 10

** Два метода получения имени столбца с использованием номера столбца **

  • Split ()

code

colName = Split(Range.Offset(0,i).Address, "$")(1)
  • Обработка строк:

код

Function myColName(colNum as Long) as String
    myColName = Left(Range(0, colNum).Address(False, False), _ 
    1 - (colNum > 10)) 
End Function 
7
ответ дан Benjamin 16 August 2018 в 03:36
поделиться
  • 1
    + 1 для другого метода – Siddharth Rout 21 December 2012 в 10:43
  • 2
    знаете ли вы, как мы можем получить индекс столбца с циклом в виде строки? такие как «A», «B», ..., «AA», «AB», ... и т. д., поэтому я могу применить его к моей петле следующим образом: Range(colIndex & i & ":" & colIndex & i).Select & quot; colIndex & Quot; является индексом столбца переменной для цикла в excel – wahyueka31 21 December 2012 в 12:10
  • 3
    @Rebel Это возможно. Но из любопытства, так как есть много эффективных способов прокрутки столбцов, почему вы хотите получить строку column name? – bonCodigo 21 December 2012 в 12:14
  • 4
    @Rebel Я нашел два разных метода, чтобы найти имя столбца. Пожалуйста, поделитесь с нами, зачем вам это нужно: D – bonCodigo 21 December 2012 в 13:04

Если вы хотите придерживаться одного и того же цикла, тогда это будет работать:

Option Explicit

Sub selectColumns()

Dim topSelection As Integer
Dim endSelection As Integer
topSelection = 2
endSelection = 10

Dim columnSelected As Integer
columnSelected = 1
Do
   With Excel.ThisWorkbook.ActiveSheet
        .Range(.Cells(columnSelected, columnSelected), .Cells(endSelection, columnSelected)).Select
   End With
   columnSelected = columnSelected + 1
Loop Until columnSelected > 10

End Sub

EDIT

Если на самом деле вы просто хотите пропустить каждую ячейку в области таблицы затем используйте что-то вроде этого:

Sub loopThroughCells()

'=============
'this is the starting point
Dim rwMin As Integer
Dim colMin As Integer
rwMin = 2
colMin = 2
'=============

'=============
'this is the ending point
Dim rwMax As Integer
Dim colMax As Integer
rwMax = 10
colMax = 5
'=============

'=============
'iterator
Dim rwIndex As Integer
Dim colIndex As Integer
'=============

For rwIndex = rwMin To rwMax
        For colIndex = colMin To colMax
            Cells(rwIndex, colIndex).Select
        Next colIndex
Next rwIndex

End Sub
1
ответ дан whytheq 16 August 2018 в 03:36
поделиться
  • 1
    + 1 OP имеет много вариантов :) – Siddharth Rout 21 December 2012 в 10:45
  • 2
    знаете ли вы, как мы можем получить индекс столбца с циклом в виде строки? такие как «A», «B», ..., «AA», «AB», ... и т. д., поэтому я могу применить его к моей петле следующим образом: Range(colIndex & i & ":" & colIndex & i).Select & quot; colIndex & Quot; является индексом столбца переменной для цикла в excel – wahyueka31 21 December 2012 в 12:14
  • 3
    @Rebel, это то же самое, что и .Range(.Cells(i, colIndex), .Cells(i, colIndex)).Select .... что я вложил в мой предложенный ответ только с более desciptive именами. НО в вашем комментарии вы упомянули Range(colIndex & i & ":" & colIndex & i).Select .... нет необходимости в повторном разделе после двоеточия: Range(colIndex & i).Select .... который фактически эквивалентен .cells(i,colIndex) – whytheq 21 December 2012 в 12:29
Другие вопросы по тегам:

Похожие вопросы: