Сотовый центр Excel сместился - PullRequest
1 голос
/ 16 декабря 2009

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

Теперь, прежде чем я начну, я просто хочу пройти предварительные экзамены. Да, я использую Microsoft Excel 2007. Нет, хотя это может работать для вас, но не для меня.

Хорошо, теперь об этом позаботятся:

Проблема, с которой я сталкиваюсь, это когда у меня

ActiveCell.NumberFormat = "# ?/?"

в моем коде my это приводит к смещению центральной линии Excel влево (это единственный способ, которым я знаю, как это объяснить).

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

если у меня есть

ActiveCell.NumberFormat = "?/?"

тогда нет ни одной из вышеперечисленных проблем.

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

Sub test()
  Sheets("sheet1").Select
  Range("a1").Select
  For i = 1 To 10
    ActiveCell.NumberFormat = "# ?/?"
    With ActiveCell
        .Locked = False
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
    End With
    ActiveCell.Value = 33
    ActiveCell.Offset(0, 1).Select
  Next i
End Sub

Будем весьма благодарны за любые предположения или причины, по которым это происходит. В идеале пользователь должен видеть смешанное число.

Дополнительная информация: если я поменяю каждую ячейку вручную на дробь, она будет работать нормально. это только когда Excel делает это.

Ответы [ 3 ]

1 голос
/ 16 декабря 2009

Это выравнивание числа таким образом, что дробные части выравниваются при просмотре в столбцах с шрифтом фиксированной ширины.

3 1/3
2    
1 3/4
3 2/7
2 2/3
3 1/2
6   
1 голос
/ 16 декабря 2009

РЕДАКТИРОВАТЬ (2)

Я тоже пробовал это делать в Excel 2007, и не имеет значения, если я изменю NumberFormat вручную или по сценарию.

В любом случае, следующий скрипт должен делать то, что вы хотите. Добавьте его к источнику вашего рабочего листа.

Он срабатывает при каждом изменении значения. Затем он проверяет, затронут ли правильный столбец (1 в моем случае), и затем пытается отформатировать число с дробями, но если из этого не получается дробь, он использует формат без дроби.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    For Each cell In Target.Cells
        If cell.Column = 1 Then
            If IsNumeric(cell.value) Then
                cell.NumberFormat = "# ?/?"
                cell.Calculate
                If InStr(1, cell.Text, "/") = 0 Then
                    cell.NumberFormat = "#"
                End If
            End If
        End If
    Next cell
End Sub

Оригинальный пост

Я пробовал это только в Excel 2003, но нет разницы между настройкой вручную или через VBA. Убедитесь, что ваш код работает точно так же, как вы вручную, просто запишите макрос того, что вы делаете вручную, и запустите его в другой ячейке.

Причина такого изменения заключается в том, что Excel резервирует это место для дробей.

 1,2 -> |      1 1/5|
 1   -> |      1    |
33   -> |     33    |
33,5 -> |     33 1/2|

Вы хотели бы получить следующее?

 1,2 -> |      1 1/5|
 1   -> |          1|
33   -> |         33|
33,5 -> |     33 1/2|

Зачем вам это в этом формате?

0 голосов
/ 22 июля 2010

На самом деле условный формат будет работать намного лучше для центрирования всего. См. Изображение ниже для моей настройки.

Fraction Format Rule

...